栈的实验报告.docx
《栈的实验报告.docx》由会员分享,可在线阅读,更多相关《栈的实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
栈的实验报告
忻州师范学院计算机科学与技术系
实验报告
(第六组)
组长:
梁启超
组员:
晋丹丹张艳华
马军刘雪梅
孙钰林刘涛
忻州师范学院计算机科学与技术系
实验报告
实验名称栈的应用
专业班级计本1504班姓名梁启超学号201508112036
指导教师成绩日期2016/11/17
组员分工晋丹丹(Initstack)张艳华(Push)马军(Pop)刘雪梅(Top)
孙钰林(conversion)刘涛(scan)
一、实验目的
本次课程设计的主要任务是完成对数制转换进行编程,要求用栈实现十进制到二进制、八进制、十六进制的转换,了解转换进制的原理,熟练对栈的基本操作,用栈的基本操作实现程序的效率化。
二、实验内容
用栈建立线性表,并进行线性表相关操作。
要求:
要有良好的人机界面,有菜单形式实现,具备输入、判断转化类型、转化数据、输出结果等。
三、实验要求
1.在问题分析的基础上选择合适的存储结构,进行算法设计,编制程序并上机调试成功。
2.按要求完成实验报告。
3.保存和打印出程序的运行结果,并结合程序进行分析。
四、实验步骤
一、本演示程序用C编写,完成栈的建立,及字符元素进栈与出栈操作
1、输入的形式和输入值的范围:
2、输出的形式:
a进制数转换中会输出十进制转换成的二进制、八进制十六进制数。
输入一段字符后将返回判断结果;
3、程序所能达到的功能:
完成栈的建成与元素进栈出栈的操作,输出进制数转换后的结果及回文判断的结果。
4、测试数据:
十进制转换成二、八、十六进制数操作中依次输入任意一个十进制整数返回它所希望的结果。
二、为了实现上述程序功能,需要定义单链表的抽象数据类型:
Initstack(sqstack&s)
操作结果:
构造一个空的栈S.
Push(sqstack&s,selemtypee)
初始条件:
栈S.已存在
操作结果:
插入元素e为新的栈顶元素。
Pop(sqstack&s,selemtype&e)
初始条件:
栈S.已存在
操作结果:
删除S的栈顶元素并用e返回其值
Top(sqstack&s,selemtypee)
若栈不空,用e返回s的栈顶元素
conversion(intN,intr)
操作结果:
进制转换
各函数间关系如下:
main()
scan()
InitstackPushPopTopconversion
三、实现概要设计中定义的所有的数据类型,对每个操作给出伪码算法。
对主程序和其他模块也都需要写出伪码算法。
栈的定义
typedefstruct{
selemtype*base;
selemtype*top;
intstacksize;
}sqstack;
栈的生成、插入、删除、运算等操作
statusInitstack(sqstack&s){
s.base=(selemtype*)malloc(100*sizeof(selemtype));
if(!
s.base)exit(OVERFLOW);
s.top=s.base;
s.stacksize=100;
returnOK;
}
statusPush(sqstack&s,selemtypee){
if(!
s.base)exit(OVERFLOW);
*s.top++=e;
returnOK;
}
statusPop(sqstack&s,selemtype&e){
if(s.top==s.base)returnERROR;
e=*--s.top;
returne;
}
statusTop(sqstack&s,selemtypee){
if(s.top==s.base)returnERROR;
e=*(s.top-1);
returnOK;
}
voidconversion(intN,intr){
sqstacks;
selemtypee;
Initstack(s);
while(N){
Push(s,N%r);
N=N/r;
}
printf("转换后的结果是:
");
while(s.top!
=s.base){
Pop(s,e);
printf("%d",e);
}
printf("\n");
}
.使用说明与测试结果
程序名为TXL.exe,运行环境为DOS。
程序执行后显示(下图为参考截图例子。
)
第一次操作需选择1,2或3,并且只能选择一种。
程序执行显示
我们选择的操作是1,输入要转换的十进制数是10,结果是1010。
我们选择的是继续1,这次选的是2,十进制转换八进制,输入的是10,结果是12。
我们选择的是继续1,选的是3,十进制转换十六进制,输入10,输出10.
五、实验总结(调试和运行程序过程中产生的问题及采取的措施;对算法的程序的讨论、分析,改进设想以及其它经验教训;对实验方式、组织、设备、题目的意见和建议等)
附源程序清单:
#include
#include
typedefintselemtype;
typedefintstatus;
#defineOK1
#defineOVERFLOW-1
#defineERROR0
typedefstruct{
selemtype*base;
selemtype*top;
intstacksize;
}sqstack;
statusInitstack(sqstack&s){
s.base=(selemtype*)malloc(100*sizeof(selemtype));
if(!
s.base)exit(OVERFLOW);
s.top=s.base;
s.stacksize=100;
returnOK;
}
statusPush(sqstack&s,selemtypee){
if(!
s.base)exit(OVERFLOW);
*s.top++=e;
returnOK;
}
statusPop(sqstack&s,selemtype&e){
if(s.top==s.base)returnERROR;
e=*--s.top;
returne;
}
statusTop(sqstack&s,selemtypee){
if(s.top==s.base)returnERROR;
e=*(s.top-1);
returnOK;
}
voidconversion(intN,intr){
sqstacks;
selemtypee;
Initstack(s);
while(N){
Push(s,N%r);
N=N/r;
}
printf("转换后的结果是:
");
while(s.top!
=s.base){
Pop(s,e);
printf("%d",e);
}
printf("\n");
}
intscan()
{intd;
printf("◤栈的应用数制转换◢\n");
printf("第6小组\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※\n");printf("※数制转换※\n");
printf("※1.十进制转二进制※\n");
printf("※2.十进制转八进制※\n");
printf("※3.十进制转十六进制※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("--------------------------------------------------\n");
printf("请选择所要进行的操作:
");
scanf("%d",&d);
return(d);
}
voidmain(){
intn,i;
switch(scan()){
case1:
printf("输入转换的数:
");
scanf("%d",&n);
conversion(n,2);break;
case2:
printf("输入转换的数:
");
scanf("%d",&n);
conversion(n,8);break;
case3:
printf("输入转换的数:
");
scanf("%d",&n);
conversion(n,16);break;
}
printf("是否要继续?
继续选择1,退出选择0!
\n");
scanf("%d",&i);
if(i==1)
{
main();
}
else
exit;
}
总结:
虽然这个程序不难编程但是也让我们发现了自己在编程上的许多问题,以及对一些语法的还不够熟悉,让我们知道了自己的不足,以及自己今后需要加强的方面是什么,更让我们体会到了团队合作的精神,以及大家在一起互帮互助,共同解决问题的感觉。
相信我们今后会更加默契,共同学习,共同进步。