5、栈应用实验 - 副本

5、栈应用实验 - 副本

ID:5552444

大小:89.00 KB

页数:4页

时间:2017-12-18

5、栈应用实验 - 副本_第1页
5、栈应用实验 - 副本_第2页
5、栈应用实验 - 副本_第3页
5、栈应用实验 - 副本_第4页
资源描述:

《5、栈应用实验 - 副本》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、实验五栈的应用一、实验目的1、掌握用VC工具上机调试堆栈的存储方式和基本操作。2、掌握堆栈后进先出运算原则在解决实际问题中的应用;3、掌握使用栈的原理来解决数制转换问题。二、实验学时2学时三、实验类型验证型四、实验内容利用栈结构,编写程序将十进制数转换成二进制数或八进制数。提示:十进制数值转换成二进制使用辗转相除法将一个十进制数值转换成二进制数值。即用该十进制数值除以2,并保留其余数;重复此操作,直到该十进制数值为0为止。最后将所有的余数反向输出就是所对应的二进制数值。十进制数值转换成八进制算法类似。转换算法要求用一个函数完成。五、实验原理1、数值转换原理栈

2、是一种受限的线性表,由于规定了栈的入栈与出栈只能在一端进行,故而产生了后进先出,先进后出的结果,而数值转换可采用数学方法辗转相除的方法解决,但首先产生的数值却是个位数值,最后产生的是最先用到的,这种结构符合后进先出的特点,因而可设一个栈存储依次产生的各个数值进行模拟,当除数为零时输出栈中元素即可。2、栈的基本算法(1)SeqStackInitiate(Q);初始化顺序栈S。(2)SeqStackEmpty(Q);判断顺序栈S非空否操作。(3)EnSeqStack(Q,x);顺序栈S入栈操作,在顺序栈S的栈顶插入数据元素x。(4)DeSeqStack(Q,d)

3、;顺序栈S出栈操作,把顺序栈S的栈顶元素删除并由参数d带回。(5)conversion();数值转换算法。3、模块层次要求画出数值转换问题的模块层次图。如图所示图图9数值转换程序模块图4、关键算法NS图六、实验步骤及要求用VC语言编程实现建立一个栈S,借助于栈S进行数值转换。1.顺序栈S初始化;2.输入待转换的数值;3.输入要转换的数值;4.输出经过转换后的数值;5.程序完成。七、运行结果图10数值转换程序运行图八、思考问题结合实验过程,回答下列问题:1、数值转换问题能否使用数组解决?2、使用数组与栈有何区别?3、数组与栈来解决数值转换问题那种选择为最佳选择

4、?九、实验报告要求1、根据对栈的先进后出特点的理解,如何实现栈的基本操作;2、何时选用栈去解决实际问题;3、采用栈来解决问题的特点;4、调试程序过程中遇到的问题及解决方案;5、本次实验的结论与体会。程序附录:#include"stdio.h"#include"malloc.h"#include"process.h"#defineSTACK_INIT_SIZE5#defineSTACKINCREMENT5typedefintElemType;typedefstruct{ElemType*base;ElemType*top;intstacksize;}SqSta

5、ck;voidInitStack(SqStack*S){S->base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));if(!S->base)exit(1);S->top=S->base;S->stacksize=STACK_INIT_SIZE;}intpush(SqStack*S,ElemTypee){if(S->top-S->base>S->stacksize)/*attentionstacksize*/{S->base=(ElemType*)realloc(S->base,(S->stacksi

6、ze+STACKINCREMENT)*sizeof(ElemType));if(!S->base)exit(1);S->top=S->base+S->stacksize;S->stacksize+=STACKINCREMENT;}*S->top=e;S->top++;return1;}ElemTypepop(SqStack*S,ElemType*e){if(S->top==S->base)printf("此时栈为空,不能进行出栈!");*e=*--S->top;return*e;}intStackEmpty(SqStack*S){if(S->top==S

7、->base)return1;elsereturn0;}DisplayStack(SqStack*S){ElemType*p,*q,e;p=S->top;q=S->base;while(p!=q){e=*(--p);printf("%d",e);}}conversion(){intn;intm;SqStacks;ElemTypee;InitStack(&s);scanf("%d",&n);printf("请输入要转换的数值:");scanf("%d",&m);while(n){push(&s,n%m);n=n/m;}while(!StackEmpty(&

8、s)){pop(&s,&e);printf("%d"

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。