《数据结构[Python语言描述]》教案第7课栈和队列(3.5-3.7).docx

上传人:p** 文档编号:926321 上传时间:2024-04-12 格式:DOCX 页数:8 大小:36.87KB
下载 相关 举报
《数据结构[Python语言描述]》教案第7课栈和队列(3.5-3.7).docx_第1页
第1页 / 共8页
《数据结构[Python语言描述]》教案第7课栈和队列(3.5-3.7).docx_第2页
第2页 / 共8页
《数据结构[Python语言描述]》教案第7课栈和队列(3.5-3.7).docx_第3页
第3页 / 共8页
《数据结构[Python语言描述]》教案第7课栈和队列(3.5-3.7).docx_第4页
第4页 / 共8页
《数据结构[Python语言描述]》教案第7课栈和队列(3.5-3.7).docx_第5页
第5页 / 共8页
《数据结构[Python语言描述]》教案第7课栈和队列(3.5-3.7).docx_第6页
第6页 / 共8页
《数据结构[Python语言描述]》教案第7课栈和队列(3.5-3.7).docx_第7页
第7页 / 共8页
《数据结构[Python语言描述]》教案第7课栈和队列(3.5-3.7).docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
资源描述

《《数据结构[Python语言描述]》教案第7课栈和队列(3.5-3.7).docx》由会员分享,可在线阅读,更多相关《《数据结构[Python语言描述]》教案第7课栈和队列(3.5-3.7).docx(8页珍藏版)》请在第壹文秘上搜索。

1、课题第7课栈和队列(3.53.7)课时2课时(90min)教学目标知识目标:(1)理解队列的定义及其基本操作(2)掌握队列的顺序和链式两种存储结构及其基本操作的实现技能目标:能使用队列解决程序设计中的问题素质目标:理解队列的原则,养成遵守规则的良好习惯教学重难点教学重点:队列的定义及其基本操作、队列的顺序和链式两种存储结构及其基本操作教学难点:队列的顺序和链式两种存储结构及其基本操作教学方法问答法、讨论法、讲授法、实践法教学用具电脑、投影仪、多媒体课件、教材教学过程主要教学内容及步骤考勤【教师】使用APP进行签到【学生】班干部报请假人员及原因问题导入【教师】提出以下问题:如何理队列?【蚂思考、

2、传授新知【教师】通过学生的回答引入要讲的知识,介绍队列概述、队列的顺序存储、队列的链式存储3.5队列概述3.5.1 队列的定义【教师】随机邀请学生回答以下问题栈与队列有什么区别?【学生】聆听、思考、回答与栈狗以,队列也是一种操作受限的线性表,不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。通常将表中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头,队列的插入操作称为进队(或入队),队列的删除操作称为出队(或退队).当队列中没有元素时称为空队。*【教师】用多媒体展示“队列的存储结构”图,并介绍该结构进队队尾1gn-队头一H的41出队元素的进队和出队是按照先进先出

3、(fi115tinfirstout,FIFO)”的原则进行的,因此,队列又称为先进先出的线性表。【拓展阅读】稍有礼仪讲究的地方,通常先来者都会优先于后来者。例如,在餐厅排队打饭时,应遵循先到先得的原则;购买火车票时,也应遵循先到先得的原则等。(详见教材)【教师】讲解实例3-8【实例3-8】已知元素的进队顺序为A、B、C、D,写出可能的出队序列。【问题分析】队列遵循先进先出的原则,因此进队顺序为A、B、C、D时只有一种出队序列,即A、B、C、De3.5.2队列的基本操作【教师】用多媒体展示“队列基本操作的定义”表格,并介绍基本操作基本操作说明_init_()初始化队列,即构造一个空队列queue

4、Empty()队列已存在的前提下,判断队列是否为空inQueue(e)队列已存在的前提下,插入数据元素“成为新的队尾元素deQueue()队列已存在的前提下,删除队头元素getHead()队列已存在的前提下,返回队头元素length()队列已存在的前提下,返回队列中实际元素的个数3.6队列的顺序存储顺序队列【教师】随机邀请学生回答以下问题什么是队列的顺序存储?【学生】聆听、思考、回答队列的顺序存储是指,在内存中用一组地址连续的存储单元依次存放从队头到队尾的数据元素。采用顺序存储结构的队列称为顺序队列。3.6.1 顺序队列与循环队列由于队列中插入和删除操作分别在表的两端进行,因此需要增加队头指针

5、front和队尾指针rear。其中,from指针指向队头元素的位置,rear指针指向队尾元素存储位置的下一个存储位置。【教师】用多媒体展示“顺序队列中front指针、rear指针和队列中元素之间的关系”图(详见教材),并介绍三者的关系初始化队列时front和rear都为Oe当有新的元素进队时,新元素存入rear所指的存储位置,并且rear加1;当元素出队时,front所指存储位置的元素出队,并且front加1。【教师】随机邀请学生回答以下问题队列的顺序存储的缺点是什么?【学生】聆听、思考、回答随着元素的进队和出队,front指针和rear指针都在增加。但是,当达到最大容量时已经满足队满条件,此

6、时,即使有元素出队而空出存储空间,也无法进行元素的进作,从而造成存储空间的浪费,这种现象称为“假溢出。为了使存储空间得到充分利用,于是引入了循环队列。将队列的存储空间看作一个环状的空间,即将队列的首、尾位置连接起来,这样的结构为循环队列.【教师】用多媒体展示“循环队列中front指针、rear指针和队列中元素之间的关系”图(详见教材),并介绍三者的关系循环队列为空和为满的判断条件都是front=rear,所以无法根据该条件判断当前队列状态。为此,可规定少用一个元素的存储空间,当rear指针的下一个位置是front指针时,则停止进队操作,此时队列已满,判断条件为(rear+l)%max=fron

