数据结构之栈和队列PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
即对于输入序列1,2,3,不存在输出序列3,1,2
LOGO
❖2.2 栈的相关概念 ❖ 栈的特点是在线性表的固定端(如图4.2所示的
top端)进行操作,将进行操作的一端称为栈顶, 用top表示;另一端称为栈底,用bottom表示。 ❖ 栈的常用操作包括建立栈、元素进入栈(入栈)、 元素退出栈(出栈)、取栈顶元素等。
“进”=插入=压入=PUSH(an+1) “出”=删除=弹出=POP(an)ቤተ መጻሕፍቲ ባይዱ
LOGO
高地址 低地址
顺序栈S an+1 an …… ai …… a2 a1
栈顶top
栈底base 栈不存在的条件: base=NULL; 栈为空 的条件 : base=top; 栈满的条件 : top-base=MAXLEN;
LOGO
图4.2 栈示意图
LOGO
顺序栈的入栈操作——例如用堆栈存放(A,B,C,D)
高地址M 低地址L
top A
top
top C
B top
B
A
A
top D
C B A
核心语句: top=L;
Push (A); Push (B); Push (C); Push (D);
顺序栈入栈函数PUSH()
status Push(ElemType e) { if(top>M){上溢}
栈和队列
LOGO
Contents
实例引入 栈的相关概念 用数组实现顺序栈及操作 用类实现链式栈及相应操作 队列的相关概述 用数组实现顺序队列及相关操作 用类实现链队列及相应操作
LOGO
❖ 【内容简介】 ❖ 本章通过实例引入栈和队列的概念,理解栈的
“后进先出”和队列的“先进先出”的特点,掌 握栈和队列在顺序存储和链式存储结构的特点以 及相应的运算,以及栈和队列的实例应用。
LOGO
问题3: 为什么要设计堆栈? 它有什么独特用途?
1. 调用函数或子程序非它莫属(用于保 护现场和恢复现场);
2. 递归运算的有力工具;
下面用3个例子来帮助理解堆栈:
LOGO
例1.一个栈的输入序列为1,2,3,若在入栈的过程
中允许出栈,则可能得到的出栈序列是什么?
答: 可以通过穷举所有可能性来求解:
LOGO
❖ 【知识要点】 ❖ 栈和队列的相关概念; ❖ 栈的“后进先出”、队列的“先进先出”的结构
特点; ❖ 栈在顺序存储结构、链式存储结构下的特点及相
应算法实现; ❖ 队列在顺序存储结构、链式存储结构下的特点及
相应算法实现; ❖ 实例应用。
LOGO
第一节
1.实例引入
❖【学习任务】 通过工程实例引入,重点理解栈 的“后进先出”和队列的“先进先出”的操作 特点。
LOGO
栈 是仅在表尾进行插入、删除操作的线性表。 表尾(即 an 端)称为栈顶 /top ; 表头(即 a1 端)称为栈底/base
例如: 栈 S= (a1 , a2 , a3 , ……….,an-1 , an )
a1称为栈底元素 强调:插入和删除都只能在表的一端(栈
顶)进行!
想一想:要从栈中取出a1, 应当如何操作?
思考:有无通用的判别原则?
LOGO
❖例3:设依次进入一个栈的元素序列为c,a,b,d,
❖ 则可得到出栈的元素序列是:
❖A)a,b,c,d
B)c,d,a,b
❖C)b,c,d,a
D)a,c,d,b
答: A)、D)可以, B)、C)不行。
讨论:有无通用的判别原则?
有!若输入序列 …,Pj…Pk…Pi …(Pj<Pk<Pi), 一定不存在这样的输出序列 …,Pi…Pj…Pk …
① 1入1出, 2入2出,3入3出, 即1、2、3; ② 1入1出, 2、3入,3、2出, 即1、3、2; ③ 1、2入,2出, 3入3出, 即2、3、1; ④ 1、2入,2、1出,3入3出, 即2、1、3; ⑤ 1、2、3入,3、2、1出, 即3、2、1; 合计有5种可能性。
LOGO
例2:一个栈的输入序列是12345,若在入栈的 过程中允许出栈,则栈的输出序列43512可能实 现吗?12345的输出呢? 答: 43512不可能实现,主要是其中的12顺序不能实现; 12345的输出可以实现,每压入一数便立即弹出即。
an称为栈顶元素
插入元素到栈顶的操作, 称为入栈。 从栈顶删除最后一个元素 的操作,称为出栈。
LOGO
❖3.1 栈(stack)
▪ 栈的定义和特点
• 定义:限定仅在表尾进行插入或删除操作的线性表, 表尾—栈顶,表头—栈底,不含元素的空表称空栈
• 特点:先进后出(FILO)或后进先出(LIFO)
进栈
LOGO
自
一
古
条
华 山
道
图4.1 华山道路的一段
LOGO
第二节
❖ 2.栈的相关概述 ❖ 掌握栈的定义及相关概念,熟悉栈的操作顺序及
元素进出栈的顺序,了解栈的存储结构。
LOGO
❖2.1 栈的定义 ❖ 栈是一种特殊的线性表,其全部操作都被限制在
表的固定一端进行,而且构成栈的元素必须是同 一数据类型。 ❖ 例如,对于【例4.1】,假设有10名游客组成的一 个旅游团,其上山的顺序为游客1、游客2、游客 3、……、游客10,由于某种原因,这10位游客 不想上山了,其下山顺序为游客10、……、游客 3、游客2、游客1,如图4.2所示,该过程和数据 结构中栈的操作一致,其入栈对应上山顺序,其 出栈对应下山顺序,满足“后进先出”的顺序。
栈顶
an
a2
栈底
a1
... ……...
出栈 栈s=(a1,a2,……,an) LOGO
问题1:堆栈是什么?它与一般线性表有什么
不堆同栈?是一种特殊的线性表,它只能在表的一端(即
栈顶)进行插入和删除运算。
一般线性表 逻辑结构:1:1 存储结构:顺序表、链表 运算规则:随机存取
堆栈 逻辑结构: 1:1 存储结构:顺序栈、链栈 运算规则:后进先出LIFO
LOGO
❖ 实例:自古华山一条道。 ❖ 图4.1所示为华山上山的一段石路。自古华山一条
道,假设道路只能允许一个人通过,那么,游客 在登山游览的过程中,只能顺着石路一个接着一 个上山,先登山的游客先到达目的地。这就类似 于数据结构中的队列,满足“先进先出”的原则。 如果在登山的过程中,由于某种原因,有一部分 游客不想上山了,在返回的过程中,必须按照后 上山的游客先下山,先上山的游客后下山的原则 返回。这类似于数据结构中的栈,满足“后进先 出”的原则。