实验2-栈与队列的应用实验报告

本文由用户“safweafaesfewasesrew”分享发布 更新时间:2021-10-04 18:59:51 举报文档

以下为《实验2-栈与队列的应用实验报告》的无排版文字预览,完整格式请下载

下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

湖南应用***实验(训)报告

课程名称

数据结构与算法

课程代码

***04

成绩评定





学 院

信息***

专业

物联网工程

指导老师

聂某某



学生姓名

张宇

学号

***8

班级

物联20103



实验地点

实验楼101

实验日期

2021年 4月 7日



小组成员

无



实验类型

□演示性  □验证性    □综合性    设计研究    □其它



实验项目名称

栈与队列的应用



一、实验目的

1、掌握栈与队列的定义及实现;

2、掌握利用栈与队列求解算术表达式的方法。



二、实验主要仪器设备

1. 硬件:计算机

2. 软件:Windows 7,VC++6.0



三、实验内容及要求

将中缀表达式转化成后缀表达式存储在队列中,然后利用后缀表达式求表达式的值并输出。

将中缀表达式转化成后缀的思想:

1、创建一空队列,用来存放后缀表达式,建立并初始化操作符某某OPTR,将表达式起始符“#”压入OPTR栈。

2、依次读入表达式中每个字符ch,循环执行(3)至(5),直至求出整个表达式转换完毕。

3、取出OPTR的栈顶元素,当OPTR的栈顶元素和当前读入的字符ch均为“#”时,整个中缀表达式转换完毕。

4、若ch不是运算符,则进队,读入下一字符ch。

5、若ch是运算符,则根据OPTR的栈顶元素和ch的优先权比较结果,做不同的处理。

① 若是小于,则ch压入OPTR栈,读入下一字符ch。

② 若是大于,则弹出OPTR栈顶的运算符,进队。

③ 若是等于,则OPTR的栈顶元素是“(”且ch是“)”,这时弹出OPTR栈顶的“(”,相当于去掉括号,然后读入下一字符ch。

对后缀表达式进行计算的具体步骤为:

建立一个栈S从左到右读后缀表达式,读到数字就将它转换为数值压入栈S中,读到运算符则从栈中依次弹出两个数分别到Y和X,然后以“X运算符Y”的形式计算出结果,再压进栈S中。如果后缀表达式未读完,重复执行上面过程,最后输出栈顶的数值即可结束。



四、实验过程(包括算法流程图(或原理图、电路图)、程序源码、运行结果图等)

/

源代码:#include

#include

#include

#include

#include

#include

#define MAX 100

using namespace std;

//设置优先级(注意默认操作数的优先级最高,即其不需要进栈,进栈的都是运算符)

map p;

//一些初始化********************************************

struct Node{

double num;//操作数

char op;//操作符

bool flag;//true表示操作数,false表示操作符

};

typedef struc 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 calculate(){

double num_a, num_b;//操作数a,b

node cur, temp;

while (!q.empty()){//后缀队列非空

cur = q.front();//记录队首元素

q.pop();

if (cur.flag == true){//是操作数进入栈

s1.push(cur);

}

else{//是操作符就运算

num_b = s1.top().num;

s1.pop();//弹出第二操作数

num_a = s1.top().num;

s1.pop();//弹出第一操作数

temp.flag = true;

if (cur.op == '+'){

temp.num = num_a + num_b;

}

else if (cur.op == '-'){

temp.num = num_a - num_b;

}

else if (cur.op == '*'){

temp.num = num_a * num_b;

}

else{

temp.num = num_a / num_b;

}

s1.push(temp);//把计算后的结果再次压栈

}

}

return s1.top().num;

}

//*************************************************************

int main()

{

string str;

p['+'] = p['-'] = 1;//通过hashmap赋值

p['*'] = p['/'] = 2;

cin >> str;

change(str);

//*****************************************************

//中缀转后缀

/*while (!q.empty()){

cur = q.front();

if (cur.flag == true) cout 请点击下方选择您需要的文档下载。

  1. C语言程序设计 实训报告册
  2. 选择结构程序设计实验报告
  3. 计算机程序设计(C)数据类型及运算实验报告
  4. 实验报告参考内容
  5. c语言实验报告3- 选择结构
  6. 实验报告表 5  1进程同步实验观察结果记录表
  7. 课程设计报告
  8. 《选择结构语句》课件PPT
  9. 空气中氧气含量测定周测习题

以上为《实验2-栈与队列的应用实验报告》的无排版文字预览,完整格式请下载

下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

图片预览