1.顺序表的存储结构
#define LIST_INT_SIZE 10
#define LIST_INCREMENT 2
struct SqList
{
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量
};
2.创建一个空的顺序表L
void InitList(SqList &L)
{
L.elem = (ElemType *) malloc (LIST_INT_SIZE*sizeof(ElemType));
if (!L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INT_SIZE;
}
3.销毁顺序表
void DestoryList(SqList &L)
{
free(L.elem);
L.elem=NULL;
L.length=0;
L.listsize=0;
}
4.将顺序表重置为空表
void ClearList(SqList &L)
{
L.length=0;
}
5.判断顺序表是否为空
Static isEmpty(SqList &L)
{
if(L.length==0)
return TRUE;
else
return FALSE;
}
6.获得当前顺序表的长度
int getSize(SqList &L)
{
return L.length;
}
7.获得第 i 个元素
Static getElem(SqList L,int i,ElemType &e)
{
if(i<1||i>L.length)
return ERROR;
e=*(L.elem+i-1);
return OK;
}
8.在顺序表中查找一个元素的位置
int getLocation(SqList L,ElemType e)
{
int i=1;
ElemType *p=L.elem;
while(i<L.length)
{
if(e==*p)
return i;
else{
p++;
i++;
}
}
if(i>=L.length)
return 0;
}
9.获得顺序表中一个元素的前一个元素
Static getPrior(SqList L,ElemType cur_e,ElemType &pre_e)
{
int i=2;
ElemType *p=L.elem+1;
while(i<=L.length&&*p!=cur_e)
{
p++;
i++;
}
if(i>L.length)
return ERROR;
else
{
pre_e=* --p;
return OK;
}
}
10.获得顺序表中一个元素的后一个元素
Static getNext(SqList &L,ElemType cur_e,ElemType &next_e)
{
int i=1;
ElemType *p=L.elem;
while(i<L.length&&*p!=cur_e)
{
p++;
i++;
}
if(i>=L.length)
return ERROR;
else
{
next_e=* ++p;
return OK;
}
}
11.在顺序表中第 i 个位置插入新的元素
Static makeInsert(SqList &L,int i,ElemType e)
{
ElemType *newbase,*q,*p;
if(i<1||i>L.length+1)
return ERROR;
if(L.length==L.listsize)
{
newbase=(ElemType *)realloc(L.elem,(L.listsize+LIST_INCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LIST_INCREMENT;
}
q=L.elem+i-1;
for(p=L.elem+L.length-1;p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
12.在顺序表中删除第 i 个元素
Static makeDelete(SqList &L,int i,ElemType &e)
{
ElemType *p,*q;
if(i<1||i>L.length)
return ERROR;
p=L.elem+i-1;
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
L.length--;
return OK;
}