- 1、本文档共68页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与算法 第3章 栈和队列课件
栈和队列是两种常用的数据类型;*;*;*;练习题;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;则 检验括号是否匹配可用栈来实现。;*;*;算法基于原理: N = (N div d)×d + N mod d;数制转换算法
void Conversion(int N)
/*对任意非负十进制数N,打印等值的八进制数*/
{ Stack S; int x; /*S为顺序栈或链栈*/
InitStack(S);
while(N0)
{ x=N%8; Push(S, x); N=N/8; }
while(!IsEmpty(S))
{ Pop(S,x); printf(“%d”,x); }
};*;*;*;*; 当在一个函数的运行期间调用另一个函数时, 在运行该被调用函数之前, 需先完成三项任务:; 从被调用函数返回调用函数之前, 应该完成下列三项任务:;多个函数嵌套调用的规则是:;递归工作栈:递归函数执行过程中占用的数据区
工 作 记 录: 每一层的参数、局部变量、返回地
址等构成的记录(数据区)
当前活动记录:栈顶工作记录(当???函数数据区)
当前环境指针:递归工作栈的栈顶指针,指向当前
活动记录。(指示当前函数数据区);例Hanoi塔问题:有3个塔座x, y, z, 在塔座x上插有n个大小不同的圆盘, 从小到大且自上而下编号为1,2,…n; 按规则将它们一个个搬到塔座z上, y可用作辅助塔座。
规则为:
(1) 每次只能移动一个圆盘;
(2) 圆盘可放在任意塔座上;
(3)任何时刻塔座上都不得将大盘压在小盘之上。;void hanoi (int n; char x, char y,char z)
/* 将塔座x上按直径由小到大且至上而下编号为1至n的
n个圆盘按规则搬到塔座z上,y可用作辅助塔座。*/
1 {
2 IF (n==1)
3 move(x, 1, z); /*将1号盘从x移到z*/
9 } ;void hanoi (int n; char x, char y,char z)
1 {
2 IF (n==1)
3 move(x, 1, z);
4 ELSE {
hanoi(n-1, x, z, y);
move(x, n, z);
hanoi(n-1, y, x, z);
8 }
}
调用程序:返回地址为0
hanoi(3, A, B, C);
0 . . . . . .;; 递归程序结构清晰、程序可读性强,且其正确性易于证明,给用户编程带来很大方便。;*;*;*;*;;*;*;*;*; 尽管链队列使用方便,但由于其指针多占存储空间,有时仍需要用顺序结构来表示队列。 ;存储结构定义;*; 当 sq.rearmaxsize 时, 队列满 (即上溢), 但此时头指针指示的元素之前可能还有空单元, 此现象称为假溢出; ;*;*;二、循环队列“空”与“满”的判定;*;*;*;队列的应用举例:;*;void yhsj(int h)
{ SeqQueue q; QueueElementType e,s;
InitQueue(q); EnterQueue(q,0);
EnterQueue(q,1); EnterQueue(q,0);
for(int i=1;ih;i++){
do{
DeleteQueue(q,s); GetHead(q,e);
if (e!=0) printf(%d ,e);
else printf(\n);
EnterQueue(q,s+e);
}while (e!=0);
EnterQueue(q,e);
}
while(!IsEmpty(q)){
DeleteQueue(q,s);
if (s!=0) printf(%d ,s)
您可能关注的文档
- 数据完整性之数据完整性分类课件.ppt
- 数据库_第四章 关系系统与其查询优化课件.ppt
- 数据库与其应用第6章课件.ppt
- 数据库与其应用c4课件.ppt
- 数据库与表常用命令课件.ppt
- 数据库(容器)是相关数据和对象集合数据库文件扩展课件.ppt
- 数据库与数据库服务器课件.ppt
- 数据库中基本概念课件.ppt
- 数据库创建、修改和删除课件.ppt
- 数据库历史,未来与应用课件.ppt
- 数据仓库:Redshift:Redshift与BI工具集成.docx
- 数据仓库:Redshift:数据仓库原理与设计.docx
- 数据仓库:Snowflake:数据仓库成本控制与Snowflake定价策略.docx
- 大数据基础:大数据概述:大数据处理框架MapReduce.docx
- 实时计算:GoogleDataflow服务架构解析.docx
- 分布式存储系统:HDFS与MapReduce集成教程.docx
- 实时计算:Azure Stream Analytics:数据流窗口与聚合操作.docx
- 实时计算:Kafka Streams:Kafka Streams架构与原理.docx
- 实时计算:Kafka Streams:Kafka Streams连接器开发与使用.docx
- 数据仓库:BigQuery:BigQuery数据分区与索引优化.docx
文档评论(0)