欢迎来到天天文库
浏览记录
ID:46584746
大小:455.70 KB
页数:12页
时间:2019-11-25
《数据结构实验报告 顺序栈基本操作 括号匹配检验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验报告3课程数据结构实验名称顺序栈基本操作第页专业信息科学与技术类班级__1___学号_姓名实验日期:2010年9月28日评分一、实验目的1.熟悉并能实现栈的定义和基本操作。2.了解和掌握栈的应用。二、实验要求1.进行栈的基本操作时要注意栈"后进先出"的特性。2.编写完整程序完成下面的实验内容并上机运行。3.整理并上交实验报告。三、实验内容1.编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。2.编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。主要功能描述如下:
2、(1)从键盘上输入表达式。(2)(2)分析该表达式是否合法:a)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。b)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。c)若是其它字符,则返回错误信息。(3)若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。程序中应主要包含下面几个功能函数:voidinitstack():初始化堆栈intMake_str():语法检查并计算intpush_operate(intoperate):将操作码压入堆栈intpush_num(doublenum):将操作数压入
3、堆栈intprocede(intoperate):处理操作码intchange_opnd(intoperate):将字符型操作码转换成优先级intpush_opnd(intoperate):将操作码压入堆栈intpop_opnd():将操作码弹出堆栈intcaculate(intcur_opnd):简单计算+,-,*,/doublepop_num():弹出操作数四、实验步骤实验第一题:1.分块函数写。写出各个独立函数。这些函数有:StatusInitStack(SqStack&s),StatusClearStack(SqStack&s),S
4、tatusDestroyStack(SqStack&s),StatusPush(SqStack&s,SElemType-1-e),StatusPop(SqStack&s,SElemType&e),StatusGetTop(SqStacks,SElemType&e)2.写主函数,其中要输入栈时调用push函数即可。注意栈只能在栈顶操作。3.完整代码如下://datastruct实验三stack栈基本操作1Pass/*编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。*/#include5、>#include#defineFALSE0#defineTRUE1#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2typedefintSElemType;typedefintStatus;#defineSTACK_INIT_SIZE100#defineSTACKINCREMENT10typedefstruct{SElemType*base;SElemType*top;intstacksize;}SqStack;StatusInitStack(SqStack&s)6、//初始化栈{s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!s.base)exit(OVERFLOW);s.top=s.base;s.stacksize=STACK_INIT_SIZE;returnOK;}StatusClearStack(SqStack&s)//清空栈{s.top=s.top;returnOK;}StatusDestroyStack(SqStack&s)//销毁栈{free(s.base);returnOK;}StatusStackEmpty(SqSt7、ackS)//判断栈是否为空{if(S.top==S.base)return1;elsereturn0;}StatusPush(SqStack&s,SElemTypee)//元素进栈{if(s.top-s.base>=s.stacksize){s.base=(SElemType*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!s.base)exit(OVERFLOW);s.top=s.base+s.stacksize;s.stacksize+=STACKINCREM8、ENT;-2-}*s.top=e;s.top++;returnOK;}StatusPop(Sq
5、>#include#defineFALSE0#defineTRUE1#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2typedefintSElemType;typedefintStatus;#defineSTACK_INIT_SIZE100#defineSTACKINCREMENT10typedefstruct{SElemType*base;SElemType*top;intstacksize;}SqStack;StatusInitStack(SqStack&s)
6、//初始化栈{s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!s.base)exit(OVERFLOW);s.top=s.base;s.stacksize=STACK_INIT_SIZE;returnOK;}StatusClearStack(SqStack&s)//清空栈{s.top=s.top;returnOK;}StatusDestroyStack(SqStack&s)//销毁栈{free(s.base);returnOK;}StatusStackEmpty(SqSt
7、ackS)//判断栈是否为空{if(S.top==S.base)return1;elsereturn0;}StatusPush(SqStack&s,SElemTypee)//元素进栈{if(s.top-s.base>=s.stacksize){s.base=(SElemType*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!s.base)exit(OVERFLOW);s.top=s.base+s.stacksize;s.stacksize+=STACKINCREM
8、ENT;-2-}*s.top=e;s.top++;returnOK;}StatusPop(Sq
此文档下载收益归作者所有