用两个栈模拟一个队列的操作

上传人:woxinch****an2018 文档编号:39301938 上传时间:2018-05-14 格式:DOC 页数:8 大小:107KB
返回 下载 相关 举报
用两个栈模拟一个队列的操作_第1页
第1页 / 共8页
用两个栈模拟一个队列的操作_第2页
第2页 / 共8页
用两个栈模拟一个队列的操作_第3页
第3页 / 共8页
用两个栈模拟一个队列的操作_第4页
第4页 / 共8页
用两个栈模拟一个队列的操作_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《用两个栈模拟一个队列的操作》由会员分享,可在线阅读,更多相关《用两个栈模拟一个队列的操作(8页珍藏版)》请在金锄头文库上搜索。

1、数据结构实验报告实验题目实验题目: : 用两个栈模拟一个队列的操作 实验目的:实验目的:1.了解栈与队列的操作规则;2.熟悉栈的基本操作;3.掌握使用 visual c+6.0 上机调试程序的基本方法。 实验内容:实验内容:用两个栈模拟一个队列的操作。 一、需求分析一、需求分析 说明程序设计的任务,强调的是程序要做什么,明确规定: 1、入队值均为整型元素; 2、当队空时输出“队空”,当队满时输出“队满”,其他情况输出均为整型元素; 3、程序所能达到的功能:通过两个栈中元素的出栈与进栈来模拟队中元素的操作规则; 4、测试数据:本程序中先为选择部分,选择 j 代表有元素要入队,选择 c 代表有元素

2、要出 队,e 代表结束,其他时为选择错误:(1)选择 f,下一步需要输入需要进队的元素,本实验要求队中元素均为整型元素, 按回车键,则会输出现有队中元素,均为整型元素;(2)选择 c,然后选择出栈元素个数,则会输出出栈的元素及队中剩余元素;(3)选择 e,则退出模拟操作;(4)选择其他,则要求重新选择。 二二 概要设计概要设计1.定义栈;2.初始化栈函数;3.判断栈空函数;4.判断栈满函数;5.进栈函数让元素进栈; 6.出队函数if(栈空) return 0;else return 出栈元素; 9.输出队中元素函数if(栈 1 非空) 将栈 1 元素全部倒入栈 2; 将栈 2 元素逐个实现出栈

3、,输出,压入栈 1 操作; else 将栈 2 元素逐个实现出栈,输出,压入栈 1 操作; 8.入队函数if(栈 2 非空) 将栈 2 中元素全部压入栈 1;要入队元素压入栈 1;else 直接将要入队元素压入栈 1; 9.出队函数if(栈 2 非空) 让栈 2 栈顶元素出栈并输出;elseif(栈 1 为空) 则队空;else 将栈 1 元素全部压入栈 2;栈 2 栈顶元素出栈; 输出队中元素; 10.主函数定义两个栈 s1,s2;初始化栈 1,栈 2;输入选择;当不选择结束时if(选择入队)输入要入队元素个数;输入要入队元素;元素入队并输出; if(选择出队)选择出队元素个数;元素出队并输

4、出;判断队空; 输入选择; 三三 详细设计详细设计1.数据类型:选择元素类型为字符型,队中元素均为整型;2. 定义栈typedef struct int dataMAXSIZE;int top; SeqStack; 初始化栈函数; void initstack(SeqStack 判断栈空函数; int StackEmpty(SeqStack else return 0; 判断栈满函数; int StackFull(SeqStack else return 0; 入栈函数; void push(SeqStack s.datas.top=x; 出栈函数; int pop(SeqStack else

5、 return s.datas.top-; 输出队中元素函数; void output(SeqStack printf(“此时队中元素为:“);if(!StackEmpty(s1) while(!StackEmpty(s1) n=pop(s1); push(s2,n); while(!StackEmpty(s2) n=pop(s2); printf(“%d “,n); push(s1,n); printf(“n“); else if(!StackEmpty(s2) while(!StackEmpty(s2) n=pop(s2);printf(“%d “,n);push(s1,n); print

6、f(“n“); printf(“n“); 进队函数; void enter(SeqStack if(!StackEmpty(s2) while(s2.top!=-1) n=pop(s2); push(s1,n); push(s1,x); else push(s1,x); 出队函数; int getout(SeqStack if(!StackEmpty(s2) n=pop(s2); return n; else if(StackEmpty(s2) if(StackEmpty(s1) return 0; else while(!StackEmpty(s1) n=pop(s1); push(s2,n

7、); n=pop(s2); return n; 主函数;int main() int p,n,i=0,out; char ch; SeqStack s1,s2; initstack(s1); initstack(s2); printf(“j 代表有元素要入队,c 代表有元素要出队,e 代表结束!nn“); printf(“请选择:“);scanf(“%c“, while(ch!=e) if(ch=j) printf(“请输入进队元素个数:“);scanf(“%d“, printf(“请输入进队元素,以空格分隔:“);while(in enter(s1,s2,p); i+; if(in) pri

8、ntf(“队满!n“);i=0; output(s1,s2); if(ch=c) printf(“请输入出队元素个数:“);scanf(“%d“, printf(“出队元素为:“);while(in printf(“%d “,out); i+; if(in) printf(“队已空!“);i=0; printf(“n“); output(s1,s2); printf(“n“); if(ch!=j ch=0; printf(“请选择:“);scanf(“%s“, printf(“谢谢使用!n“);return 0; While(ch!=e)ch=j ch=c ch=其他四四 使用说明、测试分析及

9、结果使用说明、测试分析及结果 1、本程序操作界面友好,按提示操作即可; 2、测试结果完全符合预计目标;4、运行界面。Start选择进队元素个数 n选择出队元素个数 n重新 选择当输入元素个数小于 n 且栈1 不满时输入判断队满输出队中元素当出队元素个数小于 n 且栈1,栈 2 不空时元素出队判断队空五、实验总结五、实验总结本次试验刚编出的程序每次只能进或出队本次试验刚编出的程序每次只能进或出队 1 1 个元素,操作极不方便,后经助教老师指导,个元素,操作极不方便,后经助教老师指导, 改出了可以实现一次进出多个元素的队列操作。总之,通过这次试验,让我对栈和队列的改出了可以实现一次进出多个元素的队列操作。总之,通过这次试验,让我对栈和队列的 基本操作有了更进一步了解。基本操作有了更进一步了解。 教师评语:教师评语:实验成绩:实验成绩: 指导教师签名: 批阅日期:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号