栈和队列教案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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∈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

相关文档
最新文档