实验报告顺序栈公用问题.docxVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验报告顺序栈公用问题

实验 顺序栈公用问题 姓名:xxx 班级:xxx) 学号:16130xxxxx 实验时间:2017 .10 .21 问题描述 顺序栈公用是指多个栈公用一个足够大的存储空间,利用栈的动态特性使其存储空间互补。不涉及中设计两个栈 S1、S2共享一个存储区域V[n].定义一个共用栈类,数据成员应包括栈元素,两个栈顶等;函数成员应包括入栈、出栈取栈顶元素等基本操作。 2 数据结构设计 一个栈包括其位置指针,头指针、栈的大小。为此建立起数据结构如下 class SqStack{ private: int * base1; //第一个栈 int * base2; //第二个栈 int top1; //第一个栈头指针 int top2; //第二个栈头指针 int stacksize; //栈大小 此处两个栈公用一个存储空间,我的想法是将两个头指针分别置于一组固定的存储空间的两端,依次移动实现公用一组存储空间 3.算法设计 (1)创建栈 由于要求用栈存储数据,而此处使用两个栈,所以在这里创建两个栈 SqStack::SqStack(int m) //构造函数定义 { //创建新栈 base1=new int[m]; base2=new int[m]; if(base1==NULL) //判断栈是否创建成功 失败则退出 { cout栈(1)创建失败,退出!endl; exit(1); } if(base2==NULL) { cout栈(2)创建失败退出!endl; exit(1); } stacksize=m; //栈的大小定义为m 两个栈公用这一组空间 top1=-1; top2=stacksize+1; //两个栈头指针定义 } (2)栈中元素插入 因为我们采用的是两个不同的栈,指针位置不同,而且头指针的移动方式也不一样,所以,我们插入时 分不同方式插入 栈1: Step1:判断栈1是否有空间插入 if(top1+1==top2) { cout栈满endl; exit(1); } Step2:指针后移,插入待插入元素 top1 ++; base1[top1]=x; couttop1 :top1endl; } 栈2: Step1:判断栈2是否有空间插入 if(top2-1==top1) { cout栈满endl; exit(1); } Step2:指针前移,插入待插入元素 top2--; base2[top2]=x; int n=-1; n++; couttop2 nendl; } (3)元素输出 同样是两个栈 两个栈元素输出时,指针移动方向不一样 栈1 Step1:判断是否栈空 int x; if(top1==-1) throw栈空,不能出栈; Step2:栈不空 输出栈顶元素 头指针下移 else x=base1[top1--]; couttop1=top1endl; return x; 栈2: Step1:判断是否栈空 int x; if(top2==stacksize+1) throw栈空,不能出栈; step2:栈不空 输出栈顶元素 头指针上移 else x=base2[top2++]; couttop2=top2endl; return x; (4)取栈顶元素 取栈顶元素相对来说是比较简单的一个操作 只需设定一个值 将栈顶元素的值赋给这个数就可以了 Step1:判断栈顶是否有元素 if (top1==-1)throw 栈空,栈顶无元素; step2:取出栈顶元素 return base1 [top1]; 上述是栈1 的取值方式而栈2的取值方式有所不同 if (top2==stacksize+1)throw 栈空,栈顶无元素; return base2 [top2]; 同样是两步走只是指针移动方式有所区别 (5)判断是否栈空

文档评论(0)

zijingling + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档