线性表——基本操作
Posted yolo-in-the-sun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性表——基本操作相关的知识,希望对你有一定的参考价值。
定义线性表结构+初始化
1 //定义线性表结构 2 typedef struct 3 { 4 int *elem;//存储空间基址 5 int length;//当前长度 6 int listsize;//当前分配的存储容量 7 }Sqlist; 8 //线性表初始化 9 int InitList_Sq(Sqlist *L) 10 { 11 L->elem=(int*)malloc(init_list*sizeof(int));//动态开辟一维数组 12 if(!L->elem) 13 exit(OVERALLOCATE);//分配失败检验 14 L->length=0;//空表初始化长度为0 15 L->listsize=init_list; 16 return OK; 17 }
线性表输入内容(注意输入量超过分配空间的扩容函数)
1 //线性表输入内容 2 int Input_Sq(Sqlist *L,int n)//输入内容的函数,n为输入数据的个数 3 { 4 int *newbase,i; 5 if(n<0) 6 return ERROR; 7 if(n>L->listsize)//输入量超过分配空间 8 { 9 newbase=(int*)malloc(listincreament*sizeof(int)); 10 if(!newbase) 11 exit(OVERALLOCATE);//查错检验 12 L->elem=newbase; 13 L->listsize+=listincreament; 14 } 15 printf("请输入元素: "); 16 for(i=0;i<n;i++) 17 { 18 scanf("%d",&L->elem[i]); 19 L->length++; 20 } 21 return OK; 22 }
增(线性表插入元素)注意插入很多元素导致之前分配空间不足的重新调整扩容
1 //线性表插入元素 2 int listinsert_Sq(Sqlist *L,int i,int e) 3 { 4 int *newbase; 5 int j; 6 if(i<1||i>L->length+1)//插入位置不在当前长度范围内的查错 7 return ERROR; 8 if(L->length>=L->listsize)//插入很多元素导致之前分配空间不足 9 { 10 newbase=(int*)realloc(L->elem,(L->listsize+listincreament)*sizeof(int)); 11 if(!newbase) 12 exit(OVERALLOCATE);//分配失败差错 13 for(int j=0;j<L->length;j++) 14 { 15 newbase[j]=L->elem[j]; 16 } 17 L->elem=newbase;//新基址 18 L->listsize+=listincreament;//两处更新,重新分配 19 } 20 for(j=L->length-1;j>=i-1;j--) 21 { 22 L->elem[j+1]=L->elem[j];//插入位置之后元素的后移 23 } 24 L->elem[i-1]=e;//插入e 25 ++L->length;//注意表长变化 26 return OK; 27 }
/*注:
realloc函数用来为ptr重新分配大小为size的一块内存
函数形式为:
void * realloc ( void * ptr, size_t new_size );
*/
删
1 //线性表删除元素 2 int listdelete_Sq(Sqlist *L,int i) 3 { 4 int e; 5 int j; 6 if(i<1||i>L->length) 7 return ERROR; 8 e=L->elem[i-1];//将删除元素赋给e 9 for(j=i-1;j<=L->length-1;j++) 10 { 11 L->elem[j]=L->elem[j+1];//被删除位置之后元素的前移 12 } 13 --L->length; 14 return OK; 15 }
查
1 //线性表查找元素函数 2 int find_Sq(Sqlist *L,int e) 3 { 4 int i; 5 for(i=0;i<L->length;i++) 6 { 7 if(L->elem[i]==e) 8 return i+1; 9 } 10 return 0; 11 }
线性表输出函数
1 //线性表输出 2 int output_Sq(Sqlist*L,int i) 3 { 4 int j; 5 printf("更新后的线性表为: "); 6 for(j=0;j<i;j++) 7 { 8 printf("%d ",L->elem[j]); 9 } 10 return OK; 11 }
主函数测试
1 //主函数测试 2 int main() 3 { 4 Sqlist MY; 5 char a; 6 a=‘Y‘; 7 int k; 8 int data; 9 int position; 10 int finddata; 11 int b; 12 InitList_Sq(&MY); 13 printf("请输入元素的个数;"); 14 scanf("%d",&k); 15 Input_Sq(&MY,k); 16 while(a==‘Y‘) 17 { 18 19 printf("请输入要删除元素的位置:"); 20 scanf("%d",&position); 21 listdelete_Sq(&MY,position); 22 output_Sq(&MY,k-1); 23 24 printf(" 请输入要插入的元素: "); 25 scanf("%d",&data); 26 printf(" 请输入要插入的位置 "); 27 scanf("%d",&position); 28 listinsert_Sq(&MY,position,data); 29 output_Sq(&MY,k); 30 31 printf(" 请输入要查找的元素:"); 32 scanf("%d",&finddata); 33 b=find_Sq(&MY,finddata); 34 if(b!=0) 35 printf("位置为:%d",b); 36 else 37 printf("没有这个元素!"); 38 39 printf(" 是否继续?(Y:继续N:结束) "); 40 getchar(); 41 scanf("%c",&a); 42 43 } 44 return OK; 45 } 46
形参为指针,实参传递地址&……;形参为地址,实参传递线性表名称L(即首地址)
以上是关于线性表——基本操作的主要内容,如果未能解决你的问题,请参考以下文章