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]

 

posted @ 2019-02-14 10:13  DRQ丶  阅读(189)  评论(0编辑  收藏  举报