数据结构实验两个栈模拟队列.docx

上传人:b****8 文档编号:9716556 上传时间:2023-02-06 格式:DOCX 页数:15 大小:161.75KB
下载 相关 举报
数据结构实验两个栈模拟队列.docx_第1页
第1页 / 共15页
数据结构实验两个栈模拟队列.docx_第2页
第2页 / 共15页
数据结构实验两个栈模拟队列.docx_第3页
第3页 / 共15页
数据结构实验两个栈模拟队列.docx_第4页
第4页 / 共15页
数据结构实验两个栈模拟队列.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构实验两个栈模拟队列.docx

《数据结构实验两个栈模拟队列.docx》由会员分享,可在线阅读,更多相关《数据结构实验两个栈模拟队列.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构实验两个栈模拟队列.docx

数据结构实验两个栈模拟队列

《数据结构》实验报告

◎实验题目:

利用两个顺序栈模拟一个队列

◎实验目的:

熟悉顺序栈和队列的建立以及遍历,并且了解两者之间的区别与联系。

◎实验内容:

利用两个顺序栈,一个栈模拟入队,一个栈模拟出队,实现两个栈模拟队的操作。

一、需求分析

1.本程序中首先设定队的大小为20,以便判断队满,首先应输入入队元素个数,然后输入入队元素,后根据提示入队或出队,如入队,重复上述过程,如出队,输入出队元素个数,然后程序会显示出队元素,可以重复上述过程,直到输入结束为止。

2.演示程序以用户和计算机的对话方式执行,可以按照计算机程序显示提示进行操作。

3.程序执行命令包括:

(1)构造栈

(2)初始化栈(3)选择输入方式既入队或是出队,如是入队,先输入需要入队元素个数,再输入元素,如要出队,输入要输出元素个数,则可直接显示出队元素,可重复上述过程(4)结束

4.测试数据

(1)入队元素个数5,分别为12345,然后出队元素个数为3个,结果为123

(2)再入队5个,分别为678910,再出队6个456789

(3)再出队3个,分别为10队空

(4)入队元素个数25个,分别为1-25,在输入21时显示队满。

二概要设计

 为实现上述操作,应以两个栈为存储结构

1.基本操作:

voidinitstack(seqstack&s)

操作结果:

实现栈的初始化

voidinqueue(seqstack&s1,seqstack&s2)

操作结果:

实现入队功能

voidoutqueue(seqstack&s1,seqstack&s2)

操作结果:

实现出队功能

2.本程序包含四个模块

(1)主程序模块

(2)栈初始化模块】

(3)入队模块

(4)出队模块

3.模块调用图

 

 

 

 

三详细设计

1.元素类型,节点类型和指针类型

typedefintelemtype;

typedefstruct

{

elemtypedata[maxsize];

inttop;

}seqstack;

seqstacks1,s2;

2.每个模块的分析

(1)主程序模块

intmain()

