文档介绍:顺序栈基本操作实验报告数据结构实验三课程数据结构实验名称顺序栈基本操作第页专业班级学号姓名实验日期:年月日评分一、。。二、"后进先出"的特性。。。三、,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。主要功能描述如下:(1)从键盘上输入表达式。(2)分析该表达式是否合法:a)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。b)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。c)若是其它字符,则返回错误信息。(3)若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。程序中应主要包含下面几个功能函数:lvoidinitstack():初始化堆栈lintMake_str():语法检查并计算lintpush_operate(intoperate):将操作码压入堆栈lintpush_num(doublenum):将操作数压入堆栈lintprocede(intoperate):处理操作码lintchange_opnd(intoperate):将字符型操作码转换成优先级lintpush_opnd(intoperate):将操作码压入堆栈lintpop_opnd():将操作码弹出堆栈lintcaculate(intcur_opnd):简单计算+,-,*,/ldoublepop_num():弹出操作数四、实验步骤(描述实验步骤及中间的结果或现象。在实验中做了什么事情,怎么做的,发生的现象和中间结果)第一题:#include<iostream>usingnamespacestd;#defineSTACK_INIT_SIZE100//存储空间初始分配量#defineSTACKINCREMENT10//存储空间分配增量#defineOVERFLOW-1#defineOK1#defineNO-1#defineNULL0typedefintStatus;typedefcharSElemType;typedefstruct{SElemType*base;//在栈构造之前和销毁之后,base的值为NULLSElemType*top;//栈顶指针intstacksize;//当前已分配的存储空间,以元素为单位}SqStack;StatusInitstack(SqStack&S)//构造一个空栈S{=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!)exit(OVERFLOW);=;=STACK_INIT_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(OVERFLOW);=+;+=STACKINCREMENT;}*++=e;returnOK;}//PushStatusPop(SqStack&S,SElemType&c)//若栈不空,则删除S的栈顶元素,用c返回其值,并返回OK;否则返回ERROR{if(==) returnNO;c=*--; returnOK;}//PopStatusGetTop(SqStack&S,SElemType&e){ if(==) returnNO; e=*(-1); returnOK;}//GetTopintmain(){SqStackS;Initstack(S