ADT 线性表 (List)
Data
线性表的数据对象集合为{a1,a2,.....an},每个元素的类型均为DataType,其中,除第一个元素a1外,每一个元素只有一个直接前驱元素,除了最后一个元素外,每个元素都有一个后继元素。数据之间的关系是一对一的关系。
Operation
InitList (*L) : 初始化操作,建立一个空的线性表L.
ListEmpty(L) : 若线性表为空,返回true,否则返回false.
ClearList(*L) : 将线性表清空
GetElem(L,i,*e) : 将线性表L中的第i个位置元素值返回给e.
LocateElem(L,e) : 在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功,否则,返回0表示失 败
ListInsert(*L,i,e) : 在线性表L中的第i个位置插入新元素e.
ListDelete(*L,i,*e) : 删除线性表中的第i个位置元素,并用e返回其值。
ListLength(L) : 返回线性表L的元素个数。
endADT
比如,要实现二个线性表集合A和B的并集操作, A= A U B .
/*将所有的在线性表Lb中但不在La中的数据元素插入到La中*/
void unionL( List *La , List Lb)
{
int La_len,Lb_len, i;
ElemType e; /*声明与La和Lb相同的数据元素e*/
La_len = ListLength ( La); /* 求线性表的长度* /
Lb_len = ListLength (Lb);
for ( i=1; i<= Lb_len; i++) {
GetElem( Lb, i, &a); //取Lb中的第i个数据元素赋给e
if(!Locate(La, e)) // La中不存在和e相同的数据元素
ListInsert(La, ++ La_len, e); //插入
}
}
线性 表的顺序存储的结构代码
#define MAXSIZE 20
typedef int ElemType;
typedef struct {
ElemType data[MAXSIZE] ; //数组存储数据元素,最大值为MAXSIZE
int length;
}SqList;
一.获得元素操作
#define Ok 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
//操作结果,用e返回L中第i个数据元素的值
Status GetElem( Sqlist L , int i, ElemType *e)
{
if (L.length == 0 || i < 1 || i>L.length)
return ERROR;
*e = L.data[i-1];
return OK;
}