Python算法入门day7——队列Queue

发布时间:2024-11-19 10:01

【简单介绍】

1.队列是一个数据集合,仅允许在列表的一端进行插入,另一端进行删除。

2.进行插入的一端称为队尾(rear),插入动作称为进队或入队。

3.进行删除队一端称为队头(front),删除动作称为出队。

4.队列队性质:先进先出


【队列队实现方式——环形队列】

相比列表形式,更充分的利用了空间

1.环形队列:当队首队尾指针front==Maxsize-1(队列大小),再前进一个位置就自动到0

即当rear到11时,下一跳是0,需要(11+1)%12==0

2.队满:(rear+1)%12==front(图6) -->需要留一个空

3.队空:front==rear(图1)

4.队首指针前进1:front=front+1%Maxsize

5.队尾指针前进1:rear=(rear+1)%Maxsize

Python算法入门day7——队列Queue_第1张图片


【自造队列】——仅学习

class Queue:
    #1.首先创建一个长度为100的队列
    def __init__(self,size=100):
        self.queue=[0 for i in range(size)]
        self.size=size
        self.rear=0 #队尾 入队
        self.front=0 #队首 出队
    #2.加入
    def push(self,element):
        if not self.is_filled():
            self.rear=(self.rear+1)%self.size
            self.queue[self.rear]=element
        else:
            raise IndexError("Queue is filled")
    #3.删除
    def pop(self):
        if not self.is_empty():#当队列不空时
            self.front=(self.front+1)%self.size
            #返回新的front值
            return self.queue[self.front]
        else:
            #报错
            raise IndexError("Queue is empty")
    #4.判断是否为空
    def is_empty(self):
        return self.rear==self.front
    #5.队满
    def is_filled(self):
        return (self.rear+1)%self.size==self.front

#测试
q=Queue(5)
for i in range(5):
    q.push(i)
print(q.pop())

当队列大小为5时,加入五个数会报错,队满

Python算法入门day7——队列Queue_第2张图片


【了解双向队列】

1.双向队列的两端都支持进队和出队操作

2.双向队列的基本操作:
        1.队首进队 2.队首出队 3.队尾进队 4.队尾出队

Python算法入门day7——队列Queue_第3张图片

【队列的内置模块】

1.使用方法:from collections import deque

        1.创建队列:queue = deque()

        2.进队:append()

        3.出队:popleft()

        4.双向队列队首进队:appendleft()

        5.双向队列队尾出队:pop()

2.内置队列模块,队满了前面的数将自动出队

#导入双向队列模块
from collections import deque

#q=deque()#创建一个队列
q=deque([1,2,3,4,5],5)#也可以这样写,表示1,2,3进队,第二个参数表示最大长度
#单向队列
q.append(6)#队尾进队
print(q.popleft())#队首出队
'''
#双向队列
q.appendleft(1)#队首进队
q.pop()#队尾出队
'''

输出结果:2

原因是当6进入到队列中,队列已经满了,所以1被自动出队了 


这个方法可以用来做一些案列,比如打印文件的后几行,类似切片,但比切片运算快

1.创建一个txt文件

Python算法入门day7——队列Queue_第4张图片

2.编写代码

from collections import deque

def tail(n):
    #打开文件
    with open('test.txt','r') as f:
        q=deque(f,n)#f代表文件,n代表几个数
        return q #返回后面n个数据
for line in tail(5):
    print(line,end="")

with open()是open函数引申过来的(参数一是文件路径,参数二是文件打开方式)

r:以只读方式打开文件

w:打开一个文件只用于写入

wb:以二进制格式打开一个文件用于写入

具体的可以看这一篇博客

python中with open中参数的介绍_python-with open() as file相关参数以及常用打开方式_集贤馆趣谈的博客-CSDN博客with open() as file是由open()函数引申而来fp = open("./aa.txt", "w+")fp.write("This is a text file.")fp.close()上面是一个open()函数的例子,在用完之后必须关闭文件,否则就造成了系统资源的长期占用!with open("./aa.txt", "w+") as fp:fp.write("This is a...https://blog.csdn.net/weixin_30010987/article/details/113501324


前几行直接for循环

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号