数据结构实验三.docx
- 文档编号:9274563
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:10
- 大小:51.87KB
数据结构实验三.docx
《数据结构实验三.docx》由会员分享,可在线阅读,更多相关《数据结构实验三.docx(10页珍藏版)》请在冰豆网上搜索。
数据结构实验三
南昌大学实验报告
学生姓名:
学号:
专业班级:
实验类型:
□验证■综合□设计□创新实验日期:
实验成绩:
一、实验名称
用c++程序实现顺序栈的操作
二、实验目的
1.掌握顺序栈的基本概念和基本用法;
2.掌握顺序栈的逻辑结构和存储结构;
4.掌握顺序栈的操作,包括进栈、出栈和读栈顶元素等;
3.能够用C++程序实现顺序栈的操作。
三.实验环境
PC微机
DOS操作系统或Windows操作系统
VisualC++程序集成环境
四.实验内容与步骤
1.在栈顶压入元素e
进栈(或称压栈)应先把进栈元素填写到栈顶指针所指单元;然后,将栈顶指针加1。
进栈前,首先要判断栈是否为满,即top-base是否大于等于stackSize。
如果是,则要重新申请栈的顺序存储空间,然后把现有栈中的数据元素复制到新的存储空间,再进行上面的压入操作。
2.弹出栈顶的元素到e
出栈时,先将栈顶指针减1,再读取栈顶指针所指单元的数据元素。
出栈前,应该先判断栈是否为空。
如果栈为空,则没有元素可供弹出。
3.读栈顶的元素
读取栈顶指针所指单元的前面一个数据元素,不要移动栈顶指针。
读栈顶的元素之前,也应该先判断栈是否为空。
如果栈为空,则没有可供读取的元素。
4.判断栈是否为空
判断栈顶指针top是否等于栈底指针base。
如果相等,则为空栈。
五、实验数据及处理结果
源程序:
//头文件代码
#defineNULL0
#defineOK1
#defineERROR0
typedefboolStatus;
//顺序栈类c++语言定义
#include
#ifndefMYHEAD_H
#defineMYHEAD_H
#include"myhead.h"
#endif
#defineSTACK_MAX_SIZE50
#defineSTACKINCREMENT20
template
classSqStack
{
public:
voidclear();
intgetLength();
intgetstackSize();
intgetTop(ElemTypee);
boolisEmpty();
SqStack
Statuspop(ElemType&e);
voidpush(ElemTypee);
SqStack();
virtual~SqStack();
SqStack(constSqStack
/*intprint(inte)
{
intk;
int*ptr;
ptr=newint[e];
ptr=base;
//if(!
base)
//returnERROR;
//else
//{
for(inti=0;i { k=*(ptr+i); pop(k); } for(i=e;i>0;i--) cout<<*(ptr+i)<<''; cout< delete[]ptr; returnOK; //} }*/ protected: ElemType*base; ElemType*top; intstackSize; }; //置空 template voidSqStack : clear() { top=base; } //个数 template intSqStack : getLength() { returntop-base; } //空间大小 template intSqStack : getstackSize() { returnstackSize; } //读栈顶元素 template intSqStack : getTop(ElemTypee) { if(isEmpty()) returnERROR; else e=*(top-1); returne; } //判断是否为空 template boolSqStack : isEmpty() { return(top==base? true: false); } //重载赋值运算符定义 template SqStack : operator=(SqStackrightS) { intlength=rights.getLength(); if(this! =&rightS) { if(stackSize { delete[]base; base=newElemType[right.stackSize]; assert(base! =0); stackSize=rightS.stackSize; } for(inti=0;i *(base+i)=*(rightS.base+i); top=base+length; } return*this; } //弹出栈顶的元素到e template StatusSqStack : pop(ElemType&e) { if(isEmpty()) returnERROR; else e=*--top; returnOK; } //在栈顶压入元素e template voidSqStack : push(ElemTypee) { intlength=top-base; ElemType*newbase; if(top-base>=stackSize) { newbase=newElemType[stackSize+STACKINCREMENT]; assert(newbase! =0); for(intj=0;j *(newbase+j)=*(base+j); delete[]base; stackSize+=STACKINCREMENT; base=newbase; top=base+length; } *top=e; ++top; } //构造函数 template SqStack : SqStack() { base=newElemType[STACK_MAX_SIZE]; assert(base! =0); stackSize=STACK_MAX_SIZE; top=base; } //析构函数 template SqStack : ~SqStack() { if(base) delete[]base; stackSize=0; top=base=NULL; } //拷贝初始化构造函数 template SqStack : SqStack(constSqStack&otherS) { intlength; length=otherS.top-otherS.base; base=newElemType[otherS.stackSize]; assert(base! =0); stackSize=otherS.stackSize; for(inti=0;i *(base+i)=*(otherS.base+i); top=base+length; } //顺序栈的测试函数 #include #ifndefSQSTACK_CPP #defineSQSTACK_CPP #include"sqstack.cpp" #endif usingnamespacestd; intmain() { SqStack intn,a,b=0,s=0; cout<<"已分配空间stacksize="< cout<<"请输入您要进栈的数的个数: "; cin>>n; cout<<"请输入您要进栈的数(输入10000停止进栈): "< for(inti=1;i<=n;i++) { cin>>a; if(a==10000) break; else { obj1.push(a); ++s; } } cout<<"当前元素个数为: "< cout<<"读取当前栈顶元素为"< obj1.pop(a); --s; cout<<"弹出栈顶元素"< "< intelem[20]; for(i=0;i { obj1.pop(elem[i]); } for(i=s;i>0;i--) cout< cout< return0; } 实验结果: 六、实验过程分析与小结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)