python 实现队列

Posted DRQ丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 实现队列相关的知识,希望对你有一定的参考价值。

# 根节点作为入口, 队列先进先出。 出队的地方是根结点的下一个结点. 入口是尾结点
class Node(object):

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

    def __str__(self):
        """ 方便打印调试。 """
        return <Node:value:{} , next={}>.format(self.value, self.next)

    __repr__ = __str__



class Queue(object):
    def __init__(self, maxsize=50):
        self.maxsize = maxsize
        self.root = Node()
        self.length = 0
        self.tailnode = None


    def __len__(self):
        return self.length


    def push(self, value):
        if self.maxsize is not None and len(self) > self.maxsize:
            raise Exception(队列已经满了)

        node = Node(value)
        if self.root.next is None:
            self.root.next = node
            self.tailnode = node

        else:
            self.tailnode.next = node
            self.tailnode = node
        self.length += 1


    def iter_node(self):
        curnode = self.root.next
        while curnode is not self.tailnode:
            yield curnode
            curnode = curnode.next
        yield curnode


    def __iter__(self):
        for node in self.iter_node():
            yield node.value


    def pop(self):
        curnode = self.root.next
        prevnode =self.root
        prevnode.next = curnode.next
        del curnode

        self.length -= 1



def test_queue():
    q = Queue()
    q.push(1)
    q.push(2)
    q.push(3)

    assert len(q) == 3
    assert list(q) == [1,2,3]
    q.pop()
    assert list(q) == [2,3]

 

以上是关于python 实现队列的主要内容,如果未能解决你的问题,请参考以下文章

第十一节 双端队列的概念和python代码实现

perl中的队列

Python实现简单多线程任务队列

队列-Python 实现

python的栈和队列的实现代码

python的栈和队列的实现代码