第7章 队列教学课件.pptx

第7章队列2025/6/101队列的特点队列的创建与独特的方法队列与回文串队列与加密解密队列与约瑟夫问题队列与广度搜索优先队列队列与排队队列与筛选法

7.1队列的特点2025/6/102队列擅长在线性表的头、尾两端实施删除和添加操作,甚至可以把线性表实现成只在头、尾两端操作,所以人们也称队列是受限的线性表。入列时,最先进入的节点在队头,最后进入的节点在队尾。出列时,从队列的头开始删除节点,最后一个删除的节点是队尾的节点。队列是一种先进先出的数据结构,简称FIFO(FirstInFirstout)

7.1队列的特点2025/6/103头节点(队头)在左边、尾节点(队尾)在右边。

7.2队列的创建与独特方法2025/6/104collections.deque是Python的collections模块提供的一种双向队列数据结构,collections.deque支持在队列的两端进行入列和出列操作。以下称collections.deque类的实例(对象)为双端队列,简称队列,其中的节点的逻辑结构是线性结构,存储结构使用了双向链表,这意味双端队列在插入和删除元素的时间复杂度是O(1),使得他非常适合于需要高效地在队列两端进行操作的场景。

2025/6/1057.2队列的创建与独特方法1创建队列创建一个空队列:使用deque()构造方法即可创建一个空的队列。使用deque(iterable)构造方法创建一个有初始元素的队列,其中iterable是一个可迭代对象,可以是列表、元组、字符串等,用于初始化双向队列的节点。

2025/6/1067.2队列的创建与独特方法2独特方法?

2025/6/1077.2队列的创建与独特方法3.单端队列queuePython标准库中的queue模块提供的Queue类(注意Queue的首写字母是大写字母)是collections.deque队列的适配器,相对于双端队列deque,称Queue的实例是单端队列,单端队列只提供了队列的基本操作接。入列put()、出列get(),但不提供从队尾出列、从队头入列的操作。需要注意的是单端队列queue使用自己的qsize()方法判断其长度,不可以使用Python的内置函数len()判断单端队列的长度,即不可以len(queue)。

2025/6/1087.2队列的创建与独特方法ch7_1.py例子1使用队列的独特方法ch7_1.py使用了队列的独特方法.

7.3队列与回文串2025/6/109回文串是指和其反转(倒置)相同的字符串,例如:racecar,123321,level”,toot,civic,pop,eye,rotator,pip都是回文串。我们曾在第3章例子4,使用递归方法判断一个字符串是否是回文串。

2025/6/10107.3队列与回文串ch7_2.py例子2使用队列也可以判断一个字符串是否是回文串。将字符串中的全部字符按顺序依次入列,然后开始分别从头、尾出列,如果字符串是回文串,那么从头出列的节点一定和从尾出列的节点相同,当队列中剩余的节点数目不足2个时,停止出列。利用队列判断字符串是否是回文串读者可以和第6章中的例6-1进行比较,分别体会栈和队列的特点。

7.4队列与加密解密2025/6/1011用队列可以方便地对字符串实施加密(解密)操作。出列的对象参与加密字符串中一个字符(出列的对象参与解密字符串中一个字符),然后再重新入列,一直到字符串中的字符全部被加密完毕(字符串中的全部字符被解密完毕)。

2025/6/10127.4队列与加密解密例子3ch7_3.py使用队列加密、解密字符串ch7_3.py中的do_encryption(source,password)函数使用队列加密字符串、do_decryption(secret,password)使用队列解密字符串。

7.5队列与约瑟夫问题2025/6/1013简单再重复一下约瑟夫问题:若干个人围成一圈,从某个人开始顺时针(或逆时针)数到第3个人,该人从圈中退出,然后继续顺时针(或逆时针)数到第3个人,该人从圈中退出,依此类推,程序输出圈中最后剩下的一个人。?

2025/6/10147.5队列与约瑟夫问题例子4对于约瑟夫问题,队列的算法具有很好的可读性。ch7_4.py使用队列解决约瑟夫问题

7.6队列与广度搜索2025/6/1015广度优先搜索(BreadthFirstSearch,BFS)是图的另一种遍历方式,与深度搜索(DFS)相对,是以广度优先进行搜索。其特点是先访问图的顶点,然后广度优先:依次进行被访问点的邻接点,一层一层访问,直至访问完所有节点或搜索到指定的节点,算法结束。栈的特点是后进先出,恰好能体现深度优先。队列的特点是

文档评论(0)

1亿VIP精品文档

相关文档