- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
选做题目:假设某机场共有m次航班,第i次航班有ni个座位,且每次航班达到一个目的机场。设计一个满足该机场需要的用户定票、退票程序。 第三章 栈和队列 3.1 栈(Stack) 栈的定义和特点: 定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶(top),表头—栈底(bottom),不含元素的空表称空栈; 特点:先进后出(FILO)或后进先出(LIFO) 关于“栈”要掌握的操作 栈的构造:顺序或链式; 空栈的判断:TOP==BOTTOM; 入栈或进栈(push):栈的插入操作; 出栈或退栈(pop):栈的删除操作。 练习 假设有线性表(a b c d ),按顺序输入 一个栈进行处理。问能否得到下列几种输出序列 注意:每个元素只能进一次栈,也只能退一次栈。 bcad; cadb; dcba; abcd; cdba; bdac; cbda; bacd; dbca; cdab; adcb; acbd; 1、栈的存储结构 顺序栈 一维数组s[M] 生成一个空栈 功能:在内存构成一个名字为S的空栈。 Void InitStack(SqStack *s) { S-base = (SElemType * ) malloc(STACK_INIT_SIZE*sizeof(SElemType)); if (!S-base) exit(0); // 分配空间失败 S-top = S-base; // 栈顶指示器初值 S-stacksize = STACK_ INIT_ SIZE; } 注意:此时栈顶指示器与栈底指示器的值相等。即指示栈中同一位置。也就是M个连续空间的第一个空间的地址。 进栈运算 ( PUSH ) 对于一个非空栈,栈顶指示器top始终是在当前栈顶数据元素位置加1的位置上。 用C语言编写的算法如下: Status Push (SqStack *S, SElemType e) { if (S-top – S-base = S-stacksize) { //判预分空间是否用完 S-base =( SElemType*)realloc(S-base, (S-stacksize +STACKINCREMENT)*sizeof(SElemType)); if (!S-base) exit ( ); // 空间分配失败 S-top =S-base +S-stacksize; // 修改栈顶指示器 S-stacksize + =STACKINCREMENT; } *(s-top ++) = e; // 把数据进栈后TOP再加1 } 出栈运算(pop) 把栈顶上的元素删除(即最后进栈的数据)。 用C语言编写的算法如下: void pop(SqStack *S, SElemType *e) { if (S-top == S-base) return; // 栈空 *e = *(--S-top); //当前栈顶指示器减1位置上的数据删除 return; } 链栈 思考题 1、完成两个栈的设计以及进、退栈的算法。 2、编写链式栈的进、退栈算法。 3、设有‘abcd’,按顺序进入一个栈,试写出所有可能的输出序列。 4、设有‘abcde’,经过一个栈的处理得到输出序列为‘cdbea’ 假设,用P代表一次进栈操作,Q代表一次退栈操作。要求,写出用PQ序列表示得到上述输出结果的过程。 栈的应用:汉诺塔游戏 典故: 古印度传说,Brahma(众生之父)在Berares的一个庙宇中安了3个柱子(Hanoi塔),一个柱子上有64块大小不同的金盘,按照规则移动金盘,当金盘重排完成时就是世界末日。 Tower of Hanoi问题描述: 有A,B,C三个塔座,A上套有n个直径不同的圆盘,按直径从小到大叠放,形如宝塔,编号1,2,3……n。要求将n个圆盘从A移到C,叠放顺序不变,移动过程中遵循下列原则: 每次只能移一个圆盘 圆盘可在三个塔座上任意移动 任何时刻,每个塔座上不能将大盘压到小盘上 Hanoi塔算法分析 An=2*An-1+1 An=2n-1 64块金盘时答案: 设有一熟练工种的僧侣,每秒种移动一次金盘,则需要264-1秒钟才可完成。 18446744073709551615秒= 5849亿年 3.2 队列(Queue) 队列的定义及特点 定义:队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表 队尾(rear)——允许插入的一端 队头(front)——允许删除的一端 队列特点:先进先出(FIFO)
您可能关注的文档
最近下载
- 2024-2025学年四川省成都市第七中学高一(上)月考物理试卷(10月)(含答案).docx VIP
- 育婴员职业守则课件.pptx VIP
- 蔬菜生产技术课程标准.docx VIP
- 2025中考语文现代文阅读总复习-第1部分 专题12:记叙文阅读之主旨把握(讲义)(教师版).docx VIP
- 硅铁冶炼培训课件.pptx VIP
- 水土保持工程监理规划.pdf VIP
- 政务云平台 第4部分:系统部署和迁移要求_地方标准编制说明.pdf
- DB37T-政务云平台监管指标体系及编制说明.pdf VIP
- 高中物理必修二第一章检试测卷.doc VIP
- DB37T 4394.4—2024政务云平台 第4部分:系统部署和迁移要求.pdf VIP
文档评论(0)