//-----线性表的动态分配顺序存储结构
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef struct {
int *elem; //存储空间基地址
int length; //当前长度
int listsize; //当前分配的存储容量
}SqList;
//线性表的初始化
int InitList_Sq(SqList &L){
//构造空的线性表L
L.elem = (int*)malloc(LIST_INC_SIZE*sizeof(int)); //为该线性表分配内存空间
if(!L.elem) exit(-1); //存储分配失败
L.length = 0; //空线性表长度为0
L.listsize = LIST_INIT_SIZE; //初始存储容量
return 1;
}//InitList_Sq
//线性表在第i个位置之前插入新元素
int ListInsert_Sq(SqList &L,int i,int e)
{
//首先判断插入位置i的值是否合法
if(i<1||i>L.length+1) return -1; //i值非法
if(L.length>=L.listsize){
//当前存储空间已满,为该线性表分配新的内存空间
newbase = (int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase) exit(-1); //该磁盘存储空间已满,无法为该线性表分配新的内存空间
//分配成功,将新分配的内存空间的首址赋值给该线性表的首址
L.elem = newbase;
//增加存储容量
L.listsize += LISTINCREMENT;
}
q = &(L.elem[i-1]); //q为插入的位置
//将i元素之后的元素向后移
for(p = &(L.elem[L.length-1]);p>=q;--p)
*(p+1) = *p;
*q = e; //插入e
++L.length; //表长加一
return 1;
}