版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业管理-病历管理制度
- 天津市东丽区2026届初三下学期3月联考数学试题含解析
- 江苏省苏州市梁丰重点达标名校2026年初三第四次模拟考试(5月)数学试题含解析
- 吉林省长春市教研室重点达标名校2026届初三第一次模拟数学试题试卷含解析
- 北京市崇文区名校2025-2026学年初三物理试题5月月考含解析
- 浙江省绍兴市海亮重点名校2025-2026学年初三练习题(一)(全国卷II)物理试题含解析
- 沈阳市铁西区重点中学2025-2026学年重点高中联盟领军考试4月初三物理试题(文)试题含解析
- 广东省汕头市科利园实验校2026年初三5月阶段质量检测试题数学试题含解析
- 山西省吕梁市蕴华国际双语校2026届第一次中考模拟考试物理试题含解析
- 江苏省宜兴市张渚徐舍教联盟重点中学2025-2026学年初三下学期期中数学试题含解析
- 人教版六年级数学下册易错题锦集(全面版)
- 中建五局有限空间作业方案编制指南(2022版)
- 中职高考《农业经营与管理》考试题库大全-中(多选题)
- 苏教版小学科学五年级下册单元测试题(含答案)
- 全国中学生物理竞赛公式
- 2022年福建省南平一中自主招生物理学科试卷
- 诊断学课件:病历书写
- 鼻咽癌患者放疗护理课件整理
- 上市公司内部控制手册模板
- 2021年高一下物理第六章《圆周运动》测试卷及答案解析
- 高考作文复习:议论文写作之驳论文段指导
评论
0/150
提交评论