静态线性表
#define ListSize 100 //最大允许长度
typedef struct {
ListData data[ListSize] ; //存储空间
int length; //当前元素个数
} SeqList;
// 1. InitList(&L);初始化线性表L为空表;
void InitList ( SeqList &L )
{ //初始化表L为空表
L.length = 0;
// 2. DestroyList(&L) 销毁线性表L
void DestroyList(SeqList &L) //回收线性表L
{
L.length=0;
}
//3. ClearList(&L) 清空线性表L
void ClearList(SeqList &L) //清空线性表L
{
L.length=0;
}
// 4、 ListEmpty(SeqList L) 判断线性表L是否为空
int ListEmpty(SeqList L) { //若为空返回1,否则返回0
return(!(L.length)) ;
}
// 5. ListLength ( L ) 求表L的长度
int ListLength ( SeqList L )
{ //函数值是表L的长度
return(L.length);
}
//6.GetElem(L,i)函数值为线性表L中第i个元素
ListData GetElem(SeqList L,int i){
if(1<=i &&i<=L.length)
return(L.data[i-1]);
else return "Error";
}
//7.1LocateElem(L,x)查找位置
int LocateElem(SeqList L,ListData x){
int i=0;
while((i<L.length)&&(L.data[i]!=x))
i++;
if(i<L.length) return i;//成功
else return -1;//失败
}
//7.2 IsIn(L,x)判断是否在表中
int IsIn(SeqList L,ListData x){
int i=0, found =0;
while((i<L.length)&&!found){
if(L.data[i]!=x) i++;
else found=1;
}
return found; //存在返回1,否则返回0
}
//8.NextElem(L,x)求x的直接后继,若成功返回后继位置
//否则返回-1;
int NextElem(SeqList L,ListData x){
int i=0;
while((i<L.length)&&L.data[i]!=x) i++;
if((0<=i)&&(i<L.length)) return i+1;
else return -1;
}
//PriorElem(L,x),求x的直接前驱
int PriorElem(SeqList L,ListData x){
int i=0;
while(i<L.length&&L.data[i]!=x) i++;
if((0<i)&&(i<L.length)) return i-1;
else return -1;
}
//10. ListInsert(&l,i,x)在顺序表L中第i个元素前
//插入x,成功返回1,否则返回0
int ListInsert(SeqList &L,int i,ListData x){
if((i<1)||(i>L.length+1)||(L.length==ListSize))
return 0;
else {
for(int j=L.length;j>i-1;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=x;
L.length++; return 1;
}
}
//11.在顺序表L中删除第i个元素
int ListDelete(SeqList &L,int i){
if((i<1)||(i>L.length)) return 0;
L.length--;
for(int j=i-1;j<L.length+1;j++)//前移
L.data[j]=L.data[j+1];
return 1;//删除成功返回1
}