python数据结构之队列(queue)

本文介绍了Python中的队列数据结构,包括队列的基本概念和特性,如先进先出原则。文章详细阐述了入队和出队的操作,并探讨了在不同情况下的算法实现,确保其时间复杂度和空间复杂度为O(1)。此外,还提及了后进先出队列的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.队列

队列是一种特殊的线性表,先进先出,只允许在前端进行删除,在后端进行插入操作,它的操作方式与堆栈类似,区别在于队列只允许在后端插入数据。

在python中有相应的类:

import Queue

q = Queue.Queue()

for i in range(4):
    q.put(i) #将一个值放入队列中

while not q.empty():
    print q.get(), #将值取出
#先进先出的,你应该猜到了会输出什么。
0 1 2 3

条件:

  • 如果列表中只有一个元素,头节点和末节点均可指向它
  • 如果列表中没有元素, 头节点和末节点的指针均指向None
  • 要一个空队列出队,返回None

    2.入队

    入队需要分为两种情况:

  • 要入的队为空队列

  • 要入的队为非空队列

因此设计相应的算法:

  1. 如果列表为空,头节点和末节点均指向新节点node
  2. 否则,放到末节点之后
class Node(object):

    def __init__(self,data):
        self.data = data
        self.next = None

class Queue(object):
    def __init__(self):
        self.head = None
        self.tail = None
    def enqueue(self,data):
        node = Node(data)
        if self.head is None and self.tail is None:
            self.head = node
            self.tail = node
        else:
            self.tail.next = node
            self.tail = node

算法的时间,空间复杂度均为O(1)

3.出队

出队则要分成三种情况讨论:
要出的队列为空,只有一个节点,或者有不止一个节点,设计如下算法:

  • 如果list为空,返回None
  • if list有一个节点
    2.1 存储头节点的值
    2.2 把头,尾节点指向None
    2.3 返回头节点的值

  • else:
    3.1 存储头节点的值
    3.2 将头节点转到下一个节点
    3.3 返回头节点的值

    def dequeue(self):
        if self.head is None and self.tail is None:
            return None
        data = self.head.data
        if self.head == self.tail:
            self.head = None
            self.tail = None
        else:
            self.head = self.head.next
        return data

算法的时间,空间复杂度均为O(1)

4.后进先出队列

q = Queue.LifoQueue()

for i in range(5):
    q.put(i)

while not q.empty():
    print q.get(),
    #输出:4 3 2 1 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值