- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 栈和队列 3.1 栈 3.2 栈的应用举例 3.3 栈与递归的实现 3.4 队列 3.1 栈3.1.1 抽象数据类型栈的定义⑴ 栈的定义 栈(stack),又称堆栈,是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。 也就是说,栈是一种后进先出(Last In First Out)的线性表,简称为LIFO表。 栈的插入操作被形象地称为进栈或入栈,删除操作称为出栈或退栈。 例: 入栈顺序:123 可能出栈顺序:123,132,213,231,321 不可能出栈顺序:312 ⑵ 栈的抽象数据类型 ADT Stack is Data:含有n个元素a1,a2,a3,…,an,按LIFO规则存放,每个元素的类型都为ElemType。 Operation: //初始化栈s void initStack(Stack s); //清除栈s的所有元素,使之成为空栈 void clearStack(Stack s); //判断栈s是否为空,若是则返回true,否则返回false bool isEmpty(Stack s); //若栈已满则返回true,否则返回false,此操作为顺序栈所特有 bool isFull(Stack s); //返回栈顶元素,但不移动栈顶指针 ElemType peek(Stack s); //元素e进栈,即插入到栈顶 void push(Stack s,const ElemType e); //删除栈顶元素并返回之 ElemType pop(Stack s); end Stack 3.1.2 栈的表示和实现3.1.2.1 顺序栈--栈的顺序存储结构 和线性表类似,栈也有两种存储表示,其顺序存储结构简称为顺序栈。 顺序栈类型定义:sqstack.h #include iostream using namespace std; const int MAXSIZE=50; struct Elem{ int data; }; typedef Elem ElemType; struct SqStack{ ElemType base[MAXSIZE]; int top; }; void initStack(SqStack s); void clearStack(SqStack s); bool isEmpty(SqStack s); bool isFull(SqStack s); ElemType peek(SqStack s); void push(SqStack s,const ElemType e); ElemType pop(SqStack s); s.base 始终指向栈底 s.base=NULL 表示栈结构不存在 s.top=0 表示栈空 s.top 始终指向栈顶元素的下一个位置 顺序栈基本操作的实现:sqstack.cpp #include sqstack.h ⑴ 初始化栈 void initStack(SqStack s){ s.top=0; } ⑵ 清空栈 void clearStack(SqStack s){ s.top=0; } ⑶ 判栈空 bool isEmpty(SqStack s){ return s.top==0; } ⑷ 判栈满 bool isFull(SqStack s){ return s.top==MAXSIZE; } ⑸ 读取栈顶元素 ElemType peek(SqStack s){ if(s.top==0){ cerrStack is empty!endl; exit(1); } return s.base[s.top-1]; } ⑹ 入栈 void push(SqStack s,const ElemType e){ if(s.top==MAXSIZE){ cerrStack overflow!endl; exit(1); } s.base[s.top]=e; ++s.top; } ⑺ 出栈 ElemType pop(SqStack s){ if(s.top==0){ cerrStack is empty!endl; exit(1); } --s.top; ElemType temp=s.base[s.top]; return temp; } 3.1.2.2 栈的链接存储结构--链栈 (
您可能关注的文档
- 第三章 电力柜台compos操作说明3.doc
- 第七章 动态局部可重构.ppt
- 网络攻防实验教学系统产品白皮书-易华录v1.0教材.pdf
- 专题01 Word文本输入解析.pdf
- Zookeeper熟悉及用途综述.pdf
- 牙科诊所管理系统(附件).pdf
- 第五章 电力系统分析计算常用软件.doc
- 第十三章 游戏风云:阿里云全球同服游戏方案全面解读.docx
- 压缩感知研究(附件).pdf
- 第五章 电脑高手之路.ppt
- 2012-2021北京重点校高一(下)期中语文汇编:词类活用.pdf
- 电力市场与经济运行优化:电力市场优化算法_(28).电力市场中的市场力分析.docx
- 医院培训课件:《俯卧位通气的护理》.pptx
- 电力市场与经济运行优化:电力系统能效优化方法_(1).电力市场基础理论.docx
- 电力市场与经济运行优化:电力系统能效优化方法_(9).电力系统运行与能效优化.docx
- 电力市场与经济运行优化:电力系统能效优化方法_(15).电力市场与环境影响分析.docx
- 电力市场与经济运行优化:电力系统优化调度_(1).电力市场基础与原理.docx
- 电力市场与经济运行优化:电力系统优化调度_(14).电力市场改革政策与影响.docx
- 电力市场与经济运行优化:电力系统运行优化_(4).电力系统运行基础.docx
- 2025年航运行业分析.docx
文档评论(0)