版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3-2栈v第三章栈和队列栈的逻辑结构栈的顺序存储结构及实现栈的链式存储结构及实现学什么?顺序栈和链栈的比较3-2-1栈的逻辑结构v第三章栈和队列栈的定义栈:限定仅在一端进行插入和删除操作的线性表(a1,…,an-1,an)栈顶(top):允许插入和删除的一端称为栈顶栈底(bottom):另一端称为栈底插入位置:1~n+1删除位置:1~n线性表插入位置:n+1删除位置:n栈栈底栈顶栈的操作特性插入:入栈、进栈、压栈删除:出栈、弹栈a插入删除bc此时执行出栈操作,哪个元素可以出栈呢?栈的操作特性:后进先出(LastInFirstOut,LIFO)空栈:不含任何数据元素的栈
条件判断
abc栈只是对插入和删除操作的位置进行了限制并没有限定插入和删除操作进行的时间例1有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种?情况一出栈:cbaabc情况二出栈:bca栈的操作特性abc能否得到如下出栈序列?出栈:cab例1有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种?栈的操作特性栈的抽象数据类型定义ADTStackDataModelOperationendADT栈中元素具有相同类型及后进先出特性,相邻元素具有前驱和后继关系InitStack:栈的初始化DestroyStack:栈的销毁Push:入栈Pop:出栈GetTop:取栈顶元素Empty:判空相对于其他数据结构,栈的基本操作是确定的InitStack输入:无功能:栈的初始化,初始化一个空栈输出:无
DestroyStack输入:无功能:销毁栈,释放栈所占用的存储空间输出:无Push
输入:元素值x
功能:在栈顶插入一个元素x
输出:如果插入成功,栈顶增加了一个元素,否则返回失败信息入栈出栈Push操作需要指明插入位置吗?栈的抽象数据类型定义
Pop输入:无功能:删除栈顶元素输出:如果删除成功,返回被删元素值;否则返回失败信息GetTop输入:无功能:读取当前的栈顶元素输出:若栈不空,返回当前的栈顶元素值;否则返回失败信息Empty输入:无功能:判断栈是否为空输出:如果栈为空,返回1;否则,返回0入栈出栈栈的抽象数据类型定义3-2-2栈的顺序存储结构及实现v第三章栈和队列顺序栈的存储结构定义顺序栈:栈的顺序存储结构
012345678如何表示栈顶:设变量top存储栈顶元素所在的下标如何表示栈底:用数组的一端作为栈底如何改造数组实现栈的顺序存储呢?topabc什么是顺序存储?constintStackSize=10;template<typenameDataType>classSeqStack{public:SeqStack();~SeqStack();voidPush(DataTypex);DataTypePop();DataTypeGetTop();intEmpty();private:DataTypedata[StackSize];inttop;};
顺序栈的类定义InitStack:栈的初始化DestroyStack:栈的销毁Push:入栈Pop:出栈GetTop:取栈顶元素Empty:判空栈的抽象数据类型定义?栈满:top=StackSize-1template<typenameDataType>voidSeqStack<DataType>::Push(DataTypex){
if(top==StackSize-1)throw"上溢";
data[++top]=x;}时间复杂度?什么情况下无法入栈?顺序栈的实现——入栈
012…
StackSize-1topabcx栈空:top=-1template<typenameDataType>DataTypeSeqStack<DataType>::Pop(){
DataTypex;
if(top==-1)throw"下溢";
x=data[top--];
returnx;}如何取栈顶元素?什么情况下无法出栈?
012…
StackSize-1abctop顺序栈的实现——出栈判空的函数原型是什么?Empty
输入:无功能:判断栈是否为空输出:如果栈为空,返回1;否则,返回0
012…
StackSize-1abctop栈空:top=-1template<typenameDataType>intSeqStack<DataType>::Empty(){if(top==-1)return1elsereturn0;}顺序栈的实现——判空3-2-3栈的链式存储结构及实现v第三章栈和队列存储结构定义链栈:栈的链式存储结构单链表是如何存储线性表的?firsta1a2an∧ai栈顶topanan-1a1∧firsta1a2an∧aiP:用链表的哪一端作为栈顶?A:为方便操作,用链头作为栈顶P:链栈需要加头结点吗?P:单链表为什么加头结点?A:链栈无须加头结点,也可以为了一致加上头结点链栈的类定义template<typenameDataType>classLinkedStack{public:LinkedStack();~LinkedStack();voidPush(DataTypex);DataTypePop();DataTypeGetTop();intEmpty();private:
Node<DataType>*top;};InitStack:栈的初始化DestroyStack:栈的销毁Push:入栈Pop:出栈GetTop:取栈顶元素Empty:判空栈的抽象数据类型定义?链栈的实现——入栈topanan-1a1∧xstoptemplate<typenameDataType>voidLinkedStack<DataType>::Push(DataTypex){Node<DataType>*s=nullptr;s=newNode<DataType>;s->data=x;//申请结点s数据域为x
s->next=top;top=s;//将结点s插在栈顶}链栈的入栈操作为什么不用判断是否栈满?template<typenameDataType>DataTypeLinkedStack<DataType>::Pop(){Node<DataType>*p=nullptr;DataTypex;if(top==nullptr)throw"下溢";x=top->data;p=top;//暂存栈顶元素
top=top->next;//将栈顶结点摘链deletep;returnx;}topanan-1a1∧
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025福建龙岩市上杭县庐丰卫生院招聘一体化乡村医生1人参考笔试题库附答案解析
- 深度解析(2026)《GBT 26904-2020桃贮藏技术规程》
- 2025广东肇庆市德庆县教育局所属公办幼儿园招聘合同制工作人员26人考试参考试题及答案解析
- 2025江苏南通市崇川区区属国有企业下属控股公司招聘8人备考笔试试题及答案解析
- 深度解析(2026)《GBT 25905.2-2010信息技术 通 用多八位编码字符集 锡伯文、满文名义字符、显现字符与合体字 32点阵字型 第2部分:正黑体》
- 深度解析(2026)《GBT 25896.1-2010深度解析(2026)《设备用图形符号 起重机 第1部分:通 用符号》》
- 深度解析(2026)《GBT 25892.4-2010信息技术 维吾尔文、哈萨克文、柯尔克孜文编码字符集 32点阵字型 第4部分:库非黑体》
- 2025上海生物技术学院招聘生物技术学院课题组动物实验研究助理岗位1人备考笔试试题及答案解析
- 2025陕西西咸新区空港第一学校就业见习招聘8人参考笔试题库附答案解析
- 2025广东佛山市南海区国有资产监督管理局财务总监招聘1人备考笔试题库及答案解析
- 2025年保密试题问答题及答案
- 建设工程工程量清单计价标准(2024版)
- 代建项目管理流程与责任分工
- cnc刀具刀具管理办法
- DB14∕T 3069-2024 放射治疗模拟定位技术规范
- 如何培养孩子深度专注
- 2024年餐饮店长年度工作总结
- 护理8S管理汇报
- 产前筛查标本采集与管理制度
- 2025劳动合同书(上海市人力资源和社会保障局监制)
- 药膳餐厅创新创业计划书
评论
0/150
提交评论