Python 使用单链表实现队列 (基于class, 包含迭代器)

来源:互联网 发布:工具书中的网络词语 编辑:程序博客网 时间:2024/06/06 06:30
#!/usr/bin/python # -*- coding: utf-8 -*-'''Created on 2015-2-3@author: beyondzhou@name: test_linklistqueue.py'''def test_linklistqueue():        # import pyListQueue    from myqueue import linkListQueue        print '#Init a queue named smith using enqueue'    smith = linkListQueue()    smith.enqueue('CSCI-112')    smith.enqueue('MATH-121')    smith.enqueue('HIST-340')    smith.enqueue('ECON-101')        print '\n#output smith queue'    for element in smith:        print element               print '\n#dequeue one item'    smith.dequeue()      print '\n#output smith after dequeue'    for element in smith:        print element             smith.enqueue('ECON-102')      print '\n#output smith after enqueue again'    for element in smith:        print element             print '\n#get the length of queue'    print 'the lenght of queue is ', len(smith)        print '\n#check wheter the queue is empty'    if smith.isEmpty():        print 'queue is empty!'    else:        print 'queue is not empty!'            print '\n#dequeue all items'    while not smith.isEmpty():        smith.dequeue()        print '\n#check wheter the queue is empty after dequeue all items'    if smith.isEmpty():        print 'queue is empty!'    else:        print 'queue is not empty!'            print '\n#init again'    smith.enqueue('CSCI-112')    smith.enqueue('MATH-121')    smith.enqueue('HIST-340')    smith.enqueue('ECON-101')        print '\n#output smith queue'    for element in smith:        print element    if __name__ == "__main__":    test_linklistqueue()

# Implementation of the Queue ADT using a linked listclass linkListQueue:    # Creates an empty queue    def __init__(self):        self._qhead = None        self._qtail = None        self._count = 0    # Returns True if the queue is empty    def isEmpty(self):        return self._qhead is None    # Returns the number of items in the queue    def __len__(self):        return self._count    # Adds the given item to the queue    def enqueue(self, item):        node = _LinkListQueueNode(item)        if self.isEmpty():            self._qhead = node        else:            self._qtail.next = node        self._qtail = node        self._count += 1    # Removes and returns the first item in the queue    def dequeue(self):        assert not self.isEmpty(), "Cannot dequeue from an empty queue."        node = self._qhead        if self._qhead is self._qtail:            self._qtail = None        self._qhead = self._qhead.next        self._count -= 1        return node.item    # Returns an iterator for traversing the list of items    def __iter__(self):        return _LinkListQueueIterator(self._qhead)# Private storage class for creating the linked list nodesclass _LinkListQueueNode(object):    def __init__(self, item):        self.item = item        self.next = None# Defines a linked list iterator class _LinkListQueueIterator:    def __init__(self, queueHead):        self._curNode = queueHead    def __iter__(self):        return self    def next(self):        if self._curNode is None:            raise StopIteration        else:            item = self._curNode.item            self._curNode = self._curNode.next            return item

#Init a queue named smith using enqueue#output smith queueCSCI-112MATH-121HIST-340ECON-101#dequeue one item#output smith after dequeueMATH-121HIST-340ECON-101#output smith after enqueue againMATH-121HIST-340ECON-101ECON-102#get the length of queuethe lenght of queue is  4#check wheter the queue is emptyqueue is not empty!#dequeue all items#check wheter the queue is empty after dequeue all itemsqueue is empty!#init again#output smith queueCSCI-112MATH-121HIST-340ECON-101

0 0