顺序栈操作实验报告出现的问题

上传人:bin****86 文档编号:60391891 上传时间:2018-11-15 格式:DOCX 页数:24 大小:22.49KB
返回 下载 相关 举报
顺序栈操作实验报告出现的问题_第1页
第1页 / 共24页
顺序栈操作实验报告出现的问题_第2页
第2页 / 共24页
顺序栈操作实验报告出现的问题_第3页
第3页 / 共24页
顺序栈操作实验报告出现的问题_第4页
第4页 / 共24页
顺序栈操作实验报告出现的问题_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《顺序栈操作实验报告出现的问题》由会员分享,可在线阅读,更多相关《顺序栈操作实验报告出现的问题(24页珍藏版)》请在金锄头文库上搜索。

1、为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划顺序栈操作实验报告出现的问题数据结构实验三课程数据结构实验名称顺序栈基本操作第页专业班级学号姓名实验日期:年月日评分一、实验目的1熟悉并能实现栈的定义和基本操作。2了解和掌握栈的应用。二、实验要求1进行栈的基本操作时要注意栈后进先出的特性。2编写完整程序完成下面的实验内容并上机运行。3整理并上交实验报告。三、实验内容1编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。2编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则

2、计算该算术表达式的值。主要功能描述如下:从键盘上输入表达式。分析该表达式是否合法:?a)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。b)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。c)若是其它字符,则返回错误信息。若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。程序中应主要包含下面几个功能函数:?lvoidinitstack():初始化堆栈lintMake_str():语法检查并计算?lintpush_operate(intoperate):将操作码压入堆栈lintpush_num(doublenum):将操作数压入堆栈lintproc

3、ede(intoperate):处理操作码lintchange_opnd(intoperate):将字符型操作码转换成优先级lintpush_opnd(intoperate):将操作码压入堆栈lintpop_opnd():将操作码弹出堆栈lintcaculate(intcur_opnd):简单计算+,-,*,/ldoublepop_num():弹出操作数四、实验步骤第一题:#includeusingnamespacestd;#defineSTACK_INIT_SIZE100/存储空间初始分配量#defineSTACKINCREMENT10/存储空间分配增量#defineOVERFLOW-1#d

4、efineOK1#defineNO-1#defineNULL0typedefintStatus;typedefcharSElemType;typedefstructSElemType*base;/在栈构造之前和销毁之后,base的值为NULLSElemType*top;/栈顶指针intstacksize;/当前已分配的存储空间,以元素为单位SqStack;StatusInitstack(SqStack&S)/构造一个空栈S=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!)exit(OVERFLOW);=;=STACK_INIT

5、_SIZE;returnOK;/InitStackStatusStackEmpty(SqStack&S)if(=)returnOK;elsereturnNO;StatusClearStack(SqStack&S)/把S置为空if(=);returnOK;StatusDsetroyStack(SqStack&S)/销毁栈S=NULL;returnOK;StatusPush(SqStack&S,SElemTypee)/插入元素e为新的栈顶元素if(=)=(SElemType*)realloc(,(+STACKINCREMENT)*sizeof(SElemType);if(!)/存储分配失败exit

6、(OVERFLOW);=+;+=STACKINCREMENT;*+=e;returnOK;/PushStatusPop(SqStack&S,SElemType&c)/若栈不空,则删除S的栈顶元素,用c返回其值,并返回OK;否则返回ERRORif(=)returnNO;c=*-;returnOK;/PopStatusGetTop(SqStack&S,SElemType&e)if(=)returnNO;e=*();returnOK;/GetTopintmain()SqStackS;Initstack(S);coutusingnamespacestd;#defineSTACK_SIZE100#def

7、ineSTACKINCREMENT10#defineOVERFLOW-1#defineOK1#defineNO0typedefintStatus;typedefcharSElemType;typedefstructSElemType*base;SElemType*top;intstacksize;SqStack;intmain()charGetTop(SqStack&s);StatusInitstack(SqStack&s);Statuspush_operate(SqStack&s,SElemTypee);Statuspush_num(SqStack&s,inte);StatusStackem

8、pty(SqStack&s);Statuspop_num(SqStack&s,int&c);Statuspushoperate(SElemTypeoperate);Statuspushnum(SElemTypenum);Statuscaculate(SElemTypea,SElemTypeoperate,SElemTypeb);Statuspop_operate(SqStack&s,SElemType&c);Statuschange(SElemTypee);charPrecede(SElemTypea,SElemTypeb);charOperatecxz();intm;m=Operatecxz

9、();cout=)实验三栈和队列实验目的:熟悉栈的特点及栈的基本操作,如入栈、出栈等,掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现;熟悉队列的特点及队列的基本操作,如入队、出队等,掌握队列的基本操作在队列的顺序存储结构和链式存储结构上的实现。实验要求:复习课本中有关栈和队列的知识;用C语言完成算法和程序设计并上机调试通过;撰写实验报告,给出算法思路或流程图和具体实现、算法分析结果、输入数据及程序运行结果。基础实验实验1栈的顺序表示和实现实验内容与要求:编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:初始化顺序栈插入元素删除栈顶元素取栈顶元素遍历顺序栈

10、置空顺序栈分析:栈的顺序存储结构简称为顺序栈,它是运算受限的顺序表。对于顺序栈,入栈时,首先判断栈是否为满,栈满的条件为:p-top=MAXNUM-1,栈满时,不能入栈;否则出现空间溢出,引起错误,这种现象称为上溢。出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空作为一种控制转移的条件。注意:顺序栈中元素用向量存放栈底位置是固定不变的,可设置在向量两端的任意一个端点栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top来指示当前栈顶位置参考程序:#include#include#defineMAXNUM20#defineElemTypeint/*定义顺序栈的存储结

11、构*/typedefstructElemTypestackMAXNUM;inttop;SqStack;/*初始化顺序栈*/voidInitStack(SqStack*p)if(!p)printf(Eorror);p-top=-1;/*入栈*/voidPush(SqStack*p,ElemTypex)if(p-toptop=p-top+1;p-stackp-top=x;elseprintf(Overflow!n);/*出栈*/ElemTypePop(SqStack*p)ElemTypex;if(p-top!=0)x=p-stackp-top;printf(以前的栈顶数据元素%d已经被删除!n,p

12、-stackp-top);p-top=p-top-1;return(x);elseprintf(Underflow!n);return(0);/*获取栈顶元素*/ElemTypeGetTop(SqStack*p)ElemTypex;if(p-top!=0)x=p-stackp-top;return(x);elseprintf(Underflow!n);return(0);/*遍历顺序栈*/voidOutStack(SqStack*p)inti;printf(n);if(p-toptop;i=0;i-)printf(第%d个数据元素是:%6dn,i,p-stacki);/*置空顺序栈*/voidsetEmpty(SqStack*p)p-top=-1;/*主函数*/main()SqStack*q;inty,cord;ElemTypea;doprintf(n);printf(第一次使用必须初始化!n);printf(n);printf(n主菜单n);printf(n1初始化顺序栈n);printf(n2插入一个元素n);printf(n3删除栈顶元素n);printf(n4取栈顶元素n);printf(n5置空顺序栈n);printf(n6结束程序运行n

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号