1、栈的实验报告忻州师范学院计算机科学与技术系实 验 报 告(第六组)组长:梁启超组员:晋丹丹 张艳华马 军 刘雪梅孙钰林 刘 涛忻州师范学院计算机科学与技术系实验报告实验名称 栈的应用 专业班级 计本1504班 姓名 梁启超 学号 201508112036 指导教师 成绩 日期 2016/11/17 组员分工 晋丹丹(Initstack)张艳华(Push) 马军(Pop) 刘雪梅(Top)孙钰林(conversion) 刘涛(scan)一、实验目的本次课程设计的主要任务是完成对数制转换进行编程,要求用栈实现十进制到二进制、八进制、十六进制的转换,了解转换进制的原理,熟练对栈的基本操作,用栈的基本
2、操作实现程序的效率化。二、实验内容用栈建立线性表,并进行线性表相关操作。要求:要有良好的人机界面,有菜单形式实现,具备输入、判断转化类型、转化数据、输出结果等。三、实验要求1在问题分析的基础上选择合适的存储结构,进行算法设计,编制程序并上机调试成功。2按要求完成实验报告。3保存和打印出程序的运行结果,并结合程序进行分析。四、实验步骤一、本演示程序用C编写,完成栈的建立,及字符元素进栈与出栈操作 1、 输入的形式和输入值的范围:2、输出的形式:a进制数转换中会输出十进制转换成的二进制、八进制十六进制数。输入一段字符后将返回判断结果; 3、 程序所能达到的功能:完成栈的建成与元素进栈出栈的操作,输
3、出进制 数转换后的结果及回文判断的结果。 4、测试数据:十进制转换成二、八、十六进制数操作中依次输入任意一个十进制整数返回它所希望的结果。 二、为了实现上述程序功能,需要定义单链表的抽象数据类型:Initstack(sqstack &s)操作结果:构造一个空的栈S. Push(sqstack &s,selemtype e) 初始条件:栈S.已存在 操作结果:插入元素e为新的栈顶元素。 Pop(sqstack &s,selemtype &e) 初始条件:栈S.已存在 操作结果:删除S的栈顶元素并用e返回其值Top(sqstack &s,selemtype e)若栈不空,用e返回s的栈顶元素con
4、version(int N,int r)操作结果:进制转换各函数间关系如下:main( ) scan( )Initstack Push Pop Top conversion三、实现概要设计中定义的所有的数据类型,对每个操作给出伪码算法。对主程序和其他模块也都需要写出伪码算法。栈的定义typedef struct selemtype *base; selemtype *top; int stacksize;sqstack;栈的生成、插入、删除、运算等操作status Initstack(sqstack &s) s.base=(selemtype *)malloc(100*sizeof(selem
5、type); if(!s.base)exit(OVERFLOW); s.top=s.base; s.stacksize=100; return OK;status Push(sqstack &s,selemtype e) if(!s.base)exit(OVERFLOW); *s.top+ = e; return OK;status Pop(sqstack &s,selemtype &e) if(s.top=s.base)return ERROR; e = * -s.top; return e;status Top(sqstack &s,selemtype e) if(s.top=s.base
6、) return ERROR; e=*(s.top-1); return OK;void conversion(int N,int r) sqstack s; selemtype e; 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,输入要
7、转换的十进制数是10,结果是1010。我们选择的是继续1,这次选的是2,十进制转换八进制,输入的是10,结果是12。 我们选择的是继续1,选的是3,十进制转换十六进制,输入10,输出10.五、实验总结(调试和运行程序过程中产生的问题及采取的措施;对算法的程序的讨论、分析,改进设想以及其它经验教训;对实验方式、组织、设备、题目的意见和建议等)附源程序清单: #include#include typedef int selemtype;typedef int status;#define OK 1#define OVERFLOW -1#define ERROR 0typedef struct se
8、lemtype *base; selemtype *top; int stacksize;sqstack;status Initstack(sqstack &s) s.base=(selemtype *)malloc(100*sizeof(selemtype); if(!s.base)exit(OVERFLOW); s.top=s.base; s.stacksize=100; return OK;status Push(sqstack &s,selemtype e) if(!s.base)exit(OVERFLOW); *s.top+ = e; return OK;status Pop(sqs
9、tack &s,selemtype &e) if(s.top=s.base)return ERROR; e = * -s.top; return e;status Top(sqstack &s,selemtype e) if(s.top=s.base) return ERROR; e=*(s.top-1); return OK;void conversion(int N,int r) sqstack s; selemtype e; Initstack(s); while(N) Push(s,N%r); N=N/r; printf(转换后的结果是:);while(s.top!=s.base) P
10、op(s,e); printf(%d,e); printf(n);int scan()int d ; 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); void main() int n,i; switch(scan() case 1:printf
11、(输入转换的数:); scanf(%d,&n); conversion(n,2); break; case 2:printf(输入转换的数:); scanf(%d,&n); conversion(n,8); break; case 3:printf(输入转换的数:); scanf(%d,&n); conversion(n,16); break; printf(是否要继续?继续选择1,退出选择0!n); scanf(%d,&i); if(i=1) main(); else exit; 总结:虽然这个程序不难编程但是也让我们发现了自己在编程上的许多问题,以及对一些语法的还不够熟悉,让我们知道了自己的不足,以及自己今后需要加强的方面是什么,更让我们体会到了团队合作的精神,以及大家在一起互帮互助,共同解决问题的感觉。相信我们今后会更加默契,共同学习,共同进步。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1