- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构两个栈模拟队列
两个栈模拟队列
实验题目:两个栈模拟队列
实验内容:利用两个栈模拟队列操作,其中一个栈模拟入队,另外一个栈模拟出队。同时判断队空、队满。
1 需求分析
本实验要求利用两个栈模拟队列操作,其中一个栈模拟入队,另外一个栈模拟出队。操作中能够进行动态的元素入队、出队操作,同时判断队空、队满。
输入形式及范围
采用键盘输入,进行菜单选择和元素输入两种操作;菜单选择输入1-3选项,元素输入范围是整数。队长:10。
输出形式
显示元素入队或出队情况,显示队列已满或已空。
程序功能
实现模拟队列的操作,显示元素入队或出队情况并判断队列是否已满或已空。
测试数据
图 1 测试操作流程
2 设计概要
2.1 问题分析
本实验要求利用两个栈模拟队列,并实现队列的入队、出队和判断对空、对满操作。
两个栈分别用来模拟队列的入队和出队操作。由于队列的特点是“先进先出”,而栈的特点为“先进后出”,首先压入栈的元素最后出栈。这就需要一个栈模拟入队,即把“入队”的元素压入栈1中;再逐一出栈压入另一个栈2,此时首先压入栈1的元素在栈2中也会首先出栈。将栈2中元素逐一出栈,即完成了对队列的模拟操作。
2.2 设计说明
1. 数据类型
typedef struct stack/*栈结构*/
{
int s[S_LEN];
int* top;
int* bottom;
}Stack;
2. 程序流程
由以上分析,实现队列的模拟程序主要包括三个模块:选择模块、入队、出队。
选择模块主要显示选择菜单,以提供入队、出队和结束程序三种操作。设计界面如下:
请选择操作: 1.入队 2.出队 3.结束
入队模块将输入的元素压入栈1,也包括对栈满的判断。函数中会调用入栈、出栈函数。
出队模块将栈1中需要模拟出队的元素压入栈2,再由栈2出栈,其中同意包括对栈空的判断。函数中会调用入栈、出栈函数。
除以上三个主要模块之外,还需要编写入栈、出栈函数,并进行两个栈的初始化。
具体的流程我们以流程图形式给出:
3 详细设计
3.1 调用关系
主函数中调用入队、出队函数及菜单选择操作
入队函数中调用入栈函数和判断栈满函数
出队函数中调用出栈函数及判断栈空函数
3.2 函数代码
主函数
void main()
{
int i,j;
int choice,num,account;
S1.bottom=(S1.s[0]);//初始化 这个非常重要!!
S1.top=(S1.s[0]);
S2.bottom=(S2.s[0]);
S2.top=(S2.s[0]);
while(choice!=3){
printf( 请选择操作:\n);
printf( 1.入队\n 2.出队\n 3.结束\n);
scanf(%d,choice);
getchar();
switch(choice){
case 1: printf(请输入入队元素个数:);
scanf(%d,account);
printf(\n);
getchar();
printf(请输入数字:);
for(i=0;iaccount;i++){
scanf(%d,num);
getchar();
inqueue(num);
}
printf(\n);
break;
case 2: printf(请输入出队元素个数:);
scanf(%d,account);
for(j=0;jaccount;j++){
dequeue();
}
break;
case 3:break;
}
}
printf(谢谢!);
}
入队/出队函数
int inqueue(int num)//进队列
{
int ret=empty(S2);
if(S1.top-S1.bottom==S_LEN!ret){
printf(Queue is full.\n);
return 0;
}
else{
ret=empty(S2);
if(S1.top-S1.bottom==S_LENret){
while(!empty(S1)){
您可能关注的文档
- 多边形与圆练习.doc
- 多边形剪裁及填充.doc
- 多进制数字系统的设计.doc
- 多边形面积奥数.doc
- 多道程序缓冲区协调操作及进程调度.doc
- 多道程序缓冲区协调操作操作系统报告.doc
- 多重共线性和非线性回归及解决方法.doc
- 多维教程-探索翻译+课后翻译1-6课.doc
- 多道让你口水直流的鱼.doc
- 多重共线性异方差的验证和修正-论文选读中国货币需求的因素分析.doc
- 年三年级数学下册第三四单元过关检测卷新人教版.docx
- 第十三章轴对称(复习课)1.ppt
- 15.1.2分式基本性质(2).ppt
- 期末冲刺(补全对话30道).docx
- 【华创证券-2025研报】2025年二季报公募基金十大重仓股持仓分析.pdf
- 【港交所-2025研报】景福集团 截至2025年3月31日止年度年报.pdf
- 【天风证券-2025研报】2025中报前瞻:关注预告日至财报日的景气超额.pdf
- 【国金证券-2025研报】连连数字(02598):跨境支付先行者,前瞻布局虚拟资产.pdf
- 【第一上海证券-2025研报】云工场(02512):云工(02512):IDC方案服务商,边缘云业务打造第二成长曲线.pdf
- 【东方证券-2025研报】主动权益基金2025年二季报全解析:重点关注科技医药双主线和中小盘高成长主题基金.pdf
文档评论(0)