实验一 堆栈
- 格式:doc
- 大小:39.50 KB
- 文档页数:2
实验一堆栈
一、实验目的:深入了解堆栈的基本特征,掌握顺序堆栈类的实现方法,掌握在实际问题背景下灵活运用堆栈类的方法。
二、实验内容:
第一部分:验证部分
第一步:建立一个工作文件夹,自己命名,如命名为data structure,在该文件夹下建立如下三个文件夹,分别命名为C,stack,ch2,下载文件UTILITY.H、UTILITY.CPP,存放在文件夹C中;下载文件STACK.H、STACK.CPP,存放于文件夹stack中。
第二步:下载文件revline.cpp,存放于文件夹ch2中,运行该程序,观察运行结果,了解该程序的功能。该程序对应教材53页的代码,程序读入一个整数n和n个浮点数,然后以相反的顺序输出。程序依赖C++中的标准模板库(STL)提供的一个类来实现堆栈。
第三步:下载文件stackdemo.cpp,存放于文件夹ch2中,运行该程序,观察运行结果,了解该程序的功能。该程序的功能同程序revline.cpp,采用的是自定义的堆栈类,即STACK.H、STACK.CPP两个文件。建议在运行程序,观察实验结果之后,阅读上述两个文件,了解具体的实现细节。
第四步:下载文件brackers.cpp,存放于文件夹ch2中,运行该程序,观察运行结果,了解该程序的功能。该程序对应教材71页的代码,实现括号匹配的检测,该程序使用的是自定义的堆栈类。运行程序,观察实验结果。输入不同形式的括号组合,看运行结果是否正确。在此基础上,对程序做修改,增加如下功能:当括号检测结果为匹配时,输出提示信息。
注:如果下载文件存放的文件夹为自己另外设置的,注意代码中的#include部分要做相应的修改。
第二部分:设计部分
第一题:利用第一部分提供的堆栈类,编写主函数,实现将数制转换的功能,要求将输入的十进制数据,转换成二进制输出。
第二题:后缀表达式求值
为了处理方便,编译程序常把中缀表达式首先转换成等价的后缀表达式,后缀表达式的运算符在运算对象之后。在后缀表达式中,不在引入括号,所有的计算按
运算符出现的顺序,严格从左向右进行,而不用再考虑运算规则和级别。中缀表达式“3*2^(4+2*2-1*3)-5 ”的后缀表达式为:“32422*+13*-^*5-”。
计算一个后缀表达式,算法上比计算一个中缀表达式简单的多。这是因为表达式中即无括号又无优先级的约束。具体做法:只使用一个对象栈,当从左向右扫描表达式时,每遇到一个操作数就送入栈中保存,每遇到一个运算符就从栈中取出两个操作数进行当前的计算,然后把结果再入栈,直到整个表达式结束,这时送入栈顶的值就是结果。为了简化问题,限定运算数的位数仅为一位。
栈中状态变化情况:
图后缀表达式求值过程
根据上述算法,利用第一部分提供的堆栈类,编写主函数,实现后缀表达式的计算功能。