线性表
前言
本章主要讲线性表相关的知识,其中顺序表相对简单,链式表相对复杂一些,需要对指针的概念有一定的了解,后面章节也有在链式表基础上进行扩展的内容,还需要各位打好基础~
1 线性表的定义和特点
线性表的定义
由n(n>= 0)个数据元素(结点)a1,a2,…an组成的有限序列
同一线性表中的元素必定具有相同特性,数据元素间的关系是线性关系
其中数据元素的个数n定义为表的长度,当n=0时称为空表
将非空的线性表(n>0)记作:(a1,a2,…an)
这里的数据元素ai(1≤i≤n)只是一个抽象的符号,其具体含义在不同的情况下可以不同
a1称为线性起点(起始结点),an称为线性终点(终端结点)
数据元素ai的前一个元素称为直接前驱,后一个称为直接后继
元素后的数字是下标,是元素的序号,表示元素在表中的位置
线性表的逻辑特点
(1)在非空的线性表,有且仅有一个开始结点a1,它没有直接前趋,而仅有一个直接后继a2
(2)有且仅有一个终端结点an,它没有直接后继,而仅有一个直接前趋an-1
(3)其余的内部结点ai(2≤ i ≤ n-1)都有且仅有一个直接前趋ai-1和一个直接后继ai+1
线性表是一种典型的线性结构
2 案例引入
一元多项式
稀疏多项式(只记录系数不为0的项)
图书信息管理系统
上述三个案例只是简单介绍了线性表的使用场景,感兴趣的同学可以自行通过视频课程学习,链接地址在前言中有~
总结
线性表中数据元素的类型可以为简单类型,也可以为复杂类型
许多实际应用问题所涉的基本操作有很大相似性,不应为每个具体应用单独编写一个程序
从具体应用中抽象出共性的逻辑结构和基本操作(抽象数据类型),然后实现其存储结构和基本操作
3 线性表的类型定义
抽象数据类型线性表的定义如下:
ADT List{
数据对象:D = {ai | ai∈Elemset,(i = 1,2,…,n,n≥0)}
数据关系:R = {<ai-1,ai>|ai-1,ai∈D,(i = 1,2,…,n)}
基本操作:
InitList(&L); DestroyList(&L);
ListInsert(&L,i,e); ListDelete(&L,i,&e);
…等等
} ADT List
基本操作
(1)InitList(&L) (Initialization List)
操作结果:构造一个空的线性表L
(2)DestroyList(&L)
初始条件:线性表L已经存在