ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:85.27KB ,
资源ID:7409987      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7409987.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构栈1.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构栈1.docx

1、数据结构栈1 大学数据结构课程实验报告课程名称:数据结构班级:软件1011实验成绩:指导教师: 姓名: 实验项目名称:数据结构-栈学号:上机实践日期:一、目的理解栈数据结构及其应用;理解递归及其应用二、实验内容1 栈的类定义2 顺序栈的类定义、实现与测试;链栈的类定义、实现与测试3 栈的应用1(可使用顺序栈或链栈完成):实现括号匹配测试如下表达式:”()()” 及”()”三、实验使用环境VC+ 6.0控制台程序四、实验关键代码与结果展示(部分截图)1、栈的类定义:const int maxSize=50;templateclass Stack public: Stack(); virtual

2、Stack(); virtual void Push(const T& x)=0; virtual bool Pop(T& x)=0; virtual bool getTop(T& x)const=0; virtual bool IsEmpty() const =0; virtual bool IsFull() const = 0; virtual int getSize() const = 0;2、顺序栈的类定义、实现与测试:#include#include#includestdlib.h templateclass SeqStack public: SeqStack(int sz=50);

3、 SeqStack()delete elements; void Push(const T& x); bool Pop(T& x); bool getTop(T& x)const; bool IsEmpty()constreturn (top=-1)?true:false; bool IsFull()constreturn (top=maxSize-1)?true:false; int getSize()constreturn top+1; void MakeEmpty()top=-1; bool InPut(); bool OutPut()const;private: T *elements

4、; int top; int maxSize; void overflowProcess();templateSeqStack:SeqStack(int sz):top(-1),maxSize(sz) elements=new TmaxSize; assert(elements!=NULL); template void SeqStack:overflowProcess() int stackIncreament=maxSize; T *newArray = new TmaxSize + stackIncreament; if(newArray = NULL)cerr存储分配失败!endl;e

5、xit(1); for(int i = 0;i=top;i+)newArrayi=elementsi; maxSize=maxSize+stackIncreament; delete elements; elements=newArray; templatebool SeqStack:Pop(T &x) if(IsEmpty()=true)return false; x=elementstop-; return true; templatevoid SeqStack:Push(const T &x) if(IsFull()=true)overflowProcess(); elements+to

6、p=x; templatebool SeqStack:getTop(T &x)const if(IsEmpty()=true)return false; x=elementstop; return true; templatebool SeqStack:InPut() T val; cinval; Pop(val); return true; templatebool SeqStack:OutPut()const coutelementstopendl; return true;测试:#include #includeSeqStack.h void main() SeqStack seq(10

7、);int m;for(int i=0;i5;i+) coutm; seq.Push(m); /coutseq.getTop(m)endl; int t=seq.getSize(); cout当前栈内共有元素:tendl; seq.Pop(m); t=seq.getSize(); cout执行Pop()后栈内元素个数为:tendlendl; /seq.Push(x); cout请输入InPut()的val:; seq.InPut(); t=seq.getSize(); cout执行InPut()后栈内元素个数为:tendlendl; cout执行OutPut()后栈顶元素为:; seq.Out

8、Put();3、链栈的类定义、实现与测试:#includeSeqStack.htemplatestruct LinkNode T data; LinkNode *link; LinkNode(LinkNode *ptr = NULL)link = ptr; LinkNode(T item,LinkNode *ptr)data = item;link=ptr;templateclass LinkedStack public: LinkedStack():top(NULL) virtual LinkedStack()makeEmpty(); void Push(const T& x); bool

9、Pop(T& x); bool getTop(T& x)const; bool IsEmpty()constreturn(top=NULL)?true:false; int getSize(); void makeEmpty(); friend ostream& operator(ostream& os,SeqStack& s);private: LinkNode *top;templatevoid LinkedStack:makeEmpty() LinkNode *p; while(top!=NULL) p=top;top=top-link;delete p;templatevoid Lin

