抽象数据类型(ADT)

  1. 为类型的属性和可对类型执行的操作提供一个抽象的描述,这个米阿叔不受任何实现的约束,甚至不受任何特定编程语言的约束,这样一种正式的抽象描述被称为抽象数据类型。
  2. 开一个实现该ADT的编程接口,即说明如何存储数据,并描述用于执行所需操作的函数集合,比如在c中,同时提供一个结构的定义和用来做做该结构的函数原型。
  3. 编程代码来实现这个接口。

列表:

列表

类型名称

简单列表

类型属性

可保存一个项目序列

类型操作

把列表初始化为空列表

确定类表是否为空

确定列表是否已满

确定列表中的个数

想列表末尾添加项目

遍历列表,处理列表中每个项目

清空列表

当用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;

类型名称

堆栈

类型属性

可保存一个规则的项目序列,

类型属性

把堆栈初始化为空堆栈

确定堆栈是否为空

确定堆栈是否已满

确定堆栈中的项目数

向堆栈顶添加项目

从堆栈顶删除项目,和恢复项目?

清空堆栈

看起来是我们不需要一个堆栈底部的指针,但是这样的话,我们就无法检测溢出。

【c_prime_plus】第十七章笔记的更多相关文章

  1. Linux内核设计第十七章笔记

    第十七章 设备与模块 关于设备驱动和设备管理,四种内核成分 设备类型:在所有unix系统中为了统一普通设备的操作所采用的分类 模块:Linux内核中用于按需加载和卸载目标代码的机制 内核对象:内核数据 ...

  2. 《Linux命令行与shell脚本编程大全》 第二十七章 学习笔记

    第二十七章:shell脚本编程进阶 监测系统统计数据 系统快照报告 1.运行时间 uptime命令会提供以下基本信息: 当前时间 系统运行的天数,小时数,分钟数 当前登录到系统的用户数 1分钟,5分钟 ...

  3. 《HTTP 权威指南》笔记:第十六章&第十七章 国际化、内容协商与转码

    <HTTP 权威指南>笔记:第十六章 国际化 客户端通过在请求报文中的 Accept-Language 首部和 Accept-Charset 首部来告知服务器:“我理解这些语言.”服务器通 ...

  4. 《构建之法》第四&十七章读书笔记

     <构建之法>第四&十七章读书笔记 一.         前言 再次阅读<构建之法>,愈发被其中生动有趣的举例吸引.作为一本给予软件工程学生的书籍,其不以枯燥的理论知识 ...

  5. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十七章:拾取

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十七章:拾取 代码工程地址: https://github.com/ ...

  6. [汇编学习笔记][第十七章使用BIOS进行键盘输入和磁盘读写

    第十七章 使用BIOS进行键盘输入和磁盘读写 17.1 int 9 中断例程对键盘输入的处理 17.2 int 16 读取键盘缓存区 mov ah,0 int 16h 结果:(ah)=扫描码,(al) ...

  7. 流畅python学习笔记:第十七章:并发处理

    第十七章:并发处理 本章主要讨论Python3引入的concurrent.futures模块.在python2.7中需要用pip install futures来安装.concurrent.futur ...

  8. Week4-作业1:《构建之法》第四章、第十七章 阅读笔记与思考

    第四章 两人合作   这一章是讲述了两人结对编程的一些东西,包括一些代码的规范,还有结对编程的优点.怎么做.以及一些注意事项. 1.“错误处理 当程序的主要功能实现后,一些程序员会乐观地估计只需要另外 ...

  9. UNP学习笔记(第十七章 ioctl操作)

    ioctl相当于一个杂物箱,它一直作为那些不适合归入其他精细定义类别的特性的系统接口. 本章笔记先放着,到时候有需要再看 ioctl函数 #include <unistd.h> int i ...

随机推荐

  1. python -- 一致性Hash

    python有一个python模块--hash_ring,即python中的一致性hash,使用起来也挺简单. 可以参考下官方例子:https://pypi.python.org/pypi/hash_ ...

  2. 《Linux内核设计与实现》读书笔记(十二)- 内存管理【转】

    转自:http://www.cnblogs.com/wang_yb/archive/2013/05/23/3095907.html 内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己 ...

  3. Flex 容器基本概念

    申明文章出处:http://www.adobe.com/cn/devnet/flex/articles/flex-containers-tips.html Flex 4 容器可以提供一套默认的布局:B ...

  4. 在android.app.Application中定义全局变量

    在Android应用中使用全局变量,除了public的静态变量,还有更优雅的方式是使用android.app.Application. 启动Application时,系统会创建一个PID,即进程ID, ...

  5. Linux 总结1

    ============================= 一般 ========================================= chown -R oracle:oinstall ...

  6. 齐次坐标概念&&透视投影变换推导

    http://daehgib.blog.163.com/blog/static/1861071422011579551134/ 透视投影是3D固定流水线的重要组成部分,是将相机空间中的点从视锥体(fr ...

  7. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同 ...

  8. git remotes

    简单地说,一个remote repository是一个非本地的repo.它可以是在你公司网络上的另外一个git repo,也可以是在internet上,甚至在你本地文件系统中的一个repo,关键点是它 ...

  9. bzoj4127

    肯定是树链剖分+线段树,关键是怎么维护 绝对值和这个东西显然不能简单的合并标记 因为对于负数,加之后绝对值和是变小的 那我们考虑对负数和非负数数分别维护 下面的问题就是经过操作如果负数变成了正数怎么办 ...

  10. HDU 1525 (博弈) Euclid's Game

    感觉这道题用PN大法好像不顶用了,可耻地看了题解. 考虑一下简单的必胜状态,某一个数是另一个数的倍数的时候是必胜状态. 从这个角度考虑一下:游戏进行了奇数步还是偶数步决定了哪一方赢. 如果b > ...