typedef struct sxb{int data[10];
int len;}seqlist;
typedef struct node{int data;
struct node next;}listnode;
改
typedef struct sxb{int data[10];
int len;};seqlist
typedef struct node{int data;
struct node next;};listnode
1 顺序表:
要将该表逆置,可以将表中的开始结点与终端结点互换,第二个结点与倒数第二个结点互换,如此反复,就可将整个表逆置了。算法如下:
// 表结构定义同上
void ReverseList( Seqlist L)
{
Datatype t ; //设置临时空间用于存放data
int i;
for ( i=0 ; i < L->length/2 ; i++)
{ t = L->data[i];//交换数据
L -> data[ i ] = L -> data[ L -> length - 1 - i ] ;
L -> data[ L -> length - 1 - i ] = t ;
}
}
2 链表:
也是可以用交换数据的方式来达到逆置的目的,但是由于是单链表,数据的存取不是随机的,因此算法效率太低,我们可以利用指针的指向转换来达到表逆置的目的。算法是这样的:
// 结构定义略
LinkList ReverseList( LinkList head )
{
// 将head 所指的单链表逆置
ListNode p ,q ;//设置两个临时指针变量
if( head->next && head->next->next)
{
//当链表不是空表或单结点时
p=head->next;
q=p->next;
p -> next=NULL;//将开始结点变成终端结点
while (q)
{//每次循环将后一个结点变成开始结点
p=q;
q=q->next ;
p->next = head-> next ;
head->next = p;
}
return head;
}
return head;//如是空表或单结点表,直接返回head
}
楼上的代码胡弄洋鬼子呢,也没实现逆置,只是逆向输出了一下!
#include<stdioh>
#include<stdlibh>
#define MAXSIZE 100
typedef struct{
int data[MAXSIZE];
int length;
}SeqList;
//初始化
SeqList InitList(){
SeqList L;
Llength=0;
return L;
}
//插入元素
SeqList Insert(SeqList &L,int x){
if(Llength==MAXSIZE){
printf("表满");
exit(0);
}
Llength++;
Ldata[Llength]=x;
return L;
}
//删除第i个元素
SeqList Delete(SeqList &L,int i){
if(i<1||i>Llength){
printf("不存在第%d个元素",i);
exit(0);
}
int j;
for(j=i;j<=Llength-1;j++){
Ldata[j]=Ldata[j+1];
}
Llength--;
return L;
}
//定位某个元素
int locate(SeqList L,int x){
int i;
i=1;
while(i<=Llength&&Ldata[i]!=x){
i++;
}
if(i<=Llength)
return i;
else
return 0;
}
SeqList Bingji(SeqList La,SeqList Lb,SeqList Lc){
int i,j;
for(i=1;i<=Lalength;i++){
for(j=1;j<=Lalength;j++){
if(Ladata[i]==Lbdata[j]){
Lc=Insert(Lc,Ladata[i]);
}
}
}
return Lc;
}
//打印数组
void Display(SeqList L){
int i;
for(i=1;i<=Llength;i++){
printf(" %d ",Ldata[i]);
}
printf("\n");
}
这个是基于数组的线性表,有插入和删除的 *** 作,如有不懂可追问。
线性表包括两种
一种是顺序表一种是链表
第一种楼主应该知道我就不说了
第二种如下例子:
要用的时候稍微改一下就可以了
#include <iostream>
using namespace std;
typedef struct node{
int items;//项目编号 1为50米 2为100米 3为200米
int sex; //男性代号为0 女性代号为1
int department;//院系编号 1为计算机与电子系 2为信息科学与技术系 3
float score;//得分
struct node next;
}lnode,linklist;
linklist creat()
{
int t,i;
cout<<"本次需要输入几个人的数据"<<endl;
cin>>t;
lnode p1,p2,head;
head=new lnode;
head->next=NULL;
p1=head;
for(i=1;i<=t;i++)
{
p2=new lnode;
cout<<"输入第"<<i<<"个人的 性别 得分 项目 院系"<<endl;
cin>>(p2->sex)>>(p2->score)>>(p2->items)>>(p2->department);
p1->next=p2;
p2->next=NULL;
p1=p1->next;
}
return head;
}
以上就是关于c语言线性表程序问题全部的内容,包括:c语言线性表程序问题、线性表的就地逆置的程序代码怎么写、程序定义一个完整的线性表,实现 插入和删除的算法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)