Python 使用循环数组实现队列 (基于class, 包含迭代器)
2015-02-02 17:51
866 查看
#!/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
相关文章推荐
- Python 使用由单链表构建的数组实现有边际优先队列 (基于class, 包含迭代器)
- Python 使用单链表实现队列 (基于class, 包含迭代器)
- Python 使用list实现队列 (基于class, 包含迭代器)
- Python 使用list实现无边际优先队列 (基于class, 包含迭代器)
- Python 使用单链表实现堆栈 (基于class, 包含迭代器)
- Python 使用list实现堆栈 (基于class, 包含迭代器)
- java使用数组实现循环队列
- 笔记七:基于数组的循环队列的实现
- 使用数组实现栈和循环队列(JAVA语言)
- 队列--基于简单循环数组实现(Java)
- 数据结构循环队列,数组实现,循环队列中如果不使用数据项计数字段items,而是通过front和rear计算队列是否为空或满或队列个数,那会很复杂
- 使用循环数组高效的实现队列类
- 使用不完全填满数组的实现的循环FIFO(队列)
- 基于数组的循环队列(C++模板实现)
- 基于链表、数组实现队列、循环队列
- 数据结构之——基于数组实现的循环队列
- 循环队列Queue--使用顺序存储结构(数组)实现
- 循环队列拾遗-使用数组实现循环队列
- 这里实现一个基于数组的线程安全的循环队列
- 队列--基于动态循环数组实现(Java)