7、t3.6.2循环队列中基本操作的实现1.初始化循环队列初始化循环队列是为循环队列动态分配存储空间,其具体步骤如下。(1)设置循环队列的最大容量。(2)设置循环队列的存储空间。(3)将循环队列设置为空。【算法描述】class CirQueue:def _init_(self, max): self.max = maxself.data = None * self.maxself. front = 0self. rear = 0#循环队列结点类#构造方法# 设置循环队列的最大容量# 设置循环队列的存储空间# 将循环队列设置为空2判断队列是否为空判断循环队列是否为空就是判断队列中元素个数是否为0,可

8、以通过front指针和rear指针是否相等来判断.【算法描述】defqeeEmpty(self):returnself.front=self.rear3 .进队循环队列的进队操作是指将新的元素从队尾插入队列中,其具体步骤如下。(1)判断循环队列的存储空间是否已满,若已满,则抛出异常。(2)将新的元素插入rear所指的存储位置。(3)rear加1。【算法描述】definQueue(self,e):if(self.rear+1)%self.max=self.front:raiseEXCePtiOn(循环队列已满,无法插入!,)self.dataself.rear=e#插入新的元素eself.rea

9、r=(self.rear+1)%self.max【算法分析】该算法的时间复杂度为0(1).4 .出队循环队列的出队操作是指将元素从队头删除,其具体步骤如下。(1)判断循环队列是否为空,若为空,则抛出异常。(2)保存front所指存储位置元素的值。(3)front加Ie【算法描述】defdeQueue(self):ifself.rear=self.front:raiseEXcePtiOn循环队列为空,无法删除!,)e=self.dataself,front#保存删除前的队头元素self.front=(self.front+1)%self.maxreturne【算法分析】该算法的时间复杂度为0(1

10、).5 .取队头j三取队头元素就是获取循环队列中front所指存储位置元素的值(但并不删除),其具体步骤如下.(1)判断循环队列是否为空,若为空,则抛出异常。(2)返回front所指存储位置元素的值。【算法描述】defgetHead(self):ifself.rear=self.front:raiseEXCePtion(循环队列为空!!)returnself.dataself.front【算法分析】该算法的时间复杂度为O(I)06 .求循环队列的长度求循环队列的长度就是返回队列中实际元素的个数。【算法描述】deflength(self):return(self.rear-self.front+

11、self.max)%self.max【算法分析】该算法的时间复杂度为0(1).【教师】讲解实例3-9(详见教材)7 .7队列的链式存储一飕队【教师】随机邀请学生回答以下问题什么是队列的链式存储?【学生】聆听、思考、回答队列的链式存储是指,利用一个单链表依次存放自队头到队尾的数据元素,同时设置一个用于指示队头结点的队头指针from和一个用于指示队尾结点的队尾指针rear.采用链式存储结构的队列称为链队。3.7.1链队的存储结构链队中每个元素分别对应链表中的一个结点。链队的队头指针front指向首元结点,队尾指针rear指向链表中最后一个结点。【教师】用多媒体展示“队列的链式存储结构”图,并介绍该

12、结构front!a()II队头1,I0_!I_IIIIITIeaIAl11在链队中,假设每个结点为QueueNode类对象,则结点的定义如下.classQueueNode:#def_init_(self,data):self.data=data#self.next=None#链队结点类#构造方法data属性next属性3.7.2链队中基本操作的实现1.初始化链队初始化链队就是构造一个空队列。【算法描述】classLinkQueue:def_init_(self):self.front=None#self.rear=None#将队头指针置为空将队尾指针置为空2.判断链队是否为空判断链队是否为空就

13、是判断队头指针front是否为空。【算法描述】defqueueEmty(self):returnself.frontisNone3.进队链队的进队操作是指将元素为e的结点插入队尾。链队中元素进队的具体步骤如下。(1)生成一个新结点,并令其数据域为“(2)将新结点插入队尾。(3)修改队尾指针。【算法描述】definQueue(self,e):s=QueueNode(e)#生成新名吉点、ifnotself.queueEmpty():#若原队列不为空,将新结点插入队尾self.rear.next=selse:self,front=s#若原队列为空,将队头指针指向Sself.rear=s#将队尾指针指

14、向新结点【算法分析】该算法的时间复杂度为O(I)e4.出队链队的出队操作是指删除队头结点。链队中元素出队的具体步骤如下。(1)判断链队是否为空,若为空,则抛出异常。(2)若链队中只有一个结点,则删除该结点并修改队尾指针rear.(3)若链队中有多个结点,则将队头指针front指向队头结点的下一个结点。【教师】讲解算法描述、算法分析(详见教材)5.取队头元素取队头元素就是获取链队中最先进队的元素,其具体步骤如下。(1)判断链队是否为空,若为空,则抛出异常。(2)返回队头指针front所指队头结点的值。【算法描述】defgetHead(self):ifself.queeEmpty():raiseEXCePtion(,队列为空!)returnself.front.data【算法分析】该算法的时间复杂度为O(I)e【教师】讲解实例3-10.3-11(详见教材)【学生】聆听、思考、理解、记录任务实施任务一利用循环队列打印杨辉三角【教师】描述问题,分析问题,安排学生扫描微课二维码观看视频“利用循环队列打印杨辉三角“(详见教材),要求学生设计算法【问题描述】杨辉三角是一个由数字排列而成的三角形数表,它描述的是两个未知数之和的幕次方运算后的系数问题。例

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 数据结构与算法

copyright@ 2008-2023 1wenmi网站版权所有

经营许可证编号:宁ICP备2022001189号-1

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!