顺序栈基本操作实验报告_第1页
顺序栈基本操作实验报告_第2页
顺序栈基本操作实验报告_第3页
顺序栈基本操作实验报告_第4页
顺序栈基本操作实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构实验3课程数据结构实验名称序列堆栈基本操作第1页专业课号名字实验日期:年、月、日分数一、实验目的1.熟悉并能够实现堆栈定义和基本操作。2.理解和掌握栈的应用。二、实验要求1.在进行基本堆栈操作时,请注意堆栈的“后进先出”特性。2.写一个完整的程序来完成下面的实验,并在计算机上运行它。3.组织并上交实验报告。三。实验内容1.编写程序在堆栈中随机输入堆栈长度和元素值,构造一个顺序堆栈,然后清空、销毁、堆栈入栈、堆栈出栈,并取出堆栈的顶部元素。2.编写一个程序来计算表达式,即验证算术表达式的正确性。如果正确,计算算术表达式的值。主要功能描述如下:(1)从键盘输入表达式。(2)分析表达是否合法:a)是一个数字,然后判断这个数字的合法性。如果合法,数据将被推入堆栈。b)是指定的运算符,它是根据规则处理的。在处理过程中,将计算表达式的值。c)如果是其他字符,则返回错误消息。(3)如果在上述处理过程中没有发现错误,则该表达式被认为是合法的,并且打印处理结果。该程序应主要包括以下功能:L void initstack():初始化堆栈语法检查和计算将操作码推送到堆栈上将操作数推送到堆栈上l int proceed(into operate):处理操作码整数转换:将字符操作码转换为优先级L int push_opnd(int操作):将操作码推送到堆栈上L int pop_opnd():从堆栈中弹出操作码l积分计算(intcur _ opnd):简单计算,-,*,/l双pop_num (): pop操作数四.实验步骤(描述实验步骤和中间结果或现象。你在实验中做了什么,你是如何做的,发生了什么以及中间结果)第一个问题:#包括使用命名空间标准;#定义STACK_INIT_SIZE 100 /存储空间的初始分配#定义堆栈增量10 /存储空间分配增量#define OVERFLOW -1#定义好1#定义NO -1#定义空值0类型定义int状态;typedef字符选择类型;typedef结构SElemType * base/在堆栈构造之前和堆栈销毁之后,基值为空选择类型*顶部;/堆栈顶部指针int stacksize/当前分配的存储空间,以元素为单位 SqStack状态初始化堆栈/构造一个空堆栈s . base=(SelemType *)malloc(STACK _ INIT _ SIZE * sizeof(SelemType);如果(!S.base)exit(OVERFLOW);顶部=底部;S.stacksize=STACK_INIT_SIZE。返回“确定”;/InitStack状态堆栈类型(堆栈类型)如果(标准差=标准差)返回“确定”;其他返回否;状态清除堆栈/将S设置为空如果(s . base=s . top);返回“确定”;状态DsetRoyStack(SqStack S)/销毁堆栈SS.base=空;返回“确定”;状态推送(堆栈S,选择类型e)/插入元素E是新的堆栈顶部元素如果(顶部-底部=堆叠大小)碱基=(选择类型*)实数(碱基,(s . stack size STACKINCREMENT)* size of(SelemType);如果(!存储分配失败exit(OVERFLOW);s . top=s . base s . stack size;S.stacksize=STACKINCREMENT。*顶部=东;返回“确定”;/推送状态弹出(堆栈S,选择类型c)/如果堆栈不为空,删除S的顶部元素,用C返回其值,并返回确定;否则,返回ERROR。如果(顶部=底部)返回否;c=* - S顶部;返回“确定”;/流行状态获取点(SqStack S,选择类型e)如果(顶部=底部)返回否;e=*(s . top-1);返回“确定”;/GetTopint main()堆栈S;初始化堆栈;“输入要推入堆栈的元素!”使用命名空间标准;#定义STACK_SIZE 100#定义STACKINCREMENT 10#define OVERFLOW -1#定义好1#定义NO 0类型定义int状态;typedef字符选择类型;typedef结构SElemType * base选择类型*顶部;int stacksize SqStackint main()char GetTop(SqStack s);状态初始化堆栈(SqStack s);状态推送操作(SqStack s,选择类型(e);状态push_num(SqStack s,int e);状态堆栈(SqStack s);状态pop_num(SqStack s,int c);状态推送操作(选择类型操作);状态pushnum(选择类型编号);状态计算(选择类型a,选择类型操作,选择类型b)。状态弹出操作(SqStack s,选择类型(c);状态变化(选择e型);字符优先(选择类型a,选择类型b)。char Operatecxz();int m;m=Operatecxz();cout=s.stacksize)s。base=(SelemType *)实锁定(s . base,(s . stack size STACKINCREMENT)*(SelemType)的大小);如果(!s.base)exit(OVERFLOW);s。top=s . base s . stack大小;s.stacksize=STACKINCREMENT* s . top=e;返回确定;状态推送操作(SqStack s,选择类型e)if(s.top-s.base=s.stacksize)s。base=(SelemType *)实锁定(s . base,(s . stack size STACKINCREMENT)*(SelemType)的大小);如果(!s.base)exit(OVERFLOW);s。top=s . base s . stack大小;s.stacksize=STACKINCREMENT* s . top=e;返回确定;状态弹出操作(SqStack s,选择类型c)if(s.top=s.base)返回否;c=*-s . top;返回确定;状态pop_num(SqStack s,int c)if(s.top=s.base)返回否;c=*-s . top;返回确定;char GetTop(SqStack s)char c;if(s.top=s.base)返回否;c=*(s . top-1);返回c;状态计算(整数a,选择类型操作,整数b)int s;if(operate=)s=a b .如果(操作=-)s=a-b .如果(操作=*)s=a*b .如果(操作=/)s=a/b .返回s;状态输入(选择类型c)if(c=| | c=-| | c=* | | c=/| | c=# | | c=(| | c=)返回确定;if(c=0c=9)返回否;返回-1;字符优先(选择类型a,选择类型b)如果(a=|a=-)if(b=|b=-|b=)|b=#)返回;if(b=*|b=/|b=()返回;if(a=*|a=/)if(b=| | b=-| | b=)| | b=* | | b=/| | b=#)返回;if(b=()返回;如果(a=()if(b=)返回=;if(b=|b=-|b=*|b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论