以下为《实验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 请点击下方选择您需要的文档下载。
以上为《实验2-栈与队列的应用实验报告》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。