长沙理工大学数据结构栈的实现及应用算术表达式求值实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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))

相关文档
最新文档