//-----线性表的动态分配顺序存储结构 #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; }