线性表——基本操作

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(即首地址)

以上是关于线性表——基本操作的主要内容,如果未能解决你的问题,请参考以下文章

线性表的插入和删除操作代码(C语言)

数据结构与算法线性表的重要基本操作与代码实现C语言版

线性表的基本操作c语言实现

顺序线性表的代码实现

线性表的链式存储(C代码实现)

数据结构线性表&&顺序表详解和代码实例