typedef int Status;
typedef int ElemType;
typedef struct {
ElemType *elem;
int length;
int listsize;
}SqList;
在第i个元素之前插入元素e
Status ListInsert_Sq(SqList &L, int i, ElemType e) {
ElemType *newbase;
ElemType *p, *q;
if(i < 1||i >L.length + 1) return ERROR;//i不合法
if(L.length >= L.listsize) {//当线性表的长度大于或等于当前分配存储空
newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));
if(!newbase) exit(OVERFLOW);//存储空间申请失败
L.elem = newbase;
L.listsize += LISTINCREMENT;
}
q = &(L.elem[i-1]);
for(p = &(L.elem[L.length - 1]); p >= q; --p) *(p+1) = *p;
*q = e;//第i个元素为e
++L.length;
printf("%d ", L.length);
return OK;
}
Status ListTraverse(SqList L, Status (*Visit)(ElemType)) {
int i;
for(i = 1; i < L.length; i++) {
Visit(L.elem[i-1]);
}
return OK;
}
Status Visit(ElemType e) {//当ElemType不为int时,不能用
printf("%d ", e);
}
main()函数
#include#include"List.h" int main(int argc, char** argv) { SqList q; int i; InitList_Sq(q); for(i = 1; i < 10; i++) ListInsert_Sq(q, i, i); ListTraverse(q, Visit); return 0; }
线性表的顺序结构是一种随机存储结构,若某线性表常用的操作是存取任意指定序号元素或在最后进行插入和删除元素运算,则应该采用顺序存储结构。



