表、栈和队列
3.1抽象数据类型
抽象数据类型(abstract data type ADT)是一些操作的集合。抽象数据类型是数学的抽象(?)
例如 表、集合、图和它们的操作一起可以看作是抽象数据类型。
3.2表 ADT
定义:A1,A2,A3…AN的表,这个表的大小是N
我们称大小为0的表为空表(empty list)
Ai+1后继Ai 并称 Ai+1前驱Ai
操作的集合:
PrintList :
打印List
MakeEmpty:
清空定义的数据结构
Find:
返回关键字首次出现的位置
Insert Delete:
从表中某个位置插入和删除某个关键字
FindKth:
返回某个位置上(作为参数而被指定)的元素
3.2.1 表的简单数组实现
表的所有操作都可以用数组来实现。
因为对表的大小要估计的大一些所以会浪费大量空间,同时,在实现插入和删除的过程中,时间复杂度为O(n),所以简单数组一般不用来实现表这种结构
3.2.2 链表
目的: 避免插入和删除的先行开销
链表:由一系列不必在内存中相连的结构(表元素+Next指针)组成
指针变量:用于找到链表的第一个单元
记住,一个指针就是一个数
3.2.3 程序设计细节
问题:
-
不存在所给定义出发在表的前面插入元素的真正显性的方法
-
删除表的第一个结构,可能会因为疏忽造成表的丢失
-
删除算法要求我们记住被删除元素前面的表元
解决
**解决:**增加一个头结点(表头 header)
3.2.5 双链表
就是在数据结构上附加一个域,使它包含指向前一个单元的指针即可。
开销是一个附加的链,增加了空间需求,使得插入和删除的开销增加一倍
优点,简化了删除操作。
3.26 循环链表
最后的单元指向第一个单元