数据结构——基于Python语言(微课版) 课件T7_栈与队列(队列).pptx

数据结构——基于Python语言(微课版) 课件T7_栈与队列(队列).pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

队列第三章:栈与队列主讲:周翔

什么是队列排队排队买票时,排在前面的人先买到票离开排队的队伍,然后轮到后面的人买;如果又有人来买票,就依次排到队尾。买票的过程中,队伍中的人从头到尾依次出列。

什么是队列队列(Queue)像排队这样,先来的先离开,后来的排在队尾后离开,在数据结构中,也有一种数据结构遵循这一原则,那就是队列队列是只允许在一端删除,在另一端插入的线性表。允许删除的一端称为队头,允许插入的一端称为队尾。向队列中插入元素称为入队,从队列中删除元素称为出队。

什么是队列队列(Queue)定义:只能在表的一端(队尾)进行插入,在另一端(队头)进行删除运算的线性表逻辑结构:与线性表相同,仍为一对一关系存储结构:用顺序队列或链队存储均可运算规则:先进先出(FIFO)实现方式:关键是编写入队和出队函数,具体实现依顺序队或链队的不同而不同

队列的抽象数据类型ADTQueue{ 数据元素:可以是任意类型的数据,但必须属于同一个数据对象 数据关系:队列中数据元素之间是线性关系 基本操作: InitQueue(Q);//设置一个空队 EnterQueue(Q,x);//进队 DeleteQueue(Q,x);//出队 GetHead(Q,x);//取队头元素 ……}队列(queue)是一种特殊的线性表,其插入和删除操作分别在线性表的两端进行

队列的表示和实现顺序队列循环队列链式队列

队列的表示和实现——顺序队列使用顺序表实现的队列称作顺序队列。顺序队列的实现和顺序表的实现相似,只是在顺序队列中只允许在一端进行插入,在另一端进行删除。定义两个变量front与rear分别标识队头与队尾,当删除队头元素时,front后移到下一个位置;当插入新元素时,在rear指示的位置插入,插入后,rear向后移动指向下一个存储位置。

队列的表示和实现——顺序队列顺序队列元素入队:

队列的表示和实现——顺序队列顺序队列元素出队:

队列的表示和实现——顺序队列

队列的表示和实现——循环队列队列也可像顺序栈那样,采用顺序存储结构,但若按如下设计队列的存储,会发生什么情况呢?01234elementfrontrear空队,front=rear=0

队列的表示和实现——循环队列依次将元素{a,b,c,d,e}进队此时队满,rear=MAX_SIZE。那么能用rear=MAX_SIZE来判断队满吗?01234elementfrontrearabcde

队列的表示和实现——循环队列出队两个元素此时队不满,但仍有rear=MAX_SIZE这种现象叫做“假溢出”真正队满的条件是:rear-front=MAX_SIZE01234elementfrontrearabcde

队列的表示和实现——循环队列队列的“溢出”有两种情况,一种为真“溢出”,一种为假“溢出”真“溢出”是指当前队列分配的空间已满,此时再往里存储元素则会出现“溢出”,这种“溢出”是真的再无空间来存储元素,是真“溢出”假“溢出”是指队列尚有空间而出现的“溢出”情况。当front端有元素出队时,front向后移动;当rear端有元素入队时,rear向后移动,若rear已指到队列中下标最大的位置,此时虽然front前面有空间,但再有元素入队也会出现“溢出”,这种“溢出”叫作“假溢出”

队列的表示和实现——循环队列如何解决数组前面出现空单元的现象?每出队一个元素,就将数组中其他所有元素都向前移动一个位置。如果这样操作,那么当队列中有n个元素时,该操作需要O(n)时间。更好的解决方案?循环队列

队列的表示和实现——循环队列循环队列

队列的表示和实现——循环队列队列存放数组被当作首尾相接的表处理。element[0]接在element[MAXSIZE-1]的后面。将队列中元素从队首到队尾按顺时针方向存放在循环数组的一段连续的单元中。如图所示,当元素存至element[7]后,只需通过(7+1)%8运算,即可得到element[0]单元(1)a(2)a(3)

队列的表示和实现——循环队列如何指示队首与队尾位置?如何表示空队列?如何表示满队列?

队列的表示和实现——循环队列front:始终指示队头元素的位置rear:始终指示队尾元素的后面位置如图中,队列{a(1),a(2),a(3)},front=1,rear=4frontrea(1)a(2)a(3)

队列的表示和实现——

文档评论(0)

balala11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档