《大话数据结构》读后总结(八)

390 阅读2分钟

线性表

定义

线性表(List):零个或多个数据元素的有限序列

线性表元素的个数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相等的元素,
                           如果查找成功,返回该元素在表中序号表示成功;

顺序存储结构

定义

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

顺序存储方式

把第一个数据元素存到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。

/* 存储空间初始分配量 */
#define MAXSIZE 20             
/* ElemType类型根据实际情况而定,这里假设为int */
typedef int ElemType;          
typedef struct
{
    /* 数组存储数据元素,最大值为MAXSIZE */
    ElemType data[MAXSIZE];    
    /* 线性表当前长度 */
    int length;                
} SqList;
数组长度与线性表长度区别
  • 数组的长度是存放线性表的存储空间的长度,存储分配后这个量一般是不变的。
  • 线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。
  • 在任意时刻,线性表的长度应该小于等于数组的长度。
地址计算方法

用数组存储顺序表意味着要分配固定长度的数组空间,由于线性表中可以进行插入和删除操作,因此分配的数组空间要大于等于当前线性表的长度。

假设占用的是c个存储单元,那么线性表中第i+1个数据元素的存储位置和第i个数据元素的存储位置满足下列关系(LOC表示获得存储位置的函数)。

LOC(ai+1)=LOC(ai)+c
LOC(ai)=LOC(a1)+(i-1)*c

欢迎扫描下方二维码,持续关注:

image

互联网工程师(id:phpstcn),我们一起学习,一起进步