数据结构 后缀表达式的计算

深 圳 大 学

实 验 报 告

课程名称: 数据结构

实验名称: 后缀表达式的计算

班 级: 1 姓 名:

同 组 人: 无 实验日期: 2011 年 10 月 11 日

教师签字:一、实验目的

熟悉栈的使用。

掌握如何使用C 语言实现栈的说明、创建以及进栈和出栈等操作。

二、实验要求

熟悉C 语言编程。

三、实验内容

编写单独的初始化栈、判空、入栈和出栈以及取得栈顶元素的函数 编写compute()函数,实现后缀表达式的计算,在该函数中对第一步实现的栈函数进行调用以完成计算

四、实验步骤(算法)

实现后缀表达式423*+42/-#的运算

1. 依次读入数字和运算符当读入的是数字时进栈,当读入的是运算符时出栈两次并把两个出栈的数据进行运算符所实现的运算,一直这样的操作直到所读的数据为#时,输出栈底元素即为所要计算的结果。

五、程序代码

#include

#define error 0

#define ok 1

#define TRUE 1

#define FALSE 0

#define STACK_INIT_SIZE 100

#define OVERFLOW -2

#define STACKINCREMENT 10

#include

typedef int elemtype;

#include

#include

#include

typedef struct{

elemtype *base;

elemtype *top;

int stacksize;

}bds_stack;

int pop(bds_stack &S,int &e)

{

}

int InitStack (bds_stack &S)

{ if(S.top==S.base) return error; e= * --S.top; return ok;

}

int GetTop(bds_stack S,elemtype&e)

{

if(S.top==S.base) return error;

return e=*(S.top-1);

}//GetTop

int push(bds_stack &S,int e)

{

}

int compute (char A[], int &k)

{

int i=0; int x1,x2,temp, e; if(S.top-S.base>=S.stacksize) { S.base=(elemtype*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(elemtype)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++ = e; return ok; S.base = (elemtype *) malloc(STACK_INIT_SIZE *sizeof(elemtype)); if (!S.base) exit(OVERFLOW); S.top =S.base; S.stacksize = STACK_INIT_SIZE; return ok;

bds_stack bds; //定义一个栈

InitStack (bds); //初始化栈

}

int StackEmpty(bds_stack s)

{

if(s.top==s.base) } GetTop(bds,e); return k=e; } i++; //指针后移 push(bds,temp); //计算结果压栈 pop(bds,x1); //操作数1,出栈 //计算 switch (A[i]) { case '+': temp=x1+x2;break; case '-': temp=x1-x2;break; case '*': temp=x1*x2;break; case '/': temp=x1/x2;break; } while (A[i]!='#') //依次取得后缀表达式中的字符判断并操作 { if (('0'

}

else return FALSE;

void main()

{

} char bds_hz[]="423*+42/-#";//后缀表达式 int j; compute (bds_hz,j); cout

六、实验结果(屏幕截图)

七、心得体会

本次实验的要求有多个,但我只做了其中的一小部分,为后缀表达式的求值。其中的中缀表达式(就是我们通常所见的)转换为后缀表达式,经过多次的实验因为不会比较运算符的优先级无法做到。我想这是因为我的动手能力还不是很好吧,还需要以后多编一些程序来锻炼自己的实践能力吧。

注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。

2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。

深 圳 大 学

实 验 报 告

课程名称: 数据结构

实验名称: 后缀表达式的计算

班 级: 1 姓 名:

同 组 人: 无 实验日期: 2011 年 10 月 11 日

教师签字:一、实验目的

熟悉栈的使用。

掌握如何使用C 语言实现栈的说明、创建以及进栈和出栈等操作。

二、实验要求

熟悉C 语言编程。

三、实验内容

编写单独的初始化栈、判空、入栈和出栈以及取得栈顶元素的函数 编写compute()函数,实现后缀表达式的计算,在该函数中对第一步实现的栈函数进行调用以完成计算

四、实验步骤(算法)

实现后缀表达式423*+42/-#的运算

1. 依次读入数字和运算符当读入的是数字时进栈,当读入的是运算符时出栈两次并把两个出栈的数据进行运算符所实现的运算,一直这样的操作直到所读的数据为#时,输出栈底元素即为所要计算的结果。

五、程序代码

#include

#define error 0

#define ok 1

#define TRUE 1

#define FALSE 0

#define STACK_INIT_SIZE 100

#define OVERFLOW -2

#define STACKINCREMENT 10

#include

typedef int elemtype;

#include

#include

#include

typedef struct{

elemtype *base;

elemtype *top;

int stacksize;

}bds_stack;

int pop(bds_stack &S,int &e)

{

}

int InitStack (bds_stack &S)

{ if(S.top==S.base) return error; e= * --S.top; return ok;

}

int GetTop(bds_stack S,elemtype&e)

