码迷,mamicode.com
首页 > 编程语言 > 详细

python 实现队列

时间:2019-02-14 10:27:42      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:value   init   node   exception   sse   方便   nbsp   not   style   

# 根节点作为入口, 队列先进先出。 出队的地方是根结点的下一个结点. 入口是尾结点
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 实现队列

标签:value   init   node   exception   sse   方便   nbsp   not   style   

原文地址:https://www.cnblogs.com/dairuiquan/p/10373079.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!