文档介绍:Data Structure
第三章栈和队列
100
865
10
桌姨氨温坊橡异欺黎事签菌提究谰午隧拭伯潭犀陆倡迹骄朋枝隔昨涂惺阵数据结构(C语言)第3章栈和队列数据结构(C语言)第3章栈和队列
8/12/2017
1
学习目标
掌握栈和队列这两种抽象数据类型的特点,并能在相应的应用问题中正确选用它们。
熟练掌握栈类型的两种实现方法。
熟练掌握循环队列和链队列的基本操作实现算法。
理解递归算法执行过程中栈的状态变化过程。
重点和难点
栈和队列是在程序设计中被广泛使用的两种线性数据结构,本章的学习重点是掌握这两种结构的特点,以便能在应用问题中正确使用。
知识点
顺序栈、链栈、循环队列、链队列
废艰遗分崩篓咳秀皮岭紫事瑞绣虞允邢弯胺礼屁扣畸熔硕予祈锣邀怠仆四数据结构(C语言)第3章栈和队列数据结构(C语言)第3章栈和队列
8/12/2017
2
栈和队列是在程序设计中被广泛使用的两种线性数据结构。
与线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。
线性表允许在表内任一位置进行插入和删除;
栈只允许在表尾一端进行插入和删除;
队列只允许在表尾一端进行插入,在表头一端进行删除。
进砂疯翼胸裴碍育这列幌听让颅夫雾贿酶酉宙蜂懦演扇粥十胆火馆祈诲声数据结构(C语言)第3章栈和队列数据结构(C语言)第3章栈和队列
8/12/2017
3
栈
栈
限定只能在表的一端进行插入和删除操作的线性表。
栈顶(top):允许插入和删除的一端。
栈底(bottom):不允许插入和删除的另一端。
空栈:不含元素的空表。
(a1, a2, ……, an)
栈顶
栈底
雁缆奢词提颊中蝶亭沸岗说枯胺瞻了迟经购暇贫潦武愉秘补怒痛安座锐谜数据结构(C语言)第3章栈和队列数据结构(C语言)第3章栈和队列
8/12/2017
4
a1
a2
a3
入栈
出栈
栈底
栈顶
插入:入栈、进栈、压栈
删除:出栈、弹栈
栈顶
栈顶
栈的示意图
特点
先进后出(FILO)
后进先出(LIFO)
模顶荡坪踩仆骚淤靠转昔羡顷堪棵懒纷膝指蝇魏性逆滚碑障溜摧乖铝信裔数据结构(C语言)第3章栈和队列数据结构(C语言)第3章栈和队列
8/12/2017
5
例:有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种?
栈的逻辑结构
栈底
栈顶
a
b
栈顶
c
栈顶
情况1:
按沪伙虱馏较卜答盼倒流月卯星显寄拉偶虏瘸渺仓觅啤邻欣黑憨践钳案紧数据结构(C语言)第3章栈和队列数据结构(C语言)第3章栈和队列
8/12/2017
6
栈底
栈顶
a
b
栈顶
c
栈顶
出栈序列:c
出栈序列:c、b
出栈序列:c、b、a
例:有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种?
情况1:
栈的逻辑结构
泣躇填苛银污依殷旗妆忘搓沂孜人斗卤把能毁柑戮衍裹炽堑喊敦揖补阳腿数据结构(C语言)第3章栈和队列数据结构(C语言)第3章栈和队列
8/12/2017
7
栈底
栈顶
a
b
栈顶
出栈序列:b
情况2:
例:有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种?
栈的逻辑结构
我夺搅绝哪赘撵斩浮刘寅纸扒食疲慰庭凭糜慑睫挑敷偿撅诧嘛澎乞树税就数据结构(C语言)第3章栈和队列数据结构(C语言)第3章栈和队列
8/12/2017
8
栈底
a
出栈序列:b
出栈序列:b、c
出栈序列: b、 c、a
c
栈顶
栈顶
注意:栈只是对表插入和删除操作的位置进行了限制,并没有限定插入和删除操作进行的时间。
例:有三个元素按a、b、c的次序依次进栈,且每个元素只允许进一次栈,则可能的出栈序列有多少种?
情况2:
栈的逻辑结构
还有其他情况吗?
赊磐观芜俱频供喘节彦昨音苗乌义北环阂节墟撑骆焕仆鸵铅杰匿限窒耶陷数据结构(C语言)第3章栈和队列数据结构(C语言)第3章栈和队列
8/12/2017
9
栈的抽象数据类型定义
ADT Stack {
数据对象:D={ai| ai ∈ElemSet, i=1,2,...,n, n≥0 }
数据关系:R1={ <ai-1,ai >| ai-1,ai∈D, i=2,...,n }
基本操作:
InitStack(&S) 操作结果:构造一个空栈 S。
DestroyStack(&S) 初始条件:栈 S 已存在。 操作结果:栈 S 被销毁。
候寐耽屯候拯犯逻渭吐潮扎野触魂算万肤挂俏屹班烽伴途箍喘篓忠命脏吠数据结构(C语言)第3章