- 1、本文档共70页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构Data04.ppt
* 5、循环队列Q[0:n-1]的设置 front = (front + 1) % n; rear = (rear + 1 ) % n; 队空条件是:front = rear。 队满条件是: (rear + 1) % n = front 。 队列元素的存储位置是从Q[0]开始至Q[n-1] 。 * 6、入队算法 void AddCQ(b, Q, n, front, rear) { if ((front–rear)% n == 1) Queue_Full; else { rear = (rear % n) + 1; Q[rear] = b; } } * 7、出队算法 void RemoveCQ(y, Q, n, front, rear) { if (front==rear) Queue_Empty; else { front = (front % n) + 1; y = Q[front]; } } * 8、队列Q[0:n-1],入队/出队算法 void AddCQ(b, Q, n, front, rear) { if ((rear+1)%n == front) Queue_Full; else { rear = (rear+1 ) % n; Q[rear]=b; } } void RemoveCQ(y, Q, n, front, rear) { if (front==rear) Queue_Empty; else { front=(front+1) % n; y=Q[front]; } } * 1、队列的链表表示(链接队列) 0 H 用线性链表表示队列时,在结点后插入元素最方便;而删除表头结点很容易;因此,可以将链表表头(第一个)结点作为链接队列的队头指针Front, 而将链表尾(最后一个)结点作为队列的队尾指针Rear,并且增设一个指针Rear总是指向链表的最后一个结点。 0 Front Rear 4.9 队列的链式存储结构 * 2、入队算法 void LAddQ(Front, Rear, int b) struct node *Front, *Rear; { struct node *X; X = (struct node *)malloc(Len); X-data = b; X-link = 0; if (Front == 0) Front = X; else Rear-link = X; Rear = X; } * 3、出队算法 void LRemoveQ(Front, Rear, y) struct node *Front, *Rear,*y; { struct node *X; if (Front==NULL) printf(“队列空。”); else { X = Front; y = Front-Data; Front = Front-Link; free(X);} } * 上机作业 6、编写一个程序,实现中缀表达式向后缀表达式的转换。要求: 键盘输入一个表达式,并以字符#表示结束; 输出为后缀表达式形式。 7、编写一个递归程序,解决Hanoi塔问题。要求盘数通过键盘输入控制,打印移动各盘的顺序。 * * 2、返回地址的存储 返回地址R3、R2、R1、R0的存储,一种方式是存储在子程序的数据段中; Program Main …… …… Call A; R1:…… …… …… End Subroutine A …… …… Call B; R2:…… …… …… End Subroutine B …… …… Call C; R3:…… …… …… End Subroutine C …… …… Return …… …… End R0 R1 R2 R3 当出现循环调用时,数据段中地址将被覆盖。 Call B R4: R4 * 3、用公用栈存储返回地址 调用过程与返回地址之间形成一种天然栈结构: Main?A?B?C(R3)?B(R2)?A(R1)?Main(R0) 即使调用过程中形成循环,也可以正确实现返回: 调用:Main ? A ? B ? C ? B 返回:Main(R0)?A(R1)?B(R2)?C(R3)?B(R4) * 4.4.2 栈与递归过程 栈的另一个重要用途是在程序设计语言中实现递归过程。一个直接调用自己或者通过一系列的过程调用语句间接地调用自己的过程,称为递归过程。 1、递归过程 procedure A; begin ...... call A; ...... end; procedure B; begin ......
您可能关注的文档
- 化学选修4-化学平衡常数.ppt
- 化学选修41.3-反应热的计算.ppt
- 化学选修四《电化学复习》课件.ppt
- 化学:第4章-第4节-金属的电化学腐蚀与防护27张-课件人教版选修42013-2014学年.ppt
- 化学:第四章《电化学基础》课件新人教版选修4 2.ppt
- 化学:第四章《电化学基础》课件新人教版选修4.ppt
- 化工与制药类导论化学工程—I.ppt
- 化工分离工程-多组分多级分离过程分析与简捷计算.ppt
- 化工分离第三章-7.ppt
- 化工原理--其他化工单元操作过程.ppt
- 旅游企业战略转型与可持续发展研究.docx
- 最新部编版二年级上册道德与法治期中测试卷及完整答案【网校专用】.docx
- 旅游企业战略调整与市场复苏策略.docx
- 考点攻克京改版数学7年级上册期末试题及参考答案详解【考试直接用】.docx
- 最新部编版二年级上册道德与法治期中测试卷及答案(夺冠).docx
- 最新部编版二年级上册道德与法治期中测试卷及答案(基础+提升).docx
- 考点攻克京改版数学7年级上册期末试题汇编附答案详解.docx
- 最新部编版二年级上册道德与法治期中测试卷及完整答案(全国通用).docx
- 最新部编版二年级上册道德与法治期中测试卷带答案(模拟题).docx
- 最新部编版二年级上册道德与法治期中测试卷及完整答案【精选题】.docx
文档评论(0)