线性表:

#include
#include
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

#define list_init_size 80 //初始分配存储空间
#define listincreament 10 //存储空间分配增量

初始化:

typedef struct
{
int *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量
} SqList;//结构体定义//

int InitList_Sq(SqList *L)

{

L->elem=(int *)malloc(list_init_size*sizeof(int)); //存储分配失败

if(!L->elem)

exit(OVERFLOW); //空表长度初始化为0;

L->length=0; //存储的初始容量为初始分配空间

L->listsize=list_init_size;

return OK;

}

赋值:

int Input_Sq(SqList *L,int n)

{

int i, *newbase;

if(n<0) return ERROR;

if(n>L->listsize)

{

newbase=(int *)malloc(listincreament*sizeof(int));

if(!newbase) exit(OVERFLOW);

L->elem=newbase;

L->listsize+=listincreament;

}

//如果输入的n大于初始化分配的空间,则需要扩大分配空间的范围//

printf("情输入元素:\n");

for(i=0;i

{

scanf("%d",&L->elem[i]);

//正式赋值,arr[i]=*(arr+i),所以L->elem[i]=*(L->elem+i)//

L->length++;

}

return OK;

}

int cha(sqlist *L,int p)

{

for(int i=0;i<=L->length;i++)

{

if((L->length)[i]==p)

/*L->length[i]=*(L->length+i)*/

{

printf("p在%d处",i);

}

return i;

}

插入:

int ListInsert_Sq(SqList *L,int i,int e)

{ //i需要满足1<=i<=ListLength_Sq(L)+1,即插入的元素是第一个元素到最后一个元素中间//

int *newbase;

int *p;

int *q;

if(i<1||i>L->length+1) return ERROR;

if(L->length>=L->listsize)

{ //当前存储空间已满,增加分配

newbase=(int *)malloc(L->elem,(L->listsize+listincreament)*sizeof(int));

//如果i超出范围则需要重新添加内存//

if(!newbase) exit(OVERFLOW); //存储分配失败

for(int j=0;jlength;j++)

{ newbase[j]=L->elem[j]; }

L->elem=newbase; //新基址

L->listsize+=listincreament; //增加存储容量

}

//开始后移//

q=&(L->elem[i-1]); //q为插入的位置(注意数组的下标是从0开始计数)

for(p=&(L->elem[L->length-1]);p>=q;p--)

*(p+1)=*p; //插入位置及之后的元素后移

*q=e; //插入e

L->length+=1; //表长增1

return L->length;

}

插入一个元素应该先将分配内存扩大一个元素位置,然后用指针p指向最后一个元素,q指向插入的位置,q位置及以后的元素往后移一个位置,从最后一个开始移,每转移一个将p向前推进,当p和q相遇时执行最后一个元素的后移。全部转移后在此时的q处插入元素即可。

删除:

同理,删除操作是先将删除的地方标为指针q,进行删除操作,然后将q后的元素前移就可以了。

取值:

取第i个元素的数据,即取L->elem[i]。

打开网易新闻 查看精彩图片

————————————————
学习借鉴的原文链接:https://blog.csdn.net/qq_20406597/article/details/80937446