线性表的基本概念

线性表:其实就是零个或多个数据元素的有限序列

线性表当中元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继,其结构如下所示

这里写图片描述

我们把线性表元素的个数n(n>=0)定义为线性表的长度,当n=0的时候就称为空表

在复杂的线性表当中会有很多个数据元素,一个数据元素可以由若干个数据项组成

这里写图片描述

关于线性表的抽象数据类型定义如下:

“ADT 线性表(List)
Data
    线性表的数据对象集合为{a1, a2, ......, an},每个元素的类型均为DataType。
    其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,
    除了最后一个元素an外,每一个元素有且只有一个直接后继元素”。
    “数据元素之间的关系是一对一的关系。
Operation
    InitList(*L):          初始化操作,建立一个空的线性表L。
    ListEmpty(L):          若线性表为空,返回true,否则返回false。
    ClearList(*L):         将线性表清空。
    GetElem(L, i, *e):     将线性表L中的第i个位置元素值返回给e。
    LocateElem(L, e):      在线性表L中查找与给定值e相等的元素,
                           如果查找成功,返回该元素在表中序号表示成功;
    ListInsert(*L,i,e):   在线性表L中的第i个位置插入新元素e
    ListDelete(*L,i,*e):  删除线性表L中第i个位置元素,并用e作为返回值
    ListLength(L):        返回线性表L的元素个数                       

对于不同的应用,线性表的基本操作是不同的,上述操作是最基本的,我们需要对具体问题具体分析,一般都说都可以通过对上述的定义的操作组合来进行解决

就比如说我要去实现线性表集合A和B的并集操作,就是要使A=AUB,其实就是要把存在集合B当中但是并不存在A中的数据元素插入到A当中,在这里面我们需要去遍历B线性表当中的元素所以需要去调用ListLength函数去获取线性表的长度,获取B线性表当中的第i个元素,需要去用到GetElem函数以及LocateElem函数去查找A线性表当中有没有和我B线性表当中一样的元素了,如果没有最后就去调用ListInsert函数

void union(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,e);//取出Lb中第i个数据元素赋值给e
    if(!LocateElem(La,e,equal)) //La当中不存在和e相同的数据元素
    {
     ListInsert(La,++La_len,e); //插入
    }
   }
}

猜你喜欢

转载自blog.csdn.net/zcmuczx/article/details/80882763
今日推荐