//hanshushixian.cpp
#include "yudingyi.h"
#include "shunxujiegou.h"
//----线性表的动态分配顺序存储结构函数实现---------
Status InitList(SqList *L)//算法2.3:构造一个空的线性表
{
(*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;
(*L).listsize=LIST_INIT_SIZE;
return OK;
}
Status ListEmpty(SqList L)//若为空表,返回TRUE,否则返回FALSE
{
if(L.length==0)
return TRUE;
else
return FALSE;
}
Status ListLength(SqList L)//返回表中数据个数
{
return L.length;
}
Status GetElem(SqList L,int i, int *e)//用e返回表中第i个数据元素的值
{
if(i>L.listsize) return FALSE;
ElemType *p=L.elem;
*e=p[i-1];
return OK;
}
Status LocateElem(SqList L,ElemType e,Status (*compare)(ElemType *p,ElemType e))//算法2.6:返回L中第一个与e满足compare关系数据元素的位序
{
int i,n,j;
ElemType *p=L.elem;
n=ListLength(L);
for(i=1;i<=n;i++)
{
j=compare(p++,e);
if(j==1) return i;
}
return FALSE;
}
Status PriorElem(SqList L,ElemType cur_e,ElemType *e)//若cur_e是L的数据元素,且不是第一个,则用e返回它的前驱,否则操作失败
{
ElemType *p=L.elem;
ElemType i;
for(i=0;i&l