顺序栈基本操作实验报告记录

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

顺序栈基本操作实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

数据结构实验三

课程数据结构实验名称顺序栈基本操作第页

专业班级学号

姓名

实验日期:年月日评分

一、实验目的

1.熟悉并能实现栈的定义和基本操作。

2.了解和掌握栈的应用。

二、实验要求

1.进行栈的基本操作时要注意栈"后进先出"的特性。

2.编写完整程序完成下面的实验内容并上机运行。

3.整理并上交实验报告。

三、实验内容

1.编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。

2.编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。

主要功能描述如下:

(1)从键盘上输入表达式。

(2)分析该表达式是否合法:

•a) 是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。

•b) 是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。

•c) 若是其它字符,则返回错误信息。

(3)若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。

程序中应主要包含下面几个功能函数:

•l void initstack():初始化堆栈

•l int Make_str():语法检查并计算

•l int push_operate(int operate):将操作码压入堆栈

•l int push_num(double num):将操作数压入堆栈

•l int procede(int operate):处理操作码

•l int change_opnd(int operate):将字符型操作码转换成优先级

•l int push_opnd(int operate):将操作码压入堆栈

•l int pop_opnd():将操作码弹出堆栈

•l int caculate(int cur_opnd):简单计算+,-,*,/

•l double pop_num():弹出操作数

四、实验步骤

(描述实验步骤及中间的结果或现象。在实验中做了什么事情,怎么做的,发生的现象和中间结果)

第一题:

#include

using namespace std;

#define STACK_INIT_SIZE 100 //存储空间初始分配量

#define STACKINCREMENT 10 //存储空间分配增量

#define OVERFLOW -1

#define OK 1

#define NO -1

#define NULL 0

typedef int Status;

typedef char SElemType;

typedef struct

{

SElemType *base; //在栈构造之前和销毁之后,base的值为NULL

SElemType *top; //栈顶指针

int stacksize; //当前已分配的存储空间,以元素为单位

} SqStack;

Status Initstack(SqStack &S)//构造一个空栈S

{

S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));

if(!S.base)

exit(OVERFLOW);

S.top=S.base;

S.stacksize= STACK_INIT_SIZE;

return OK;

}//InitStack

Status StackEmpty(SqStack &S)

{

if(S.base==S.top)

return OK;

else

return NO;

}

Status ClearStack (SqStack &S)//把S置为空

{

if(S.base=S.top);

return OK;

}

Status DsetroyStack (SqStack &S)//销毁栈S

{

S.base=NULL;

return OK;

}

Status Push(SqStack &S,SElemType e)

//插入元素e为新的栈顶元素

{

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+=STACKINCREMENT;

}

*S.top++=e;

return OK;

}//Push

Status Pop(SqStack &S,SElemType &c)

//若栈不空,则删除S的栈顶元素,用c返回其值,并返回OK;否则返回ERROR {

if(S.top==S.base)

return NO;

c=*--S.top;

return OK;

}//Pop

Status GetTop(SqStack &S,SElemType &e)

{

if (S.top==S.base)

相关文档
最新文档