栈和队列教案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教案
课程名称:数据结构(C语言版)授课班级:技校二年级学生
授课学时:1学时
授课章节:第三章栈和队列
课型:理论课
任课教师:***
图1 地铁站入站出站
1,2,3,……,n的次序往上叠的话,那么使用的次序应该是什么样的?
必然是依从上往下的次序,,即n,......,3,2,1。
它们遵循的是规律正是本节课要讨论的“栈”的结构特点。
对图1 进行抽象,用地铁的每节车厢表示栈中每个元素这样就得到一个栈的示意图,如图2所示
图2 栈的示意图
从图2中可以看出第一个进栈的a1为栈底元素,最后一个进栈的an为栈顶元素,进栈和出栈也是同一个方向。
这也是最基本的栈的示意图。
需要同学们熟知。
其实,要解决这个出站问题就离不开我们今天将要学习的进栈、出栈技术,这节课我们将从如下三个方面来掌握它:栈的定义、栈的表示和实现、栈的应用与练习。
其中栈的表示与实现是本节的重点。
一、抽象数据类型栈的定义(6分钟)
点。
二、介绍栈的定义类型(8分钟)
ADT Stack{
数据对象:
D={ a i | a i ∈ElemSet, i=1,2,...,n, n≥0 }
数据关系:
R1={ <a i-1, a i >| a i-1, a i∈D, i=2,...,n }
约定a n端为栈顶,a1 端为栈底。
基本操作:
InitStack(&S)
操作结果:构造一个空栈S。
DestroyStack(&S)
初始条件:栈S 已存在。
操作结果:栈S 被销毁。
StackEmpty(S)
初始条件:栈S 已存在。
操作结果:若栈S 为空栈,则返回TRUE,
否则FALE。
GetTop(S, &e)
初始条件:栈S 已存在且非空。
操作结果:用e 返回S 的栈顶元素。
StackLength(S)
初始条件:栈S 已存在。
操作结果:返回S 的元素个数,即栈的长度。
ClearStack(&S)
初始条件:栈S 已存在。
操作结果:将S 清为空栈。
Push(&S, e)
初始条件:栈S 已存在。
讲授新课(30分钟)
操作结果:插入元素e 为新的栈顶元素。
Pop(&S, &e)
初始条件:栈S 已存在且非空。
操作结果:删除S 的栈顶元素,并用e 返回其值。
StackTraverse(S,visit())
初始条件:栈S 已存在且非空。
操作结果:从栈底到栈顶依次对S 的每个数据元
素调用函数visit()。
一旦visit()失败,则操作失效。
}ADT Strack
三、练习与拓展(16分钟)
1.练习(解决问题)
回到地铁到达终点站时的
入站出站问题。
请同学们对右图
栈的示意图中进栈序列依次为
{a1,a2,a3,a4,a5,a6},进行出栈序列
排序。
根据前面提出的栈的特点
是不是可以很容易的得出这个
序列的出栈序列呀。
出栈序列为:a6,a5,a4,a3,a2,a1
大家可以看看现在的解决方案与提出规划的方法是
否一致。
由此也可以看出该技术的重要。
同学有没有觉得出栈序列还是很容易得到的,有没
有感觉栈的知识也没有很难呀?
根据以上对栈的理解,现在提出一个进栈出栈更宽泛的
规则,让同学们感受到栈的知识的有趣性和多变性。
注:进栈时除了一次性全部进栈之后再出栈的规则之外,
其实还可以进栈元素进去一个或两个之后直接出栈,出
栈可以不必都出完,接着进栈随时可以出栈。
任务驱动
解决问题
练习法
学以致用,
当堂巩固。
知识补充
根据前面提出
的问题进行解
答。
最后对栈
的知识没有讲
解到的加以补
充。
使同学们
更深入的理解
栈。
设疑启发
提示同学们观
察栈和线性表
的相似点与不
同点。
有助于
比如上述题中出栈序列也可以为如下序列:
序列1:a1,a2,a3,a4,a5,a6
序列2:a2,a1,a4,a3,a5,a6
序列3:a4,a5,a3,a6,a2,a1
∙∙∙∙∙∙
同学们有没有感觉根据栈的入栈方式不同可以产生不同的出栈序列,是不是栈的出栈序列很灵活,就像我们生活中的趣事一般。
同学们发现栈和线性表的相似了没有呢?
下面我画一个顺序存储结构的线性表线性表,同学们观察一下它们是不是很相似呢?
2.拓展
(1)设依次进入一个栈的元素序列为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不行)
同学们对一下看看给出的答案跟你们心中的答案是否一致呢?
有不理解的同学可以举手提问哦。
下面再来解答一个题,巩固巩固今天所学过的知识。
(2)数制转换
算法基于原理:N = (N div d)×d + N mod d
讲授新课(30分钟例如:(1348)10 = (2504)8 ,
其运算过程如下:
同学们想到答案了吗?
3.思考
栈往往用单链表实现。
可以用双链表吗?哪个更好?这个问题同学们课后思考一下,下节课我们来解答。
小结(3分钟)
1)理解栈和线性表的异同点。
2)掌握栈的特点,根据特点能够解决入栈出栈顺序,以及可
以根据入栈得到多种入栈序列。
3)能够利用栈知识解决实际生活中的问题。
大家要掌握栈的特点,这是栈的重点。
大家只要多练习、多思考、多归纳、多总结,就一定能熟练
掌握。
我们学过的知识。
同学们加油哦!
知识总结
课堂总结可以
把学过的知识
整理成一个系
统的体系,有
助于提高学习
效率和质量。
布置作业(3分钟)
1.书面作业:设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次
进栈,如果6个元素出栈的顺序是s2,s3,s4, s6 , s5,s1,则栈的容量
至少应该是()
A.2
B. 3
C. 5
D.6
2.思考:
hanoi塔问题
传说在创世纪时,在一个叫Brahma的寺庙里,有三个柱子,
其中一柱上有64个盘子从小到大依次叠放,僧侣的工作是将这
64个盘子从一根柱子移到另一个柱子上。
移动时的规则:
每次只能移动一个盘子;
只能小盘子在大盘子上面;
可以使用任一柱子。
当工作做完之后,就标志着世界末
日到来。
动手动脑,
全面发展。
培养学生独立
思考能力,学
会合作学习法。