数据结构实验3_实验报告

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

实验报告3

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

专业班级___ 学号_ 姓名

实验日期:2010 年9 月28 日评分

一、实验目的

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

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

二、实验要求

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

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

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

三、实验内容

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

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

主要功能描述如下:

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

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

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

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

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

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

四、实验步骤

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

#define OK 1

#define ERROR -1

#define TRUE 1

#define FALSE 0

#define OVERFLOW 0

typedef int Status;

typedef int SElemType;

#include

#include

using namespace std;

//1.编写程序任意输入栈长度和栈中的元素值

typedef struct{

SElemType *base;

SElemType *top;

int stacksize;

}SqStack;

Status InitStack(SqStack & 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;

}

Status ClearStack(SqStack &S) //清空、

{

if(S.top!=S.base)

{

S.top=S.base;

S.stacksize=0;

}

return OK;

}

Status DestroyStack(SqStack &S)//销毁、

{

free(S.base);

if(S.base)

return ERROR;

return OK;

}

Status Push(SqStack & S ,SElemType 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;

}

Status Pop(SqStack & S,SElemType & e) //出栈

{

if(S.top==S.base)

return ERROR;

e=*(--S.top);

return OK;

}

SElemType GetTop(SqStack S) //取栈顶元素操作

{

if(S.top==S.base)

return NULL;

return *(S.top-1);

}

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

int Precede(char top,char e) // 用来比较运算符优先级的函数

{

switch(top){

case '+':

case '-':

if(e=='+'||e=='-'||e==')'||e=='#') { return 1;} //栈顶元素优先,返回1

else { return -1;} //栈顶元素没有优先权,返回-1 以下相同case '*':

case '/':

if(e=='(') { return -1;}

else { return 1;}

case '(':

if(e==')'){return 0;} //返回0表示搭配括号

else{return -1;}

case ')':return 1;

case '#': if(e=='#'){return 0;} else return -1;

}

}

SElemType Operate(SElemType a,SElemType theta,SElemType b) //计算加减乘除{

switch(theta){

case 43: return a+b;

case 45: return a-b;

相关文档
最新文档