10、kedStack:Push(const T& x) top = new LinkNode(x,top); /assert(top!=NULL);templatebool LinkedStack:Pop(T& x) if(IsEmpty()=true) return false; struct LinkNode *p=top; top = top-link; x=p-data; delete p; return true;templatebool LinkedStack:getTop(T& x)const if(IsEmpty()=true) return false; x=top-data;

11、return true;templateint LinkedStack:getSize() LinkNode *p = top;int k = 0; while(top!=NULL) top = top-link;k+; return k;templateostream& operator(ostream& os,SeqStack& s) os栈中元素个数=s.getSize()endl; LinkNode *p = S.top; int i = 0; while(p!=NULL) os+i:dataendl;p=p-link; return os; 测试:#include #includeL

12、inkedStack.hvoid main() LinkedStack lsk; int x=2; lsk.Push(x); x=3; lsk.Push(x); int t = lsk.getSize();cout把2和3压栈后链栈内的元素个数为:tendlendl; lsk.makeEmpty(); t = lsk.getSize(); cout清空栈内元素后,栈内元素个数为:tendlendl; cout把1,3,5压栈进入栈内endl; x=1;lsk.Push(x);x=3;lsk.Push(x);x=5;lsk.Push(x); cout依次弹出栈内元素:endl; while(ls

13、k.IsEmpty()=false) lsk.Pop(x);coutx ; coutendlendl;4、实现括号匹配:#includeSeqStack.h#includeclass kuohao public: void PrintMatchedPairs(char *expression) SeqStack s(50); char j; int length=strlen(expression); for(int i=1;i=length;i+) if(expressioni-1=(|expressioni-1=|expressioni-1=) s.Push(expressioni-1);

14、 else if(expressioni-1=)|expressioni-1=|expressioni-1=) if(s.Pop(j)=true) if(expressioni-1=)&j=() coutj与expressioni-1匹配endl;j= ; else if(expressioni-1=&j=) coutj与expressioni-1匹配endl;j= ; else if(expressioni-1=&j=) coutj与expressioni-1匹配endl;j= ; else cout没有与第i-1个右括号匹配的左括号!endl; while(s.IsEmpty()=fals

15、e) s.Pop(j); cout没有与j左括号相匹配的右括号!endl; private: /const int maxLength=100;测试:#include #includeSeqStack.h#include kuohao.hvoid main() kuohao k; cout表达式1测试“()()”:endlendl; char *e1=()(); k.PrintMatchedPairs(e1); coutendlendl表达式2测试“()”:endlendl; char *e2=(); k.PrintMatchedPairs(e2);六、附录参考数据结构(用面向对象方法与C+语

16、言描述)附上SeqStack.h代码:#include#include#includestdlib.h templateclass SeqStack public: SeqStack(int sz=50); SeqStack()delete elements; void Push(const T& x); bool Pop(T& x); bool getTop(T& x)const; bool IsEmpty()constreturn (top=-1)?true:false; bool IsFull()constreturn (top=maxSize-1)?true:false; int ge

17、tSize()constreturn top+1; void MakeEmpty()top=-1; /void PrintMatchedPairs(char *expression); bool InPut(); bool OutPut()const;private: T *elements; int top; int maxSize; void overflowProcess();templateSeqStack:SeqStack(int sz):top(-1),maxSize(sz) elements=new TmaxSize; assert(elements!=NULL); templa

18、te void SeqStack:overflowProcess() int stackIncreament=maxSize; T *newArray = new TmaxSize + stackIncreament; if(newArray = NULL)cerr存储分配失败!endl;exit(1); for(int i = 0;i=top;i+)newArrayi=elementsi; maxSize=maxSize+stackIncreament; delete elements; elements=newArray; templatebool SeqStack:Pop(T &x) i

19、f(IsEmpty()=true)return false; x=elementstop-; return true; templatevoid SeqStack:Push(const T &x) if(IsFull()=true)overflowProcess(); elements+top=x; templatebool SeqStack:getTop(T &x)const if(IsEmpty()=true)return false; x=elementstop; return true; templatebool SeqStack:InPut() T val; cinval; Pop(val); return true; templatebool SeqStack:OutPut()const coutelementstopendl; return true;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1