【c_prime_plus】第十七章笔记
抽象数据类型(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;
|
类型名称 |
堆栈 |
|
类型属性 |
可保存一个规则的项目序列, |
|
类型属性 |
把堆栈初始化为空堆栈 |
|
确定堆栈是否为空 |
|
|
确定堆栈是否已满 |
|
|
确定堆栈中的项目数 |
|
|
向堆栈顶添加项目 |
|
|
从堆栈顶删除项目,和恢复项目? |
|
|
清空堆栈 |
|
|
看起来是我们不需要一个堆栈底部的指针,但是这样的话,我们就无法检测溢出。 |
【c_prime_plus】第十七章笔记的更多相关文章
- Linux内核设计第十七章笔记
第十七章 设备与模块 关于设备驱动和设备管理,四种内核成分 设备类型:在所有unix系统中为了统一普通设备的操作所采用的分类 模块:Linux内核中用于按需加载和卸载目标代码的机制 内核对象:内核数据 ...
- 《Linux命令行与shell脚本编程大全》 第二十七章 学习笔记
第二十七章:shell脚本编程进阶 监测系统统计数据 系统快照报告 1.运行时间 uptime命令会提供以下基本信息: 当前时间 系统运行的天数,小时数,分钟数 当前登录到系统的用户数 1分钟,5分钟 ...
- 《HTTP 权威指南》笔记:第十六章&第十七章 国际化、内容协商与转码
<HTTP 权威指南>笔记:第十六章 国际化 客户端通过在请求报文中的 Accept-Language 首部和 Accept-Charset 首部来告知服务器:“我理解这些语言.”服务器通 ...
- 《构建之法》第四&十七章读书笔记
<构建之法>第四&十七章读书笔记 一. 前言 再次阅读<构建之法>,愈发被其中生动有趣的举例吸引.作为一本给予软件工程学生的书籍,其不以枯燥的理论知识 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十七章:拾取
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十七章:拾取 代码工程地址: https://github.com/ ...
- [汇编学习笔记][第十七章使用BIOS进行键盘输入和磁盘读写
第十七章 使用BIOS进行键盘输入和磁盘读写 17.1 int 9 中断例程对键盘输入的处理 17.2 int 16 读取键盘缓存区 mov ah,0 int 16h 结果:(ah)=扫描码,(al) ...
- 流畅python学习笔记:第十七章:并发处理
第十七章:并发处理 本章主要讨论Python3引入的concurrent.futures模块.在python2.7中需要用pip install futures来安装.concurrent.futur ...
- Week4-作业1:《构建之法》第四章、第十七章 阅读笔记与思考
第四章 两人合作 这一章是讲述了两人结对编程的一些东西,包括一些代码的规范,还有结对编程的优点.怎么做.以及一些注意事项. 1.“错误处理 当程序的主要功能实现后,一些程序员会乐观地估计只需要另外 ...
- UNP学习笔记(第十七章 ioctl操作)
ioctl相当于一个杂物箱,它一直作为那些不适合归入其他精细定义类别的特性的系统接口. 本章笔记先放着,到时候有需要再看 ioctl函数 #include <unistd.h> int i ...
随机推荐
- 关于 PHP 7 你必须知道的五件事
1.今年的计划表已出.PHP 7 时间表 RFC 投票一直通过, PHP 7 将在2015年10月发布.尽管有些延迟,但我们还是很高兴它在今年内发布.PHP 7 详细时间表由此查看. 2.PHP 要上 ...
- poj - 2431 Expedition (优先队列)
http://poj.org/problem?id=2431 你需要驾驶一辆卡车做一次长途旅行,但是卡车每走一单位就会消耗掉一单位的油,如果没有油就走不了,为了修复卡车,卡车需要被开到距离最近的城镇, ...
- XTU -1231 人生成就 (dp + 记录最优解的个数)
http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1231 直接递推. 在保存最大值的时候同时保存有多少条到达最大值的路径,注意 ...
- [POJ2002]Squares(计算几何,二分)
题目链接:http://poj.org/problem?id=2002 给定一堆点,求这些点里哪些点可以构成正方形,题目给定n<=1000,直接枚举四个点是肯定会超时的,因此要做一些优化. 有公 ...
- 爬虫技术(四)-- 简单爬虫抓取示例(附c#代码)
这是我的第一个爬虫代码...算是一份测试版的代码.大牛大神别喷... 通过给定一个初始的地址startPiont然后对网页进行捕捉,然后通过正则表达式对网址进行匹配. List<string&g ...
- sdut2164Binomial Coeffcients(组合数求模)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2164 贴一篇写组合数求mod比较好的帖子 这里 ...
- 4 张 GIF 图帮助你理解二叉查找树
二叉查找树(Binary Search Tree),也称二叉搜索树,是指一棵空树或者具有下列性质的二叉树: 1.任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 2.任意节点的右子树 ...
- js之json
关于json不了解的,请点击:http://www.json.org/json-zh.html json对象的属性必须要用双引号,值为字符串类型也只能使用双引号,例:{"name" ...
- PHP学习笔记02——简易计算器
<!DOCTYPE html> <html> <head> <title>PHP简易计算器</title> </head> &l ...
- VS启用IIS调试的方法及可能碰到的问题。
经常有这种情况, 开发机本地正常, 但是一旦发布到服务上后, 就出现各种问题. 这是由于开发机和服务器环境不一样造成的, 所以开发时要尽可能的模拟真实性. 这时候, VS的这个功能就帮大忙了. 如何 ...