抽象数据类型(ADT)
- 为类型的属性和可对类型执行的操作提供一个抽象的描述,这个米阿叔不受任何实现的约束,甚至不受任何特定编程语言的约束,这样一种正式的抽象描述被称为抽象数据类型。
- 开一个实现该ADT的编程接口,即说明如何存储数据,并描述用于执行所需操作的函数集合,比如在c中,同时提供一个结构的定义和用来做做该结构的函数原型。
- 编程代码来实现这个接口。
列表:
列表
类型名称 |
简单列表 |
类型属性 |
可保存一个项目序列 |
类型操作 |
把列表初始化为空列表 |
确定类表是否为空 |
|
确定列表是否已满 |
|
确定列表中的个数 |
|
想列表末尾添加项目 |
|
遍历列表,处理列表中每个项目 |
|
清空列表 |
当用LIST movies时,我们是在建立一个列表,而不是一个指针,这一点是概念上要注意。
链表是一种结构,如图所示,链表是很多数据结构的基础。
每个大块表示链表的一个节点,通常我们不能直接访问节点。红色部分是表达链表的地址,并非实际的一部分。
绿色部分表示节点的内容,青色部分表示存放指向下一个节点的地址。
所以链表可以这么表示
typedef struct node
{
ITEM item;
node * next;
}NODE;
链表有链表头的概念,item是节点的内容。
如图所示二叉树
二叉树也有,节点内容,左字节点,右子节点的概念。
在左节点中的项目是父节点中项目的前序项,在右节点中的项目是父节点中的后续项,这种关系存在每一个有子节点的节点中。
而且,所有以左节点为祖先的项目都是该左节点的父节点项目的前序项
所有以右节点为祖先的都是该右节点的父节点的后续项。
添加项目:
首先检查树中是否还有空位给新节点,是否有相同的项目,如果通过前两步检查,就可以创建一个新的节点,将项目复制到节点中,并设置此节点的左右指针为null。然后更新tree结构的size成员,已记录添加了一个新项目,接下来,要找出吧此节点放在书中的涩会那么位置,如果数位空,就要将根节点指针指向该新节点,否则在书中查找到放置该信节点的位置,。
它需要判断节点去向何方并添加,具体地,他需要比较新项目和根项目来决定新项目要天骄到做字数还是有字数,递归实现这种搜索算法。
当root->left或root-》right为null时函数第递归调用序列结束。
在写一个堆栈之前要想,到底要不要边界检测呢?要想,既然我们做的如此强大的模拟,为什么不要边界检测呢?
typedef struct item
{
int b[2];
}ITEM;
typedef struct node
{
ITEM items;
struct node * next;
}NODE;
typedef struct stack
{
NODE * head;
NODE * end;
int ge_shu;
}STACK;
类型名称 |
堆栈 |
类型属性 |
可保存一个规则的项目序列, |
类型属性 |
把堆栈初始化为空堆栈 |
确定堆栈是否为空 |
|
确定堆栈是否已满 |
|
确定堆栈中的项目数 |
|
向堆栈顶添加项目 |
|
从堆栈顶删除项目,和恢复项目? |
|
清空堆栈 |
|
看起来是我们不需要一个堆栈底部的指针,但是这样的话,我们就无法检测溢出。 |