版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+程序设计实验报告姓名:庹磊学院:计算机智能科学类班级:0401310学号:2013211732时间:2014-2015(2)指导教师:冯潇1题目:(类模板的使用)实现栈数据结构,功能可以包括入栈、出栈、清空栈等动作。2思路:堆栈的定义设计template <class Type>class seqstackpublic: seqstack(); /创建一个空栈 seqstack(int size); /创建一个可以容纳size个元素的栈 seqstack(); /析构函数 bool create(int size); /实际创建一个可以容纳size个元素的栈 void dest
2、roy(); /栈的销毁 bool isempty() const; /确定栈是否为空 bool isfull() const; /确定栈是否已满 bool push(Type &item); /数据进栈 bool pop(); /数据出栈 bool pop(Type &item); /数据出栈,并返回出栈前的栈顶数据 bool gettop(Type &item); /显示当前栈顶元素 void display(); /显示所有数据元素private: Type *stackspace; /指向栈的指针 int stacksize; /栈的大小,当为0时,表示栈没有创
3、建空间 int top; /top栈顶位置,当为-1时,栈为空;功能实现代码/栈的初始化template<class Type> /此语句关键,需注意seqstack<Type>:seqstack() stackspace=NULL; stacksize=0; top=-1;/创建一个空栈template<class Type>seqstack<Type>:seqstack(int size) stackspace=NULL; stacksize=0; top=-1; create(size);/栈的析构函数template<class T
4、ype>seqstack<Type>:seqstack() destroy();/实际栈的创建函数template<class Type>bool seqstack<Type>:create(int size) if(stacksize) /栈已经创建,不能继续创建 return false; if(size<=0) /size的值必须大于0 return false; stackspace=new Typesize; if(!stackspace) /没有申请到存储空间(栈已满) return false; stacksize=size; to
5、p=-1; return true;/销毁栈的函数template<class Type>void seqstack<Type>:destroy() if(stackspace) delete stackspace; stackspace=NULL; top=-1; stacksize=0;/判断栈是否为空template<class Type>bool seqstack<Type>:isempty() const if(!stackspace) return true; return top>=0?false:true;/判断栈是否已满t
6、emplate<class Type>bool seqstack<Type>:isfull() const if(!stacksize) /确定栈是否被创建,没有创建是为已满 return true; return top=stacksize-1?true:false;/进栈函数template<class Type>bool seqstack<Type>:push(Type &item) if(!stackspace) return false; if(isfull() return false; stackspace+top=item
7、; return true;/出栈函数,不返回栈顶元素template<class Type>bool seqstack<Type>:pop() if(empty() return flase; top-; return ture;/出栈函数,但返回栈顶元素template<class Type>bool seqstack<Type>:pop(Type &item) if(isempty() /判断栈是否为空 return false; item=stackspacetop-; return true;/得到栈顶数据元素template&
8、lt;class Type>bool seqstack<Type>:gettop(Type &item) if(isempty() return false; item=stackspacetop; return true;/显示所有数据元素template<class Type>void seqstack<Type>:display() if(stacksize) cout<<"目前栈的所有的数据元素为: " cout<<"栈底是: " for(int i=0;i<=top
9、;i+) cout<<stackspacei<<" " cout<<"栈顶"<<endl; else cout<<"栈尚未建立!"<<endl;主程序void main() seqstack<int> stacknow;/若想输入字符,将此语句中的int改为char即可 char yesno,userchoice='9' int newstacksize,datain,dataout; while(1) if(userchoice=
10、39;9') system("cls"); cout<<"="<<endl <<"顺序栈的基本操作程序"<<endl <<"="<<endl <<"1:创建一个栈"<<endl <<"2:销毁一个栈"<<endl <<"3:数据进栈"<<endl <<"4:数据出栈"<
11、<endl <<"5:显示所有数据元素"<<endl <<"6:读取栈底元素"<<endl <<"7:判断栈是否为空"<<endl <<"8:判断栈是否已满"<<endl <<"9:清屏"<<endl <<"0:退出程序"<<endl; cout<<"="<<endl <<
12、"请输入你的选择: "<<endl; cin>>userchoice; if(userchoice='0') cout<<"程序已经退出,感谢你的使用!"<<endl; exit(0); switch(userchoice) case'1': cout<<"开始创建栈,请输入栈的空间大小 " cin>>newstacksize; if(stacknow.create(newstacksize) cout<<"创
13、建成功,栈的大小是: "<<newstacksize<<endl; else /考虑要全面 cout<<"创建失败!"<<endl; break; case'2': cout<<"你确定要销毁一个栈吗?(若销毁请输入输入(Y/y)" cin>>yesno; if(yesno='Y'|yesno='y') stacknow.destroy(); cout<<"栈已被销毁!"<<endl
14、; break; case'3': cout<<"请输入要入栈数据: " cin>>datain; if(stacknow.push(datain) cout<<"数据 "<<datain<<"已经入栈成功!"<<endl; stacknow.display(); else cout<<"数据 "<<datain<<"进栈失败!"<<endl; break; c
15、ase'4': if(stacknow.pop(dataout) cout<<"从栈中成功出栈的数据为: "<<dataout<<endl; stacknow.display(); else cout<<"出栈失败!"<<endl; break; case'5': stacknow.display(); break; case'6': if(stacknow.gettop(dataout) cout<<"栈顶元素为 "
16、;<<dataout<<endl; stacknow.display(); else cout<<"获取栈顶元素失败!"<<endl; break; case'7': if(stacknow.isempty() cout<<"目前是空栈或者是栈尚未建立!"<<endl; else cout<<"目前栈非空!"<<endl; break; case'8': if(stacknow.isfull() cout&l
17、t;<"目前栈满或者栈尚未建立!"<<endl; else cout<<"目前栈不满,还可以继续输入数据进栈!"<<endl; break; case'9': break; default: cout<<"输入数据有误!"<<endl; break; 4调试过程:5最终程序代码#include<iostream.h>#include<conio.h>#include<string.h>#include<stdli
18、b.h>/基于类模板的设计template <class Type>class seqstackpublic: seqstack(); /创建一个空栈 seqstack(int size); /创建一个可以容纳size个元素的栈 seqstack(); /析构函数 bool create(int size); /实际创建一个可以容纳size个元素的栈 void destroy(); /栈的销毁 bool isempty() const; /确定栈是否为空 bool isfull() const; /确定栈是否已满 bool push(Type &item); /数据进
19、栈 bool pop(); /数据出栈 bool pop(Type &item); /数据出栈,并返回出栈前的栈顶数据 bool gettop(Type &item); /显示当前栈顶元素 void display(); /显示所有数据元素private: Type *stackspace; /指向栈的指针 int stacksize; /栈的大小,当为0时,表示栈没有创建空间 int top; /top栈顶位置,当为-1时,栈为空;/栈的初始化template<class Type> /此语句关键,需注意seqstack<Type>:seqstack(
20、) stackspace=NULL; stacksize=0; top=-1;/创建一个空栈template<class Type>seqstack<Type>:seqstack(int size) stackspace=NULL; stacksize=0; top=-1; create(size);/栈的析构函数template<class Type>seqstack<Type>:seqstack() destroy();/实际栈的创建函数template<class Type>bool seqstack<Type>:c
21、reate(int size) if(stacksize) /栈已经创建,不能继续创建 return false; if(size<=0) /size的值必须大于0 return false; stackspace=new Typesize; if(!stackspace) /没有申请到存储空间(栈已满) return false; stacksize=size; top=-1; return true;/销毁栈的函数template<class Type>void seqstack<Type>:destroy() if(stackspace) delete st
22、ackspace; stackspace=NULL; top=-1; stacksize=0;/判断栈是否为空template<class Type>bool seqstack<Type>:isempty() const if(!stackspace) return true; return top>=0?false:true;/判断栈是否已满template<class Type>bool seqstack<Type>:isfull() const if(!stacksize) /确定栈是否被创建,没有创建是为已满 return true
23、; return top=stacksize-1?true:false;/进栈函数template<class Type>bool seqstack<Type>:push(Type &item) if(!stackspace) return false; if(isfull() return false; stackspace+top=item; return true;/出栈函数,不返回栈顶元素template<class Type>bool seqstack<Type>:pop() if(empty() return flase; t
24、op-; return ture;/出栈函数,但返回栈顶元素template<class Type>bool seqstack<Type>:pop(Type &item) if(isempty() /判断栈是否为空 return false; item=stackspacetop-; return true;/得到栈顶数据元素template<class Type>bool seqstack<Type>:gettop(Type &item) if(isempty() return false; item=stackspacetop
25、; return true;/显示所有数据元素template<class Type>void seqstack<Type>:display() if(stacksize) cout<<"目前栈的所有的数据元素为: " cout<<"栈底是: " for(int i=0;i<=top;i+) cout<<stackspacei<<" " cout<<"栈顶"<<endl; else cout<<&quo
26、t;栈尚未建立!"<<endl;/主程序void main() seqstack<int> stacknow;/若想输入字符,将此语句中的int改为char即可 char yesno,userchoice='9' int newstacksize,datain,dataout; while(1) if(userchoice='9') system("cls"); cout<<"="<<endl <<"顺序栈的基本操作程序"<&l
27、t;endl <<"="<<endl <<"1:创建一个栈"<<endl <<"2:销毁一个栈"<<endl <<"3:数据进栈"<<endl <<"4:数据出栈"<<endl <<"5:显示所有数据元素"<<endl <<"6:读取栈底元素"<<endl <<"7:判
28、断栈是否为空"<<endl <<"8:判断栈是否已满"<<endl <<"9:清屏"<<endl <<"0:退出程序"<<endl; cout<<"="<<endl <<"请输入你的选择: "<<endl; cin>>userchoice; if(userchoice='0') cout<<"程序已经退出,
29、感谢你的使用!"<<endl; exit(0); switch(userchoice) case'1': cout<<"开始创建栈,请输入栈的空间大小 " cin>>newstacksize; if(stacknow.create(newstacksize) cout<<"创建成功,栈的大小是: "<<newstacksize<<endl; else /考虑要全面 cout<<"创建失败!"<<endl; brea
30、k; case'2': cout<<"你确定要销毁一个栈吗?(若销毁请输入输入(Y/y)" cin>>yesno; if(yesno='Y'|yesno='y') stacknow.destroy(); cout<<"栈已被销毁!"<<endl; break; case'3': cout<<"请输入要入栈数据: " cin>>datain; if(stacknow.push(datain) cout<<"数据 "<<datain<<&q
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度木材行业碳排放权交易合同8篇
- 二零二五版农村电商合作发展合同4篇
- 二零二五年度环保设施灭四害服务合同及环保标准协议4篇
- Preparing for Pregnancy助产专业资源库
- 水电安装工程2025年度工程监理合同2篇
- 2025版民间借贷教育基金担保合同示例3篇
- 2025年度生态环保项目投资担保合同书
- 2025年度离婚财产分割纠纷诉讼保全与执行全程服务合同2篇
- 二零二五年度水利工程内部施工合同4篇
- 2025年度个人别墅抵押借款合同范本5篇
- 乳腺癌的综合治疗及进展
- 【大学课件】基于BGP协议的IP黑名单分发系统
- 2025年八省联考高考语文试题真题解读及答案详解课件
- 信息安全意识培训课件
- 2024年山东省泰安市初中学业水平生物试题含答案
- 美的MBS精益管理体系
- 中国高血压防治指南(2024年修订版)解读课件
- 2024安全员知识考试题(全优)
- 2024年卫生资格(中初级)-中医外科学主治医师考试近5年真题集锦(频考类试题)带答案
- 中国大百科全书(第二版全32册)08
- 第六单元 中华民族的抗日战争 教学设计 2024-2025学年统编版八年级历史上册
评论
0/150
提交评论