{

if(S.top==S.base) return error;

return e=*(S.top-1);

}//GetTop

int push(bds_stack &S,int e)

{

}

int compute (char A[], int &k)

{

int i=0; int x1,x2,temp, e; if(S.top-S.base>=S.stacksize) { S.base=(elemtype*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(elemtype)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++ = e; return ok; S.base = (elemtype *) malloc(STACK_INIT_SIZE *sizeof(elemtype)); if (!S.base) exit(OVERFLOW); S.top =S.base; S.stacksize = STACK_INIT_SIZE; return ok;

bds_stack bds; //定义一个栈

InitStack (bds); //初始化栈

}

int StackEmpty(bds_stack s)

{

if(s.top==s.base) } GetTop(bds,e); return k=e; } i++; //指针后移 push(bds,temp); //计算结果压栈 pop(bds,x1); //操作数1,出栈 //计算 switch (A[i]) { case '+': temp=x1+x2;break; case '-': temp=x1-x2;break; case '*': temp=x1*x2;break; case '/': temp=x1/x2;break; } while (A[i]!='#') //依次取得后缀表达式中的字符判断并操作 { if (('0'

}

else return FALSE;

void main()

{

} char bds_hz[]="423*+42/-#";//后缀表达式 int j; compute (bds_hz,j); cout

六、实验结果(屏幕截图)

七、心得体会

本次实验的要求有多个,但我只做了其中的一小部分,为后缀表达式的求值。其中的中缀表达式(就是我们通常所见的)转换为后缀表达式,经过多次的实验因为不会比较运算符的优先级无法做到。我想这是因为我的动手能力还不是很好吧,还需要以后多编一些程序来锻炼自己的实践能力吧。

注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。

2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。


相关内容

  • 算术表达式与二叉树
  • 目录 一.系统开发的背景 ................................................................................................................ 1 二.系统分析与设计 ............ ...

  • 张瑞编译原理实验报告
  • 黑龙江大学 "编译原理课程设计"读书报告 学院 年级 专业 学号 姓名 报告日期 成绩 软件学院 2012级 软件工程 20122515 张瑞 2014年6月28日 黑龙江大学计算机科学技术学院 黑龙江大学软件学院 概述 "编译原理"课程是计算机专业中一门重要 ...

  • 基于二叉树的算术表达式计算与实现
  • 科技教育创新 Education DOI:10.3969/j.issn.1001-8972.2012.13.135 中国科技信息2012年第13期 CHINA SCIENCE AND TECHNOLOGY INFORMATION Jul.2012 基金项目:高职高专计算机类专业2012年度规划课题( ...

  • 后缀表达式计算
  • 后缀表达式计算: #include #include #include #include using namespace std; templateclass Stack; templateclass Node{ T info; Node*link; public: Node(T data=0,No ...

  • 四则运算c++实现
  • 一.需求分析 1. 利用二叉树后序遍历来实现表达式的转换,同时可以使用实验3的结果来求解后缀表达式的值. 2. 输入输出格式: 输入:在字符界面上输入一个中缀表达式,回车表示结束. 输出:如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开:如果不正确 ...

  • 计算机系统第三章答案
  • 习 题 3. 参考答案: (1)后缀:w , 源:基址+比例变址+偏移, 目:寄存器 (2)后缀:b , 源:寄存器, 目:基址+偏移 (3)后缀:l , 源:比例变址, 目:寄存器 (4)后缀:b , 源:基址, 目:寄存器 (5)后缀:l , 源:立即数, 目:栈 (6)后缀:l , 源:立即数 ...

  • 计算机导论第3章 程序设计语言(答案)
  • 第3章 程序设计语言 习 题 一.选择题 1. A 2. A 3. D 4. A 5. AB 6. C 7.D 8.C 9.D 10. D 11.ABCD 12.B 13.A 14.ABD 二.简答题 1.简述程序的概念. 答:一个程序就是能够实现特定功能的一组指令序列的集合.或者程序=算法+数据结 ...

  • c语言运算符号
  • c语言运算符号 1级优先级 左结合 () 圆括号 [] 下标运算符 -> 指向结构体成员运算符 . 结构体成员运算符 ++ 后缀增量运算符 -- 后缀增量运算符 2级优先级 右结合 ! 逻辑非运算符 ~ 按位取反运算符 ++ 前缀增量运算符 -- 前缀增量运算符 - 负号运算符 (类型) 类型 ...

  • 2017年浙江信息技术高考知识点总结
  • 考试知识点总结: 一.概念 1.信息:指数据.信号.消息中所包含的意义.信息的特征:(1)载体依附性(2)可加工可处理性(3)可存储性(4)可传递性和共享性(5)时效性(6)真伪性(7)价值性 2.算法的特征: (1)有穷性(2)确定性(3)能行性(4)有0个或多个输入(5)有一个或多个输出 3.算 ...