70,037
社区成员
发帖
与我相关
我的任务
分享
//- - - - - 线性表的动态分配顺序存储结构 - - - - -
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef struct
{
int *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量(以sizeof(int)为单位)
}Sqlist; //顺序表类型
int InitList_Sq(Sqlist *L)//构造一个空的线性表L。
{
L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L->elem)
{
exit(OVERFLOW); //存储分配失败
}
L->length=0; //空表长度为0
L->listsize=LIST_INIT_SIZE;//初始存储容量
return OK;
}// InitList_Sq
int ListInsert_Sq(Sqlist *L,int i,int e)//在顺序表L中第i个位置之前插入新的元素e,i的和法值为1<=i<=ListLength_Sq(L)+1
{
int *newbase,*p,*q;
if(i<1 || i>L->length+1)
{
return ERROR; //i值不合法
}
if(L->length>=L->listsize)//当前存储空间已满,增加分配
{
newbase=(int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)
{
exit(OVERFLOW);//存储分配失败
}
L->elem=newbase; //新基址
L->listsize+=LISTINCREMENT;
}
q=&(L->elem[i-1]); //q为插入位置
for(p=&(L->elem[L->length-1]);p>=q;--p)//插入位置及之后的元素右移
{
*(p+1)=*p;
}
*q=e; //插入e
++L->length; //表长增1
return OK;
}
int ListLength_Sq(Sqlist *L)
{
return L->length;
}