- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构cha3-2
第3章 栈和队列 第3章 栈和队列教学内容3.1 栈3.2 栈的应用3.3 栈与递归3.4 队列3.5 队列的应用第3章 栈和队列教学目标掌握栈和队列的特点,并能在相应的应用问题中正确选用。熟练掌握栈的两种存储结构的基本操作实现算法,特别应注意栈满和栈空的条件。熟练掌握循环队列和链队列的基本操作实现算法,特别注意队满和队空的条件。理解递归算法执行过程中栈的状态变化过程。 第3章 栈和队列栈(Stack)队列(Queue)栈顶队头队尾栈底后进先出表先进先出表3.1.1 栈的定义和特点定义:栈(Stack)又称堆栈,是一种特殊的线性表,它限定线性表中元素的插入和删除操作只能在线性表的一端进行。允许插入和删除的一端为变化的一端,称为栈顶(top),栈顶的第一个元素称为栈顶元素,栈的另一端称为栈底(bottom),对应的元素称为栈底元素。3.1.1 栈的定义和特点向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素。从一个栈删除一个元素又称为出栈或退栈,它是把栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。栈又称为后进先出表(Last In First Out),简称为LIFO表。3.1.1 栈的定义和特点栈(Stack)1. 定义2. 逻辑结构3. 存储结构4. 运算规则5. 实现方式2.逻辑结构与线性表相同,元素间仍为一对一关系3.存储结构用顺序存储结构或链式存储结构存储均可,但以顺序栈更常见3.1.1 栈的定义和特点1.定义只能在表的一端(栈顶)进行插入和删除运算的线性表关键是编写入栈和出栈函数,具体实现依顺序栈或链栈的不同而不同;基本操作有入栈、出栈、读栈顶元素值、建栈、判断栈满、栈空等。5.实现方式3.1.1 栈的定义和特点4.运算规则只能在栈顶运算,且访问结点时依照后进先出(LIFO)或先进后出(FILO)的原则一般线性表 逻辑结构:一对一存储结构:顺序表、链表运算规则:随机、顺序存取栈逻辑结构:一对一存储结构:顺序栈、链栈运算规则:后进先出3.1.1 栈的定义和特点栈与一般线性表的区别:仅在于运算规则不同3.3 栈的表示和操作的实现3.3.1 栈的类型定义ADT List {数据对象:D={ ai | ai ∈ ElemSet, i =1, 2, … …, n, n≥0 }数据关系:R = { ai-1 , ai | ai-1 , ai ∈ D, i =2, … …, n } 约定a1端为栈底,an端为栈顶。基本操作:InitStack(L) DestoryStack (L) ClearStack (L) Gettop(s) pushtop(s) Push(s,e) Pop(s,e)}ADT Stack顺序栈S栈顶top高地址 an…… ai…… a2栈底base a1低地址3.3 栈的表示和操作的实现3.3.2 顺序栈的表示和实现栈的顺序存储结构,简称顺序栈,它是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。3.3 栈的表示和操作的实现3.3.2 顺序栈的表示和实现1.顺序栈的表示//-----顺序栈的存储结构#define MAXSIZE 100//顺序栈存储空间的初始分配量typedef struct { SElemType *base; //栈底指针 SElemType *top;//栈顶指针 int stacksize; //栈可用的最大容量 }Sqstack;32top1topDtop0basetopCCtopBBBAAAAbasebasebasebase3.3.2 顺序栈的表示和实现3.栈中元素和栈指针之间的关系C进栈空栈A进栈B进栈D进栈栈空标志base = = toptop 指示真正的栈顶元素之上的下标地址stacksize = 43.3.2 顺序栈的表示和实现4.顺序栈的实现算法3.1 顺序栈初始化【算法思想】(1)分配空间并检查空间是否分配失败,若失败则返回错误;(2)设置栈底和栈顶指针 S.top = S.base;(3)设置栈大小3.3.2 顺序栈的表示和实现4.顺序栈的实现算法3.1 顺序栈初始化【算法描述】Status initStack( SqStack S ){ S.base =new SElemType[MAXSIZE]; if( !S.base ) return OVERFLOW; //存储分配失败 S.top = S.base;//top初始为base,空栈 S.stackSize = MAXSIZE;//stackSize置为栈的最大容量 return OK;}321top0base3.3.2 顺序栈的表示和实现4.顺序栈的实现
文档评论(0)