D03-数据结构-线性表

2018-06-22  本文已影响0人  Vicent_Z

线性表

定义

零个或多个数据元素的有限序列。

抽象数据类型

ADT 线性表(List)
Data
    线性表的数据对象集合为{a1,a2,....,an},每个元素的类型为DataType。其中除了第一个元素a1外,每一个元素都有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素都有且只有一个后继元素。数据元素之间的关系是一对一的关系。
Operation
    InitLis(*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):删除线性表L中第i个位置元素,并用e返回其值.
    ListLength(L):返回线性表的元素个数.
endADT

线性表的顺序存储结构

定义

指的是用一段地址连续的存储单元依次存储线性表的数据元素.

#define MAXSIZE 20;
typedef int ElemType;
typedef struct
{
    ElemType data[MAXSIZE];
    int length;
}SqList;    

这里描述三个属性:

任意时候,线性表的长度应该小于等于数组的长度.

获得元素操作

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int STATUS;
/*STATUS 是函数的类型,其值是函数结果状态代码,如OK等*/
/*初始条件:顺序线性表L已存在,1<=i<=ListLength(L)*/
/*操作结果:用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;
}

插入元素操作

思路:

删除元素

思路:

优缺点

优点:

缺点:

线性表的链式存储结构

上一篇 下一篇

猜你喜欢

热点阅读