长沙理工大学数据结构栈的实现及应用算术表达式求值实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
年级班号学号姓名
实验名称: 栈的实现及其应用:算术表达式的计算实验日期2016年12月2日
计算机科学与技术系
2016年制
一、实验环境
32位操作系统下的Window平台Microsoft Visual C++
二、实验目的
掌握栈的实现及使用
三、实验内容
1、实现栈的存储结构
2、实现栈的基本操作的有关算法
3、利用栈解决*算术表达式求值问题
四、数据结构与算法思想描述
顺序读取中缀表达式:
1、当遇到数字时,将数字入数字栈
2、当遇到操作符时,与操作符栈栈顶比较:
If(当前操作符优先级大于操作符栈栈顶的优先级)
If(非”)”操作符)
将当前操作符进操作符栈;
Else
While(操作符栈栈顶不等于”(“)
取操作符栈栈顶及数字栈的两个数进行运算,并将结果压入数字栈;
Else
If(非(“操作符)
While(操作符栈栈顶不等于”(“)
取操作符栈栈顶及数字栈的两个数进行运算,并将结果压入数字栈;
Continue;(直到当前操作符比栈顶操作符优先级大)
Else
将当前操作符进操作符栈;
3、While(操作符栈非空)
操作符栈栈顶及数字栈的两个数进行运算,并将结果压入数字栈;
4、在数字栈取最后结果并输出。
五、程序清单
//10*8^2+16、3+5*(5、2*5+3、01)/4-(-10)+0、1000060+4、00416-40 = 666、666666 //100+(-100)-(-10^2) = 100
//(((2016-2017+(((2015-2014)))))) = 0
//-1+(((((((((1^0))))))))+100%10^2 = 0
#include
#include
#include
#include
#include
#include
using namespace std;
const int MAX = 105;
typedef double Type;
typedef struct
{
Type TypeStack[MAX];
char charStack[MAX];
int TypeTop, charTop;
}Stack;
//初始化栈
void InitStack(Stack *S)
{
S->charTop = S->TypeTop = 0; }
//判断charStack就是否为空
bool IsEmpty_Char(Stack S)
{
return S、charTop == 0;
}
//判断TypeStack就是否为空bool IsEmpty_Type(Stack S)
{
return S、TypeTop == 0;
}
//判断charStack就是否为满
bool IsFull_Char(Stack S)
{
return S、charTop == MAX; }
//判断TypeStack就是否为满
bool IsFull_Type(Stack S)
{
return S、TypeTop == MAX;
}
void Push_Char(Stack *S, char ch)
{
//charStack不为满则入栈,否则输出提示
if(!IsFull_Char(*S))
S->charStack[S->charTop++] = ch;
else
cout << " The CharStack Is Full! " << endl; }
void Push_Type(Stack *S, Type a)
{
//TypeStack不为满则入栈,否则输出提示
if(!IsFull_Type(*S))
S->TypeStack[S->TypeTop++] = a;
else
cout << " The TypeStack Is Full! " << endl; }
char Pop_Char(Stack *S)
if(!IsEmpty_Char(*S))
{
S->charTop--;
return S->charStack[S->charTop];
}
else
cout << " The CharStack Is Empty! " << endl;
return -1;
}
Type Pop_Type(Stack *S)
{
if(!IsEmpty_Type(*S))
{
S->TypeTop--;
return S->TypeStack[S->TypeTop];
}
else
cout << " The TypeStack Is Empty! " << endl;
return -1;
}
char Top_Char(Stack S)
{
if(!IsEmpty_Char(S))