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


#!/usr/bin/python 
# -*- coding: utf-8 -*-

'''
Created on 2015-1-27
@author: beyondzhou
@name: test_listqueue.py
'''

def test_listqueue():
    
    # import pyListQueue
    from myqueue import pyListQueue
    
    print '#Init a queue named smith using enqueue'
    smith = pyListQueue()
    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 
        
    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!'
    
if __name__ == "__main__":
    test_listqueue()

# Implementation of iter
class _pyListQueueIterator:
    def __init__(self, theList):
        self._setItems = theList
        self._curItem = 0
    def __iter__(self):
        return self
    def next(self):
        if self._curItem < len(self._setItems):
            item = self._setItems[self._curItem]
            self._curItem += 1
            return item
        else:
            raise StopIteration
        
# Implementation of the Queue ADT using a Python list
class pyListQueue:
    # Creates an empty queue
    def __init__(self):
        self._qList = list()

    # Returns True if the queue is empty
    def isEmpty(self):
        return len(self) == 0

    # Returns the number of items in the queue
    def __len__(self):
        return len(self._qList)

    # Adds the given item to the queue
    def enqueue(self, item):
        self._qList.append(item)

    # Removes and returns the first item in the queue
    def dequeue(self):
        assert not self.isEmpty(), "Cannot dequeue from an empty queue."
        return self._qList.pop(0)

    # Returns an iterator for traversing the list of items
    def __iter__(self):
        return _pyListQueueIterator(self._qList)

#Init a queue named smith using enqueue

#output smith queue
CSCI-112
MATH-121
HIST-340
ECON-101

#dequeue one item

#output smith after dequeue
MATH-121
HIST-340
ECON-101

#get the length of queue
the lenght of queue is  3

#check wheter the queue is empty
queue is not empty!

#dequeue all items

#check wheter the queue is empty after dequeue all items
queue is empty!

评论关闭