实验报告
课程名称_______数据结构实验__________________ 实验项目___ 栈和队列的基本操作与应用____ 实验仪器_____________________________________
系别 ___ 计算机学院_______________ 专业 __________________
班级/学号______ _________
学生姓名_____________________ __
实验日期__________________
成绩_______________________
指导教师____ __________________
一、实验内容:
本次实验主要内容是表达式求值,主要通过栈和队列来编写程序,需要实现整数运算其中需要实现的功能有加减乘除以及括号的
运用,其中包含优先级的判断。
二、设计思想
1.优先级中加减、乘除、小括号、以及其他可以分组讨论优先
级
2.优先级关系用“>”“<”“=”来表示三种关系
3.为实现运算符优先使用两个栈:OPTR 运算符栈与OPND操作
符栈
4.运用入栈出栈优先级比较等方式完成运算
三、主要算法框架
1.建立两个栈InitStack(&OPTR);
InitStack(&OPND);
2.Push“#”到 OPTR
3.判断优先级做入栈出栈操作
If“<” Push(&OPTR, c);
If“=” Pop(&OPTR, &x)
If“>” Pop(&OPTR, &theta);
Pop(&OPND, &b);
Pop(&OPND, &a);
Push(&OPND, Operate(a, theta, b));
四、调试报告
遇到的问题与解决
1.C语言不支持取地址符,用*S代替&S来编写代码
2.一开始没有计算多位数的功能只能计算一位数,在几个中间
不含运算符的数字中间做p = p*10+c运算。
代码如下:p = p * 10 + c - '0';
c = getchar();
if (In(c)) {
Push(&OPND, p);
p = 0;
}
主要算法改进设想:
1.可以用数组储存优先级
2.可以用C++编写,C++支持取地址符&。
五、实验总结
本次实验我主要运用了栈的知识,运用了栈的初始化,入栈出栈等栈的相关知识。
通过表达式求值的实验:判断优先级,依据优先级以及栈同入同出的特点配合入栈出栈以及基本运算来运算复杂表达式。
我认为本实验可增加小数功能和图形界面做成计算器。