数据结构实验两个栈模拟队列Word文档格式.docx
《数据结构实验两个栈模拟队列Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验两个栈模拟队列Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
二概要设计
为实现上述操作,应以两个栈为存储结构
1.基本操作:
voidinitstack(seqstack&
s)
操作结果:
实现栈的初始化
voidinqueue(seqstack&
s1,seqstack&
s2)
实现入队功能
voidoutqueue(seqstack&
操作结果:
实现出队功能
2.本程序包含四个模块
(1)主程序模块
(2)栈初始化模块】
(3)入队模块
(4)出队模块
3.模块调用图
三详细设计
1.元素类型,节点类型和指针类型
typedefintelemtype;
typedefstruct
{
elemtypedata[maxsize];
inttop;
}seqstack;
seqstacks1,s2;
2.每个模块的分析
intmain()
intk,m,select,num;
seqstacks1,s2;
initstack(s1);
/*初始化栈s1*/
initstack(s2);
/*初始化栈s2*/
while(select!
=3)/*选择操作*/
{
printf("
请选择操作:
\n"
);
1.入队\n2.出队\n3.结束\n"
scanf("
%d"
&
select);
switch(select)
{
case1:
{
inqueue(s1,s2);
/*入队操作*/
break;
}
case2:
printf("
请输入出队元素个数:
/*输入出队元素个数*/
scanf("
num);
for(k=0;
k<
num;
k++)/*利用循环输出元素*/
{
if(s1.top==-1&
&
s2.top==-1)/*判断队空*/
{
printf("
队空.\n"
break;
}
else/*如果不空,则出队*/
outqueue(s1,s2);
}
case3:
break;
}
}
getchar();
return0;
}
(2)栈初始化模块
s.top=-1;
intnumber,m,i;
printf("
请输入入队元素个数:
scanf("
number);
/*输入入队元素个数*/
for(i=0;
i<
number;
i++)
请输入元素:
"
/*输入入队元素*/
m);
if(s1.top==maxsize-1&
s2.top!
=-1)/*判断队满,即s1栈为满,s2栈不为空,此时对中不能再进元素*/
printf("
队满.\n"
break;
}
else/*如果队不满可以接着入队*/
if(s1.top!
=maxsize-1)/*如果s1不满,接着入队,让元素进栈s1*/
{
s1.top++;
s1.data[s1.top]=m;
}
Else/*如果s2空,先让栈s1中元素进入栈s2,直到s1空,然后让元素进入s1*/
do
s2.top++;
s2.data[s2.top]=s1.data[s1.top];
s1.top--;
}while(s1.top!
=-1);
s1.top++;
if(s2.top!
=-1)/*如果栈s2不空,直接出栈,相当于出队*/
元素%d出队"
s2.data[s2.top]);
s2.top--;
else/*如果s2空,让s1中元素进s2,直到s1为空,然后再出栈*/
do
s2.top++;
}while(s1.top!
(5)函数调用关系图
3.完整的程序:
(见源文件).
四使用说明、测试分析及结果
1.程序使用说明
(1)本程序的运行环境为VC6.0.
(2)进入演示程序后即显示提示
请选择操作
1.入队
2.出队
3.结束
请输入入队元素个数
请输入元素
请输入出队元素个数
2.测试结果
3.调试中的错误
刚开始编完运行入队正常,结果无法出队,经检查为在判断队满是s1.top==maxsize-1处少了一个=号,导致错误,改正后正常。
4.运行界面
五、实验总结
本次试验由于准备不足,实验课前未在纸上进行预编程,实验课上算法思想出现了一定的偏差,导致未能在课上编出程序,回来后经过仔细思考和同学提示,将算法思想进行了改进,然后顺利编出程序,虽然中间出现了一点小问题,经过检查已解决。
通过本次试验可以熟练掌握栈的使用。
教师评语:
实验成绩:
#include<
stdio.h>
#definemaxsize10
//队容量最大为20个元素
//初始化栈
//入队
else/*如果s2空,先让栈s1中元素进入栈s2,直到s1空,然后让元素进入s1*/
//出队
=-1)/*如果栈s2不空,直接出栈,相当于出队*/
else/*如果s2空,让s1中元素进s2,直到s1为空,然后再出栈*/