动态线性表
#define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量
#define LISTINCREMENT 5 // 线性表存储空间的分配增量
typedef struct{
ListData *data;
int length;
int listsize;
}SqList;
int InitList(SqList &L){
L.data = (ListData*)malloc(LIST_INIT_SIZE*sizeof(ListData));
if(!L.data)
exit(0);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return 1;
}
int DestroyList(SqList &L){
free(L.data);
L.length = 0;
L.listsize = 0;
return 1;
}
int ClearList(SqList &L){
L.length = 0;
return 1;
}
int ListEmpty(SqList L){
return (!L.length);
}
int ListLength(SqList L){
return(L.length);
}
ListData GetElem(SqList L,int i){
if(1<=i &&i<=L.length)
return(*(L.data+i-1));
else return NULL;
}
int LocateElem(SqList L,ListData x){
int i=0;
while((i<L.length) &&(*(L.data)!=x)) i++;
if(i<L.length) return i;
else return -1;
}
int IsIn(SqList L,ListData x){
int i=0,found =0;
while((i<L.length)&&!found){
if(*(L.data+i)!=x) i++;
else found=1;
}
return found;
}
int NextElem(SqList L,ListData x){
int i=0;
while((i<L.length)&&(*(L.data+i)!=x)) i++;
if((0<=i)&&(i<L.length-1)) return i+1;
else return -1;
}
int PriorElem(L,x){
int i=0;
while((i<L.length)&&(*(L.data+i)!=x)) i++;
if((i>0) && (i<L.length)) return i-1;
else return -1;
}
int ListInsert(SqList &L,int i,ListData e){
ListData *newbase,*q,*p;
if((i<1)||(i>L.length+1)) return 0;
if(L.length==L.listsize){
newbase=(ListData*)realloc(L.data),(L.listsize+LISTINCREMENT)
*sizeof(ListDara));
if(!newbase) exit(0);
L.data=newbase;
L.listsize+=LISTINCREMENT;
}
q=L.data+i-1;
for(p=L.data+L.length-1;p>=q;--p) *(p+1)=*p;
*q=e; ++L.length;
return 1;
}
int ListDelete(SqList &L,int i){
ListData *p,*q;
if(i<1 ||i>L.length) return 0;
p=L.data+i-1;
q=L.data+L.length-1;
for(++p,p<=q;++p){
*(p-1)=*P;
}
L.length--;
return 1;
}