线性表之顺序存储结构

来源:互联网 发布:linux系统解压缩文件 编辑:程序博客网 时间:2024/05/01 02:58

线性表的顺序存储是指用一组地址连续的存储单元一次存储线性表的数据元素。在C语言中,可以使用动态数组来实现线性表的顺序存储。

定义:

#define MAXSIZE 100typedef struct node{   //线性表结构定义       int data[MAXSIZE];  //线性表数据       int length;//长度}List,*PList;   

初始化:

Plist init_list(){       Plist pl;       pl=(PList)malloc(sizeof(List));       if(pl)             pl->length=0;       return pl;}

生成线性表:

void creat_list(PList pl,int a[],int n){       int len,i;       len=pl->length;       for(i=0;i<n;i++)           if(len+i<MAXSIZE)   {               pl->data[len+i]=a[i];               pl->length++;    }}

查找元素:

int locate_L(List l,int x){int i=0;while(i<L.length && L.data[i] !=x)i++;if(i>=L->length )</span> retutn 0;else return(i+1);}

插入元素:插入元素时会可能会改变线性表的首地址,所以应用地址作形形参

int insert_L(List &L,int i,int x)  //用线性表L的地址作形参{int j;if(!&L){printf ("表不存在");return(-2);}if (L.length >=MAXSIZE ){printf ("表溢出");return(-1);}if (i<1||i>L.length +1){printf ("插入位置不合法");return(-1);}for(j=L.length-1;j>i;j--)L.data[j+1]=L.data [j];L.data[i-1]=x;L.length++;return(1);}

删除元素:在地址可能改变时也可采用指针传递

int delete_L(PList pl,int i)  //用线性表指针作形参{int j;if(!pl){printf ("表不存在");return(-2);}if(i<1||i>pl->length ){printf("删除位置不合法");return (-2);}for(j=i-1;j<pl->length ;j++)pl->data [j]=pl->data [j+1];pl->length --;return (-1);}

求两个线性表的交集和并集:A∩B、A∪B

void inter_merge(PList La,PList Lb,int m){int i;for(i=0;i<La->length ;i++){if(!locate_L (Lb,La->data [i]) && m)  //m=1 时求A与B的交集,将A在B中不存在的元素删除,最后A=A∩Bdelete_L (La,i+1);if(!locate_L (Lb,La->data [i]) && !m)  //m=0 时求A与B的并集,将A在B中不存在的元素插入B,最后B=A∪Binsert_L (*Lb,Lb->length+1 ,La->data [i]);}}

应用

void main(){int i;int a[5]={1,2,3,4,5};PList pl1,pl2;pl1=init_L ();//初始化pl2=init_L ();create_L (pl1,a,5);//生成create_L (pl2,a,5);insert_L(*pl1,1,6);//在线性表pl1的位置1插入元素6delte_L(pl2,2);//删除线性表pl2在位置2的元素inter_merge(pl1,pl2,1);//求两个线性表的交集,结果存在pl1中for(i=0;i<pl1->length;i++)printf("%d\t",pl1->data[i]);//结果应为1  3  4  5}
1 0