- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构实验报告
实验名称: 实验2——栈和队列
学生姓名:
班 级:
班内序号:
学 号:
日 期:
实验要求
1、实验目的: 进一步掌握指针、模板类、异常处理的使用
掌握栈的操作的实现方法
掌握队列的操作的实现方法
学习使用栈解决实际问题的能力
学习使用队列解决实际问题的能力
2、实验内容:
根据栈和队列的抽象数据类型的定义,按要求实现一个栈或一个队列。
要求:
实现一个共享栈
实现一个链栈
实现一个循环队列
实现一个链队列
编写测试main()函数测试线性表的正确性
二、程序分析
2.1 存储结构
顺序栈、链栈和顺序队列
顺序栈 链栈 顺序队列
2.2 关键算法分析
A、实现一个共享栈:
a、伪代码实现
入栈操作:如果栈满,则抛出上溢异常;
判断是插在栈1还是栈2,如果在栈1插入,则栈顶指针top1加1,在top1处填入x,如果在栈2插入,则栈顶指针top2加1,在top2处填入x。
出栈操作:如果栈空,则抛出下溢异常;
判断是栈1出栈还是栈2,如果是栈1,则输出栈1栈顶元素,并且top1减1,如果是栈2,则输出栈2栈顶元素,并且top2加1。
得到栈顶元素操作:如果栈空,则抛出下溢异常;
判断是栈1出栈还是栈2,如果是栈1,则输出栈1栈顶元素,如果是栈2,则输出栈2栈顶元素。
b、算法实现:
void shareseqstack::push(int x,int pushnumber)//进栈操作
{if(top1+1==top2)//异常处理
throw 上溢;
if(pushnumber==1)//判断栈1还是栈2
data[++top1]=x;
if(pushnumber==2)
data[--top2]=x;
}
void shareseqstack::pop(int popnumber)//出栈操作
{if(popnumber==1) //异常处理
{ if(top1==-1) throw 下溢;
else coutdata[top1--]endl;
}
if(popnumber==2) //异常处理
{if(top2==seqstack) throw 下溢;
else coutdata[top2++]endl;
}
}
void shareseqstack::gettop(int getnumber)//得到栈顶元素
{if(getnumber==1) //判断栈1还是栈2
{if(top1==-1) throw 下溢; //异常处理
coutdata[top1]endl;}
if(getnumber==2)
{if(top2==seqstack) throw 下溢;
coutdata[top2]endl;
}
}
B、实现一个链栈
插入 删除
a伪代码实现
入栈:生成新结点,对新结点赋值,新结点的指向原栈顶指针,修改栈顶指针为新结点。
出栈:判断若为空栈抛出下溢异常,保存栈顶元素,建立新结点,保存栈顶指针,修改栈顶指针为原栈顶指针的下一个结点,删除栈顶指针并输出栈顶元素。
b、算法实现:
void linkstack::push(int x)//进栈操作
{Node*p=new Node;//定义新结点
p-data=x;
p-next=top;
top=p;
}
void linkstack::pop()//出栈操作
{if(empty()) throw 下溢;//异常处理
int x=top-data;
Node*p=new Node; //定义新结点
p=top;
top=top-next;
delete p;
coutx ;
}
void linkstack::gettop()//得到栈顶元素
{if(empty()) throw 下溢;//异常处理
couttop-dataendl;
}
linkstack::~linkstack()//析构
{while(top)
{Node*p=top;
top=top-next;
delete p;
}
}
C、实现一个循环队列
伪代码实现:
入队:判断若为队满,抛出异常,尾指针后移,指向入队元素。
出队:判断若为队空,抛出异常,头指针后移,输出队头元素。
算法实现
void circlequeue::enqueue(int x)//进队操作
{if((rear+1)%queuesize==front) throw 上溢;//异常处理
rear=(rear+1)%queuesize;
data[rear]=x;
}
void circle
您可能关注的文档
最近下载
- 思想政治学科教学新论七章 思想政治学科评价论.ppt VIP
- 2025江西南昌青山湖区城市管理和综合执法局招聘工作人员10人笔试参考题库附答案解析.docx VIP
- 04S519:小型排水构筑物.pdf VIP
- GB50017钢结构设计规范.pdf VIP
- 武汉文化投资发展集团有限公司招聘5名工作人员笔试备考试题及答案解析.docx VIP
- 2023全钒液流电池可靠性评价方法.pdf VIP
- [乐高LEGO 9686动力机械]第14课 摩天轮.pdf VIP
- 英语视听说4英语视听说IV教学大纲.pdf VIP
- 基根-《全球营销(第8版)》英文教辅-第4章.pptx VIP
- 基根-《全球营销(第8版)》英文教辅-第3章.pptx VIP
文档评论(0)