一.顺序表的基本操作
声明: 以下算法操作均为C语言执行,代码均参考老师上课所讲内容
//--------------线性表的动态分配顺序存储结构--------------------//
/*c2-1.h*/
#define SIZE 10
#define LIStINCREMENT 2
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
1.构造一个空的顺序表
#define size 10
#define ERROR 0
Status InitList(SqList *L){
(*L).elem=(ElemType *)malloc(SIZE*sizeof(ElemType));
if(!(*L).elem)
exit(ERROR);
(*L).length=0;
(*L).listsize=SIZE;
return 0;
}
2.销毁顺序表
Status DestroyList(SqList *L){
free((*L).elem);
(*L).elem=null;
(*L).length=0;
(*L).ListSize=0;
return 0;
}
3.清空顺序表
Status ClearList(SqList *L){
(*L).length=o;
return 0;
}
4.返回顺序表的长度
int ListLength(SqList L){
return L.length;
}
5.判断顺序表是否是空表
#define TRUE 1
#define FALSE 0
Status ListEmpty(SqList L){
if(L.length==0)
return TRUE;
else
return FALSE;
}
6.用e返回L中第i个数据元素的值
Status GetElem(SqList L,int i, ElemType *e){
if(i<1||i>L.length)
exit (ERROR);
*e=*(L.elem+i-1);
return ok;
}
7. 返回L中第i个与e满足关系compare()的数据元素的位序。
int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType)){
/* 初始条件:顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0) */
ElemType *p;
int i=1; /* i的初值为第1个元素的位序 */
p=L.elem; /* p的初值为第1个元素的存储位置 */
while(i<=L.length&&!compare(*p++,e))
++i;
if(i<=L.length)
return i;
else
return 0;
}
8. 操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱
Status PriorElem