版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、车厢调度问题1.题目分析车厢调度题目,题目的目的是有n辆车依次进入一个车站,把所有可能的出站的序 列输出,题目要求使用栈数据结构完成出站和入站操作。根据栈的数据特性,最先进栈 的最后出栈。而且对问题进行分析可知对栈来说只有出栈和入栈两 种操作,所以问题具 有递归的特性,所以对这个题目的核心解法就是采用递归的操作。问题着眼于进栈的n辆车,当这n辆车完成进栈操作,所有的出栈的可能都 已经出 来了。首先从第一辆进行分析,它只有一种可能:进栈。对于后面的 n-1 辆车,如果栈不为空,则有两种可能,一种是它进栈,另一种是栈中的顶元素出栈。所 以整个过程可以的结果就是一颗二叉树,只要完成对这棵二叉树的遍历
2、,就可以把所有 的结果输出,下面我用n=3来说明这个例子。图一,三辆车依次入栈所有可能的出栈结果有上图可知,只要完成对二叉树的遍历就可以输出所有可能的出栈顺序2.设计过程因为栈的基本操作都需要使用,所以下面先介绍栈的基本操作的设计栈数据结构体:typedef struct(int *stk;int top;int size; stack;置空栈:void initstack(stack *s, int n);入栈:void push(stack* s, int x);出栈:int pop(stack* s);判断是否空:int stackempty(stack* s);出栈,入栈,置空栈,判断
3、栈是否为空都是栈的基本操作,不做介绍介绍主函数:主函数是整个程序的核心部分,它实现了对所有的出栈可能性的探索。是按 它也 照递归的思想编写的。主函数的源代码如下:void main()(int i;int k;stack in put, s, output;in itstack(&in put, N);in itstack(&s, N);initstack(&output, N);printf("请输入车厢数量:n");sea nf(n%d",&k);prin tf(n可能的出站序列为:nn);for(i=k; i>0; i-
4、)push(&in put, i);stackseq (&in put, &s, &output); F面写出的是整个程序的流程图:Main函数流程图siackiisioo;puiMs.popdnput).Stackseq函数流程图3.调试过程和试验结果c: *C: Docuaents and SettingsAd>mistrat or3Q99seKAAGJUsdDebug j. exe请输入车厢数量可能的出站序列为:11223Press23132any key32311 to continue4.结论5程序清单# i nclude <stdio.h
5、># i nclude <stdlib.h># defi ne N 20 typedef structint*stk;inttop;int size; stack;sizeof(int);sizeof(int);VUIU initstack(stack *s, int n)s-> stk =(int*)malloc (s>> size=n)s-> top =0;)void copystack(stack *ss, stack *s)int i;if(ss-> stk) free(ss-> stk);ss-> stk = (int*)m
6、alloc(ss-> size=s-> size) ss->top = s-> top;i=s-> top-1;for(;i>=0;i-)ss-> stki=s-> stki;)void outputstack(stack* s) int i;for(i=0; i <s-> top; i+) printf( "5d”,printf( nnn);int stackempty(stack* s) <return !s-> top;)void push(stack* s, int x) s-> stks->
7、 top+ = x;)int pop(stack* s)return s-> stk-s-> top;)void stackseq(stack *input5 stack *s, stack *output)(/*初始状态:栈input中存放要输入的元素,s, output为分结束状态:input和s均为 空*/ 'stack ii, ss, oo;if(stackempty(input)/*如果数据已经全部输入完毕*/ if(stackempty(s)outputstack(output);/*而且栈中也没有剩余,则输出序列*/else(push(output, pop(
8、s); /* 栈中元素进入输出序列*/ stackseq(input, s, output); /*重新调度7 >else/*还有元素要输入7if(!stackempty(s)/*我们需要保存现有状态7initstack(&ii,1);copystack(&ii,input);initstack(&ss,1);copystack(&ss, s);initstack(&oo, 1); copystack(&oo, output)push(&oo, pop(&ss); stackseq(&ii, &ss, &oo); push(s, pop(input); /* 再输入一个元素 */ stackseq(input, s, output);void main(), h k ntntstack input, s, output; initstack(&input, N); initstack(&s, N); initstack(&output, N);printf("请输入车厢数量:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度场营销分公司智慧城市项目合作协议3篇
- 二零二五版商业街区场地租赁合作协议书6篇
- 2025年度高新技术产业常年法律顾问聘用协议3篇
- 二零二五年度企业税收筹划与税收筹划实施合同3篇
- 二零二五年度出口退税证明开具及国际金融服务合同3篇
- 二零二五年度港口码头租赁及港口货物装卸、仓储及配送服务协议8篇
- 二零二五年度土地承包经营权纠纷调解合同-@-2
- 2025草原禁牧与水资源保护管理协议合同3篇
- 2025年度个人个人借款合同信用评估标准3篇
- 二零二五食用油产品包装设计与印刷合同
- 中考模拟考试化学试卷与答案解析(共三套)
- 新人教版五年级小学数学全册奥数(含答案)
- 风电场升压站培训课件
- 收纳盒注塑模具设计(论文-任务书-开题报告-图纸)
- 博弈论全套课件
- CONSORT2010流程图(FlowDiagram)【模板】文档
- 脑电信号处理与特征提取
- 高中数学知识点全总结(电子版)
- GB/T 10322.7-2004铁矿石粒度分布的筛分测定
- 2023新译林版新教材高中英语必修一重点词组归纳总结
- 苏教版四年级数学下册第3单元第2课时“常见的数量关系”教案
评论
0/150
提交评论