Python算法入门day7——队列Queue

【简单介绍】

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


【自造队列】——仅学习

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时,加入五个数会报错,队满


【了解双向队列】

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

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

【队列的内置模块】

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文件

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循环

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值