【工学】NO3 栈和队列.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
n阶汉诺塔问题:要求 每次只能移一个圆盘 可以从任何一个塔座移到另一个塔座 任何时候不能大盘压小盘 n阶汉诺塔问题:算法思想 Void hanoi int n,char x,char y,char z if n 1 move x,1,z else hanoi n-1,x,z,y ; move x,n,z ; hanoi n-1,y,x,z ; 用递归方法实现数制转换 Trans int n int k; k n % 8;//k是n/8的余数 n n/ 8;//整数相除的结果为整数 if n 0 then trans n ; printf k ; 3.4 队列 抽象数据类型 队列(Queue)是一种先进先出的线性表。(First In First Out,FIFO) 特点:只允许在表的一端进行插入,而在另一端删除元素。 例如:生活中的排队 允许插入的一端叫做队尾(rear) 允许删除的一端叫做队头(front) 3.4 队列 抽象数据类型: 队列示意图 a1 a2 a3 a4 ……an 出队 入队 队尾 队头 抽象数据类型:双端队列 双端队列 Deque ——在表的两端都可以插入和删除的线性表。 a1 a2 a3 a4 ……an 出队 端2 端1 入队 入队 出队 抽象数据类型:特殊队列 输出受限的双端队列:一端只允许插入,另一端允许插入和删除的线性表。 输入受限的双端队列:一端只允许删除,另一端允许插入和删除的线性表。 两个栈底相同的栈:在该端插入的元素只允许在该端删除。 链队列——队列的链式表示和实现 示意图 存储结构定义 typedef struct Qnode QElemType data; struct Qnode *next; Qnode, *QueuePtr; a1 a2 an ∧ … Q.front Q.rear 队头 队尾 队空标志 Q.front Q.rear head 链队列 队空标志:Q.front Q.rear head 基本运算: 初始化 入队 出队 注意特殊情况 顺序队列1 示意图 n … 4 4 3 3 2 b 1 a S[maxsize] 队尾指针 队头指针 0 队头front 队尾rear 队空标志 front rear 顺序队列2 基本运算:不考虑队空队满 设sq是指向顺序队列的指针; 入队:sq.rear sq.rear+1; sq.elem[sq.rear] x; 出队:sq.front sq.front+1; 顺序队列3 队满条件: 6 f 5 e 4 d 3 c 2 b 1 a S[maxsize] sq.rear sq.front 方法一:下移 方法二:组成循环队列 假“上溢”: 若要插入,有两种方法。 3.5 循环队列1 示意图 0 1 2 3 4 5 6 7 J1 J2 J3 J4 J5 J6 J7 J8 q.front q.rear Maxsize-1 3.5 循环队列2 定义 Typedef struct QElemType *base; int front; int rear; SqQueue; 入队 Q.base[Q.rear] e; Q.rear Q.rear+1 %Maxsize 出队 e Q.base[Q.front]; Q. front Q. front +1 %Maxsize 关键问题: 判断队空 Q.rear Q.front 判断队满 Q.rear Q.front 3.5 循环队列3 区分队空队满的方法: 设置标志变量t 0,队空;t 1,队满; 不足:要降低速度; 只留一个位置就算队满 用空间换时间 队满: Q.rear+1 %maxsize Q.front 队空:Q.rear Q.front 第3章 栈和队列 栈和队列是两种重要的线性结构。 从数据结构角度讲,栈和队列也是线性表,其特殊性在于栈和队列的基本操作的子集,是操作受限的线性表。 3.1 栈 定义 栈(Stack)是限定仅在表尾进行插入或删除操作的线性表。 对栈来说,表尾端有其特殊含义,称为栈顶(top);表头端称为栈底(bottom) 修改原则:先进后出,后进先出。 实例:子弹夹 3.1 栈 定义 栈的逻辑示意图 An … A3 A2 A1 入栈(插入) 出栈(删除) 3.1 栈 定义 栈的ADT P44-45 基本运算: 构造空栈 销毁栈 栈清空 求栈的长度 取元素 进栈(插入元素) 出栈(删除元素) 栈的表示和实现—顺序栈1 示意图 当S.top S.bas

文档评论(0)

专业好文档 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6110200002000000

1亿VIP精品文档

相关文档