线性表
一 线性表的定义
线性表(Linear List)包含若干个相同类型的数据元素的一个线性序列,记为L=(a0,.........ai-1,ai,ai+1,....an)
二 线性表的逻辑结构和特征
线性表的逻辑结构可用形式化语言描述如下
L(D,R)
即L为包含数据元素集合D和D上关系集合R的二元组,其中
D{ai|ai belongs Datatype,i=0,1,2,3,n-1,n>-1}
R{<ai,ai+1>|ai,ai+1 belongs Datatype,-1<i<n-3}
关系符<ai,ai+1>在这里成为有序数对,表示表中任意两个相邻元素是一种先后次序关系,这种关系中称ai-1位ai的直接前驱,ai+1为ai的直接后继
三 线性表的抽象数据类型表示
ADT List{
数据元素集:D{ai|ai belongs Datatype,i=0,1,2,3,n-1,n>-1}
数据关系集:R{<ai,ai+1>|ai,ai+1 belongs Datatype,-1<i<n-3}
基本操作集:P
ListInit(&L)
操作结果:构造一个空的线性表L
ListDestroy(&L)
初始条件:线性表L存在
操作结果:撤销线性表L
ListClear(&L)
初始条件:线性表L存在
操作结果:将L设置为一张空表
ListLengt(&L)
初始条件:线性表L存在
操作结果:返回线性表的个数,即表长n
IsListEmpty(&L)
初始条件:线性表存在
操作结果:如果线性表存在返回true,否则返回false
GetElem(L,i)
初始条件:线性表存在,0<=i<=n-1
操作结果:返回线性表中第i个元素(或指针)
LocateElem(L,e)
操作条件:线性表存在,e belongs Datatype
操作结果:若e存在线性表返回e的序号,否则返回不在表中的信息
ListInert(&L,i,e)
操作条件:线性表L存在;
操作结果:若0<=i<=n-1将e插在第i个元素之前返回true,若i=n将e插在第n个位置并返回true,否则返回false
ListDel(&L,i)
操作条件:线性表L存在,0<=i<=n-1
操作结果:若0<=i<n-1返回true,否则返回false
ListTraverse(L)
初始条件:L存在
操作结果:依次对表中的结果进行访问
}
以上是在逻辑层面是建立的抽象数据类型
习题
(1)设线性表La(a1,a2,a3....),Lb(b1,b2,b3),求量表合并的操作La并Lb->La
void Union(list* La,list *Lb)
{
Int i,k;
dataType x;
for(i=0;i<ListLength(*Lb);i++)
{
x=GetElem(*Lb,i)
k=LoacateElem(*Lb,x)
if(k==-1)
ListInsert(*La,ListLength(*La),x)
}
}
(2)清除L中重复的元素
void Purge(List* L)
{
int i, j;
datetype x, y;
for (i = 0; i < ListLength(*L); i++)
{
x=GetElem((*L), i);
for (j = i + 1; j < ListLength(*L); j++)
{
y = GetElem(*L, j);
if
(y == x) ListDel(*L, j);
else
j++;
}
}
}
浙公网安备 33010602011771号