1、栈子系统王志课程设计任务书学 院信息科学与工程学院专 业电子信息科学与技术学 生 姓 名王志学 号0803070134设 计 题 目课程设计题二:栈子系统一设计内容和要求: 1.设计一个选择式菜单。栈子系统* 1 入栈 * 2 出栈 * 3 显示 * 4 数制转换 * 0 返回 *请选择菜单号(04)2.设计一个字符型的栈。3.编写入栈、出栈和显示栈中全部元素的程序。4.编写一个把十进制数转换成八进制数的应用程序。二.进度安排:第1天: 1、指导教师布置课程设计题目及任务 2、查找相关资料 第24天: 1、根据具体设计题目进行具体分析 2、对设计题目进行编码和调试3、指导教师进行验收第5天:
2、1、指导教师针对课程设计进行答辩2、完成课程设计报告指导教师(签字): 年 月 日学院院长(签字):年 月 日目 录一、 课程设计内容和要求-1二、 课程设计的目的-3三、 课程设计分析 -3-4四、 算法描述 -4-5五、 源代码 -5-9六、 运行结果分析 -10-12七、 结束语 -12八、 参考文献 -12题目栈子系统一、 课程设计的目的本学期我们对数据结构这门课程进行了学习。这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。这次课程设计不但要求实习者掌握数据结构中的各方面知识,还要求实习者具备一定的C语言基础和编程能力。1
3、.掌握栈的特点及其描述方法2.掌握链式存储结构实现一个栈3.掌握链栈的各种基本操作4.掌握栈的典型应用的算法二、 课程设计的内容和要求1.设计一个选择式菜单。栈子系统* 1 入栈 * 2 出栈 * 3 显示 * 4 数制转换 * 0 返回 *请选择菜单号(04):2.设计一个字符型的栈。3.编写入栈、出栈和显示栈中全部元素的程序。4.编写一个把十进制数转换成八进制数的应用程序。三、 课程设计分析从逻辑结构、物理结构和基本运算入手展开说明本题目所涉及到的相关知识。1.栈是限定在栈顶一端进行插入和删除的线性表。2.栈是一种限制存取点的线性结构,最后入栈的先出栈,称为“后进先出”表。3.进制转换的8
4、进制是按低位到高位的顺序产生的,而通常输出是按高位到低位输出的,恰好与计算相反,因此转换过程中每得到一位8进制的数则进栈保存,转换完毕后出栈则正好是转换结果。四、 算法描述1、栈初始化,构造一个空栈:SeqStack *Snull ();,然后对栈依次进行入栈int Push (SeqStack *s,datatype x),出栈操作int Pop (SeqStack *s,datatype *x); 以及数制转换操作void Conversion (int m);。2、栈的初始化操作分配量进行第一次分配base为栈底指针,若base=NULL,表明栈结构不存在;称top为栈顶指针,其初值指向
5、栈底即top=base可以作为栈空的标记,每当插入一个元素时,指针top增加1。具体算法描述如下:int Push (SeqStack *s,datatype x) if(s-top=MAXLEN-1) return 0; /栈满 else s-top+; s-datas-top=x; return 1; /指针后移,将新的元素插入到栈顶int Pop (SeqStack *s,datatype *x) if (0) return 0; else *x=s-datas-top; s-top-; /退栈 return 1;3、栈是一个先进后出的线性表,在数制转换为八进制时,先把低位到高位的数字按
6、照顺序进栈,输出的时候高位到低位输出。算法课描述如下:void Conversion (int n) SeqStack*s=Snull(); int x; while(n) x=n%8; n=n/8; s-top+; s-datas-top=x; while(s-top-1) printf(t%d,s-datas-top); s-top-; getchar();printf(n);五、 源代码 /栈子系统/创建人:王志/创建时间:2009/12/28#include #include #define MAXLEN 10typedef int datatype;typedef struct da
7、tatype dataMAXLEN; int top; SeqStack;SeqStack *Snull ();int Push (SeqStack *s,datatype x); /执行入栈操作 int Pop (SeqStack *s,datatype *x); /执行出栈操作datatype ReadTop (SeqStack *s);void ShowStack (SeqStack *s);void Conversion (int m);void main() SeqStack *s; int i=1,j,chioce,val,flag,m; char a; s=Snull (); w
8、hile(i) printf(n); printf(ntt 顺序栈操作应用演示 ); printf(ntt*); printf(ntt| 1-进栈 |); printf(ntt| 2-出栈 |); printf(ntt| 3-显示栈元素 |); printf(ntt| 4-数制转换 |); printf(ntt| 0-返回 |); printf(ntt*); printf(ntt 请选择序号 (0-8): ); chioce=getchar(); getchar(); switch(chioce) case 1: j=1; while(j) printf(ntt输入整数(0结束)按回车 :);
9、 scanf(%d,&val); if (val!=0) flag=Push(s,val); if (flag=0) j=0; printf (栈满); else j=0; ;break; case 2: if (s-top!=-1) Pop (s,&val); printf (ntt出栈元素为 :%6dn,val); else if (s-top=-1) printf ( 栈已为空!); break; case 3: ShowStack (s);break; case 4: printf (ntt输入十进制数m转换的八进制数后为:); scanf (%d,&m); Conversion (m
10、);break; case 0:i=0; if(chioce=1|chioce=2|chioce=3|chioce=4) printf(ntt回车返回主菜单,输入0按回车退出程序.n); a=getchar(); if(a!=xA) i=0; else i=1; SeqStack *Snull () SeqStack *s; s=(SeqStack *)malloc(sizeof(SeqStack); s-top=-1; /top=-1表示栈空 return s;int Push (SeqStack *s,datatype x) if(s-top=MAXLEN-1) return 0; /栈满
11、 else s-top+; s-datas-top=x; return 1; /指针后移,将新的元素插入到栈顶int Pop (SeqStack *s,datatype *x) if (0) return 0; else *x=s-datas-top; s-top-; /退栈 return 1;datatype ReadTop (SeqStack *s) if(s-top=-1) return 0; else printf( 栈顶元素为:%3d ,s-datas-top); return 1;void ShowStack (SeqStack *s) int i;if(s-top=-1) pri
12、ntf( 栈已为空!); else printf( 栈元素:); for(i=s-top;i=0;i-) printf(%3d ,s-datai); void Conversion (int n) SeqStack*s=Snull(); int x; while(n) x=n%8; n=n/8; s-top+; s-datas-top=x; while(s-top-1) printf(t%d,s-datas-top); s-top-; getchar();printf(n);六运行结果:七、 实验结论有关栈的存储问题,实验开始时无法为栈进行存储,为什么?栈的初始化操作分配量进行第一次分配base为栈底指针,若base=NULL,表明栈结构不存在;称top为栈顶指针,其初值指向栈底即top=base可以作为栈空的标记,每当插入一个元素时,指针top增加1。通过本次试验,我们了解了栈的建立,存储,输出以及数制转换的问题,对栈的结构更加清楚,明确。八、 参考文献1 杨路明 C语言程序设计教程 北京邮电大学出版社2 严蔚敏 吴伟民 数据结构 清华大学出版社3 陈媛 何波 蒋鹏 刘洁 数据结构 学习指导-实验指导-课程设计 机械工业出版社
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1