#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Created on 2015-2-2
@author: beyondzhou
@name: test_arryqueue.py
'''
def test_arryqueue():
# import pyListQueue
from myqueue import arrayQueue
print '#Init a queue named smith using enqueue'
smith = arrayQueue(4)
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_arryqueue()
# Implementation of the Queue ADT using a circular array
class _ArrayQueueIterator:
def __init__(self, theArray, front, count):
self._arrayRef = theArray
self._curNdx = front
self._count = count
self._index = 0
def __iter__(self):
return self
def next(self):
if self._index < self._count:
entry = self._arrayRef[self._curNdx]
self._curNdx = (self._curNdx+1) % len(self._arrayRef)
self._index = self._index + 1
return entry
else:
raise StopIteration
from myarray import Array
class arrayQueue:
# Creates an empty queue
def __init__(self, maxSize):
self._count = 0
self._front = 0
self._back = maxSize - 1
self._qArray = Array(maxSize)
# Returns True if the queue is empty
def isEmpty(self):
return self._count == 0
# Returns True if the queue is full
def isFull(self):
return self._count == len(self._qArray)
# 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):
assert not self.isFull(), "Cannot enqueue to a full queue."
maxSize = len(self._qArray)
self._back = (self._back + 1) % maxSize
self._qArray[self._back] = item
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."
item = self._qArray[self._front]
maxSize = len(self._qArray)
self._front = (self._front + 1) % maxSize
self._count -= 1
return item
# Returns the array queue's iterator for traversing the elements
def __iter__(self):
return _ArrayQueueIterator(self._qArray, self._front, self._count)
#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
#output smith after enqueue again
MATH-121
HIST-340
ECON-101
ECON-102
#get the length of queue
the lenght of queue is 4
#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!
#init again
#output smith queue
CSCI-112
MATH-121
HIST-340
ECON-101