顺序表的创建
Status InitList(SqList &L)
{
L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
顺序表的销毁
Status DestroyList(SqList &L)
{
free(L.elem);
L.elem = NULL;
L.length = 0;
L.listsize = 0;
return OK;
}
顺序表的清空
Status ClearList(SqList &L)
{
L.length = 0;
return OK;
}
判断顺序表是否为空
Status ListEmpty(SqList &L)
{
if(L.length == 0)
return TRUE;
else
return FALSE;
}
顺序表的元素个数
int ListLenth(SqList L)
{
return L.length;
}
返回第i个数据元素的值
Status GetElem(SqList L;int i;ElemType &e)
{
if(i < 1 || i>L.ListLenth)
return ERROR;
else
e = *(L.elem + i - 1); //L.elem从0开始计数
return OK;
}
检索第i个元素
int LocateElem(SqList l,ElemType e,Status (*compare)(ElemType,ElemType))
{
ElemType *p;
p = L.elem;
while(i<L.length && !compare(*p++,e))
++i;
if(i<=L.ListLenth)
return i;
else
return 0;
}
输出第i个元素的前驱
Status PriorElem(SqList L,ElemType e,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 INFEASIBLE;
else
{
pre_e = *--p;
return OK;
}
}
输出第i个元素的后继
Status NextElem(Sqlist L,EmlemType cur_e,ElemType &next_e)
{
int i = 1;
ElemType *p = L.elem;
while(i < L.length && *p!=cur_e)
{
i++;
p++;
}
if(i > L.length)
return INFEASIBLE;
else
{
next_e = *++p;
return OK;
}
}
顺序表的插入节点操作
Status ListInsert(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+LISTINCREMENT)*sizeof(ElemType));
if(!*newbase)
exit(OVERFLOW);
L.lisize = L.listsize + LISTINCREMENT;
L.elem = newbase;
}
q = L.elem + i - 1;
for(p=L.elem+L.length-1;p>=q;--p)
*(p+1) = *p;
*q = e;
++L.length;
return OK;
}
顺序表的删除节点操作
Status ListDelete(SqList &L,int i;ElemType &e)
{
ElemType *p;
if(i<1 || i>L.listsize)
return ERROR;
e = L.elem + i - 1;
for(p=L.elem+i;p<=L.elem+L.length-1;p++)
*(p-1) = *p;
--L.length;
return OK;
}