定义一张顺序表就是在内存中开辟一段连续的存储空间,并给他取个名字。
定义顺序列表的方法:一、静态定义;二、动态定义;
静态定义
#define MaxSize 100 ElemType Sqlist[MaxSize]; int len;
动态定义
#define MaxSize 100 typedef struct{ ElemType *elem; int length; int listsize; } Sqlist; void initSqlist(Sqlist *L) { L->elem = (int *)malloc(MaxSize*sizeof(ElemType)); if (!L->elem) { exit(0); } L->length = 0; L->listsize = Maxsize; }
像顺序表中插入元素
在长度为n的顺序表中的第i个位置插入新元素。例如:
A(a1,a2,...ai-1,ai,...an)
在第i个位置插入新元素item后,变为
A (a1,a2,...ai-1,item.ai,... an)
静态表中插入:
void InserElem(ElemType Sqlist[], int n, int i, ElemType item) { int t; if (n==MaxSize || i<1 || i>n+1) { exit(0); } for (t=n-1; t>=i-1; t--) { Sqlist[t+1] = Sqlist[t]; } Sqlist[i-1] = item; n = n + 1; }
动态表中插入
void InsertElem(Sqlist *L, int i, ElemType item) { ElemType *insertPtr, *p; if(i<1 || i>L->length+1) { exit(0); } if(L->length > L->listsize) { L->elem = (ElemType *)realloc(L->elem, (L->listsize+10)*sizeof (ElemType)); L->listsize = L->listsize + 10; } insertPtr = &(L->elem[i-1]; for (p=&(L->elem[L->length-1]); p>=inserPtr; p--) { *(p+1) = *p; } *insertPrt = item; L->length++; }