#数据结构

来源:互联网 发布:淘宝的追评在哪里看到 编辑:程序博客网 时间:2024/05/29 08:03

2.1.2 线性表的抽象数据类型

线性表是一个数据结构,并且非常灵活,为什么这么说呢?第一、可以根据需要,在线性表的任意位置插入或删除元素。第二、可以获得线性表中任意位置元素的值。第三、可以对所获得的元素的值进行修改。

下面给出对线性表的一些基本和典型操作。

ADT List{

Data:

线性表中的数据元素具有相同类型,相邻元素具有前驱和后继的关系。

Operation:

InitList (&L,maxsize,incresize)

操作结果:构造一个容量为maxsize的空线性表L。

ClearList(&L)

初始条件:线性表L已存在。

操作结果:将L重置为空表。

ListEmpty(L)

初始条件:线性表L已存在。

操作结果:若L为空表,则返回true;否则返回false。

ListLength(L)

初始条件:线性表L已存在。

操作结果:返回L中元素个数,即线性表L的长度。

LocateElem(L,e)

初始条件:线性表L已存在。

操作结果:返回L中第一个与e相等的元素的位序,若这样的元素不存在,则返回值为0.

PriorElem(L,cur_e,&pre_e)

初始条件:线性表L已存在。

操作结果:若cur_e是L的元素,但不是第一个,则用pre_e返回它的前驱;否则操作失败,pre_e无定义。

NextElem(L,cur_e,&next_e)

初始条件:线性表L已存在。

操作结果:若cur_e是L的元素,但不是最后一个,则用next_e返回它的前驱;否则操作失败,pre_e无定义。

ListInsert(&L,i,e)

初始条件:线性表L已存在,i<=i<LengthList(L).

操作结果:在L的第i个元素之前,插入新的元素e,L的长度增加1.

ListDelete(&L,i,&e)

初始条件:线性表L已存在并且非空,i<=i<=LengthList(L).

操作结果:删除L的第i个元素,并用e返回其值,L的长度减1。

GetElem(L,i,&e)

初始条件:线性表L已存在,i<=i<=LengthList(L).

操作结果:用e返回L中第i个元素的值。

ListTraverse(L)

初始条件:线性表L已存在.

操作结果:依次输出L中的每个数据元素.

DestroyList(&L)

初始条件:线性表L已存在.

操作结果:撤销线性表L。

}ADT List

例题2.1

假设线性表La和Lb分别表示集合A和集合B(线性表中的数据元素即为集合中的成员),求一个新的集合A=A并B.

算法思想:

1)从线性表Lb中取一个数据元素;

2)依据该数据的值在线性表La中进行查访;

3)若线性表La中不存在和其值相同的数据元素,则从Lb中删除这个数据元素并插入线性表La中

重复以上操作直至Lb为空表为止。

算法实现:

void union(List &La,List Lb)

{  //将线性表Lb中所有La中没有的数据插入到La中

   //算法执行结束后,线性表Lb不再存在

La_len=ListLength(La);                                                  //求线性表La的长度

while(!ListEmpty(Lb))                                                   //Lb表中的数据尚未处理完

{ListDelete(Lb,i,e);                                                          //删除Lb中的第一个数据元素赋给e

if(!LocateElem(La,e))                                                    //若La中不存在值和e相等的数据元素

ListInsert(La,++La_len,e);                                             //则将它插入在La中最后一个数据元素之后


}

DestroyList(Lb);                                                                  //撤销线性表Lb

}//union