{

intk,m,select,num;

seqstacks1,s2;

initstack(s1);/*初始化栈s1*/

initstack(s2);/*初始化栈s2*/

while(select!

=3)/*选择操作*/

{

printf("请选择操作:

\n");

printf("1.入队\n2.出队\n3.结束\n");

scanf("%d",&select);

switch(select)

{

case1:

{

inqueue(s1,s2);/*入队操作*/

break;

}

case2:

{

printf("请输入出队元素个数:

\n");/*输入出队元素个数*/

scanf("%d",&num);

for(k=0;k

{

if(s1.top==-1&&s2.top==-1)/*判断队空*/

{

printf("队空.\n");

break;

}

else/*如果不空,则出队*/

outqueue(s1,s2);

}

break;

}

case3:

break;

}

}

getchar();

getchar();

return0;

}

(2)栈初始化模块

voidinitstack(seqstack&s)

{

s.top=-1;

}

(3)入队模块

voidinqueue(seqstack&s1,seqstack&s2)

{

intnumber,m,i;

printf("请输入入队元素个数:

\n");

scanf("%d",&number);/*输入入队元素个数*/

for(i=0;i

{

printf("请输入元素:

");/*输入入队元素*/

scanf("%d",&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++;

s1.data[s1.top]=m;

}

}

}

}

(4)出队模块

voidoutqueue(seqstack&s1,seqstack&s2)

{

if(s2.top!

=-1)/*如果栈s2不空,直接出栈,相当于出队*/

{

printf("元素%d出队",s2.data[s2.top]);

s2.top--;

}

else/*如果s2空,让s1中元素进s2,直到s1为空,然后再出栈*/

{

do

{

s2.top++;

s2.data[s2.top]=s1.data[s1.top];

s1.top--;

}while(s1.top!

=-1);

printf("元素%d出队",s2.data[s2.top]);

s2.top--;

}

printf("\n");

}

(5)函数调用关系图

intmain()

voidinitstack(seqstack&s)

voidinqueue(seqstack&s1,seqstack&s2)

voidoutqueue(seqstack&s1,seqstack&s2)

3.完整的程序:

(见源文件).

四使用说明、测试分析及结果

1.程序使用说明

(1)本程序的运行环境为VC6.0.

(2)进入演示程序后即显示提示

请选择操作

1.入队

2.出队

3.结束

请输入入队元素个数

请输入元素

请输入出队元素个数

2.测试结果

(1)入队元素个数5,分别为12345,然后出队元素个数为3个,结果为123

(2)再入队5个,分别为678910,再出队6个456789

(3)再出队3个,分别为10队空

(4)入队元素个数25个,分别为1-25,在输入21时显示队满。

3.调试中的错误

刚开始编完运行入队正常,结果无法出队,经检查为在判断队满是s1.top==maxsize-1处少了一个=号,导致错误,改正后正常。

4.运行界面

五、实验总结

本次试验由于准备不足,实验课前未在纸上进行预编程,实验课上算法思想出现了一定的偏差,导致未能在课上编出程序,回来后经过仔细思考和同学提示,将算法思想进行了改进,然后顺利编出程序,虽然中间出现了一点小问题,经过检查已解决。

通过本次试验可以熟练掌握栈的使用。

   

教师评语:

实验成绩:

 

#include

#definemaxsize10

typedefintelemtype;

//队容量最大为20个元素

typedefstruct

{

elemtypedata[maxsize];

inttop;

}seqstack;

//初始化栈

voidinitstack(seqstack&s)

{

s.top=-1;

}

//入队

voidinqueue(seqstack&s1,seqstack&s2)

{

intnumber,m,i;

printf("请输入入队元素个数:

\n");

scanf("%d",&number);/*输入入队元素个数*/

for(i=0;i

{

printf("请输入元素:

");/*输入入队元素*/

scanf("%d",&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++;

s1.data[s1.top]=m;

}

}

}

}

//出队

voidoutqueue(seqstack&s1,seqstack&s2)

{

if(s2.top!

=-1)/*如果栈s2不空,直接出栈,相当于出队*/

{

printf("元素%d出队",s2.data[s2.top]);

s2.top--;

}

else/*如果s2空,让s1中元素进s2,直到s1为空,然后再出栈*/

{

do

{

s2.top++;

s2.data[s2.top]=s1.data[s1.top];

s1.top--;

}while(s1.top!

=-1);

printf("元素%d出队",s2.data[s2.top]);

s2.top--;

}

printf("\n");

}

intmain()

{

intk,m,select,num;

seqstacks1,s2;

initstack(s1);/*初始化栈s1*/

initstack(s2);/*初始化栈s2*/

while(select!

=3)/*选择操作*/

{

printf("请选择操作:

\n");

printf("1.入队\n2.出队\n3.结束\n");

scanf("%d",&select);

switch(select)

{

case1:

{

inqueue(s1,s2);/*入队操作*/

break;

}

case2:

{

printf("请输入出队元素个数:

\n");/*输入出队元素个数*/

scanf("%d",&num);

for(k=0;k

{

if(s1.top==-1&&s2.top==-1)/*判断队空*/

{

printf("队空.\n");

break;

}

else/*如果不空,则出队*/

outqueue(s1,s2);

}

break;

}

case3:

break;

}

}

getchar();

getchar();

return0;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1