实验一 堆栈

  • 格式:doc
  • 大小:39.50 KB
  • 文档页数:2

下载文档原格式

  / 2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一堆栈

一、实验目的:深入了解堆栈的基本特征,掌握顺序堆栈类的实现方法,掌握在实际问题背景下灵活运用堆栈类的方法。

二、实验内容:

第一部分:验证部分

第一步:建立一个工作文件夹,自己命名,如命名为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-”。

计算一个后缀表达式,算法上比计算一个中缀表达式简单的多。这是因为表达式中即无括号又无优先级的约束。具体做法:只使用一个对象栈,当从左向右扫描表达式时,每遇到一个操作数就送入栈中保存,每遇到一个运算符就从栈中取出两个操作数进行当前的计算,然后把结果再入栈,直到整个表达式结束,这时送入栈顶的值就是结果。为了简化问题,限定运算数的位数仅为一位。

栈中状态变化情况:

图后缀表达式求值过程

根据上述算法,利用第一部分提供的堆栈类,编写主函数,实现后缀表达式的计算功能。