数据结构实验报告实验三.docx
- 文档编号:24469146
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:14
- 大小:30.77KB
数据结构实验报告实验三.docx
《数据结构实验报告实验三.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告实验三.docx(14页珍藏版)》请在冰豆网上搜索。
数据结构实验报告实验三
深圳大学实验报告
课程名称:
数据结构实验与课程设计
实验项目名称:
实验三:
栈的应用
学院:
计算机与软件学院
专业:
指导教师:
蔡平
报告人:
文成学号:
2011150259班级:
5
实验时间:
2012-10-08
实验报告提交时间:
2012-10-20
教务部制
一、实验目的与要求:
目的:
1.掌握线性表的基本原理
2.掌握线性表地基本结构
3.掌握线性表地创建、插入、删除、查找的实现方法
要求:
1.熟悉C++语言编程
2.熟练使用C++语言实现线性表地创建、插入、删除、查找的实现方法
二、实验内容:
ProblemA:
数据结构——实验3——STL堆栈对象的例程
TimeLimit:
1SecMemoryLimit:
128MB
Submit:
103Solved:
85
[Submit][Status][WebBoard]
Description
掌握C++中STL自带的堆栈对象应用。
演示堆栈对象的各种操作,以字符串的逆序输出为例子
输入一个字符串,按输入顺序将字符压入堆栈,然后根据堆栈后进先出的特点,做逆序输出
Input
第一行输入t,表示有t个测试实例
第二起,每一行输入一个字符串,注意字符串不要包含空格
Output
每行逆序输出每一个字符串
SampleInput
2
abcdef
aabbcc
SampleOutput
fedcba
ccbbaa
HINT
ProblemB:
数据结构——实验3——堆栈应用之括号匹配
TimeLimit:
1SecMemoryLimit:
128MB
Submit:
365Solved:
120
[Submit][Status][WebBoard]
Description
处理表达式过程中需要对括号匹配进行检验,括号匹配包括三种:
“(”和“)”,“[”和“]”,“{”和“}”。
例如表达式中包含括号如下:
()[()([])]{}
123456789101112
从上例可以看出第1和第2个括号匹配,第3和第10个括号匹配,4和5匹配,6和9匹配,7和8匹配,11和12匹配。
从中可以看到括号嵌套的的情况是比较复杂的,使用堆栈可以很方便的处理这种括号匹配检验,可以遵循以下规则:
1、当接收第1个左括号,表示新的一组匹配检查开始;随后如果连续接收到左括号,则不断进堆栈。
2、当接受第1个右括号,则和最新进栈的左括号进行匹配,表示嵌套中1组括号已经匹配消除
3、若到最后,括号不能完全匹配,则说明输入的表达式有错
Input
第一行输入一个t,表示下面将有t组测试数据。
接下来的t行的每行输入一个表达式,表达式只考虑英文半角状态输入,无需考虑中文全角输入
Output
对于每一行的表达式,检查括号是否匹配,匹配则输入ok,不匹配则输出error
SampleInput
2
(a+b)[4*5+(-6)]
[5*8]/{(a+b)-6
SampleOutput
ok
error
HINT
算法流程
1、初始化,i=0,建立堆栈,栈为空
2、输入表达式,建立指针指向表达式的头部
3、读入表达式的第i个字符
4、如果第i个字符是左括号,入栈
5、如果第i个字符是右括号,检查栈顶元素是否匹配
A.如果匹配,弹出栈顶元素
B.如果不匹配,报错退出
6、i++,指向下一个字符,是否已经表达式末尾
A.未到末尾,重复步骤3
B.已到达末尾
a.堆栈为空,输出ok
b.堆栈不为空,输出error
3、实验步骤与过程:
源代码:
A:
#include
#include
#include
#include
usingnamespacestd;
constintMaxStackSize=100;
typedefcharDateType;
classSeqStack
{
private:
DateTypedate[MaxStackSize];//堆栈
inttop;//栈顶指示器
public:
SeqStack();//构造函数
~SeqStack();//析构函数
intPush(constDateTypeitem);//入栈
DateTypePop();//出栈
DateTypeGetTop()const;//取栈顶数据元素
intNotEmpty()const;//堆栈非空否
};
SeqStack:
:
SeqStack()//构造函数
{
top=0;
}
SeqStack:
:
~SeqStack()//析构函数
{
}
intSeqStack:
:
Push(constDateTypeitem)//入栈
//把元素item入栈
{
if(top==MaxStackSize)//堆栈满时出错退出
{
cout<<"堆栈已满"< exit(0); } date[top]=item;//先存储item top++;//然后top加1 return1; } DateTypeSeqStack: : Pop()//出栈 //出栈并返回栈顶元素 { if(top==0)//堆栈空时出错退出 { cout<<"堆栈已空"< exit(0); } top--; returndate[top]; } DateTypeSeqStack: : GetTop()const//取栈顶数据元素 //取当前栈顶数据元素并返回 { if(top==0)//堆栈空时出错退出 { cout<<"堆栈已空"< exit(0); } returndate[top-1];//返回当前栈顶元素 } intSeqStack: : NotEmpty()const { return(top! =0); } intFunc(charexp[],intn) { SeqStackmyStack;//定义链式堆栈 inti; for(i=0;i myStack.Push(exp[i]);//入栈 for(i=0;i { cout< myStack.Pop(); if(! myStack.NotEmpty()) break; } cout< return0; } intmain() { inttestNo,i; charsample[80]; cin>>testNo;//输入测试次数 cin.get();//消除上次输入的回车符号 for(i=0;i { cin.getline(sample,80);//输入样本数据 Func(sample,strlen(sample)); } return0; } B: #include usingnamespacestd; classList { private: int*elem;//数组元素 intlistsize;//顺序表最大长度 intlength;//顺序表当前长度 public: List(intsize);//构造函数 ~List();//析构函数 intListLength();//获取顺序表的实际长度 intListInsert(inti,inte);//插入一个元素 intListDelete(inti);//删除一个元素,返回删除的元素 intGetElem(inti);//获取一个元素,返回元素值 intswap(inta,intb);//交换二个元素 }; List: : List(intsize)//构造函数 { listsize=size; length=0; elem=newint[listsize]; } List: : ~List()//析构函数 { delete[]elem; } intList: : ListLength()//获取顺序表的实际长度 { returnlength; } intList: : ListInsert(inti,inte)//插入一个元素 { if(length==listsize) return0;//顺序表已满 if(i<1||i>length+1) return0;//i值不合法 if(i==length+1) elem[length]=e; else for(intj=length;j>i-1;j--)//位置i后面的元素全部后移一位 elem[j]=elem[j-1]; elem[i-1]=e; length++; return1; } intList: : ListDelete(inti)//删除一个元素,返回删除的元素 { if(length==0) return0; if(i<1||i>length) return0; inttemp=elem[i-1]; for(intj=i-1;j elem[j]=elem[j+1]; length--; returntemp; } intList: : GetElem(inti)//获取一个元素,返回元素值 { if(i<1||i>length) return0; returnelem[i-1]; } intList: : swap(inta,intb)//交换二个元素 { if(a<1||a>length||b<1||b>length||a==b) { cout<<"error";//输入不合法,则报错 return0; } else { inttemp=elem[a-1];//交换元素 elem[a-1]=elem[b-1]; elem[b-1]=temp; } return1; } intmain() { inti,len,temp; ListmyList(100);//创建一个顺序表,最大长度为100 cin>>len; for(i=1;i { cin>>temp; myList.ListInsert(i,temp); } for(i=1;i cout< cout< intx,y;//输入交换元素的位置 cin>>x>>y; if(myList.swap(x,y))//交换这二个元素 { for(i=1;i cout< cout< } cin>>x>>y; if(myList.swap(x,y))//交换这二个元素 { for(i=1;i cout< cout< } return0; } 四、实验结果及数据处理分析: A: 实验基本达到实验要求 B: 实验基本达到实验要求 五、实验结论与体会: 从这个实验中我学会了栈一些应用,例如插入、查找和删除。 要求挺简单的,就是如此简单的进栈、出栈等。 程序写完了,但是还发现程序中还有许多不完善的地方、不严谨的地方,如异常处理,在不按正确输入格式输入时,会出现程序错误或死了的情况。 指导教师批阅意见: 成绩评定: 指导教师签字: 年月日 备注: 注: 1、报告内的项目或内容设置,可根据实际情况加以调整和补充。 2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)