for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
from abc import abstractmethod, ABCMeta
class Queue(object):
""" Queue interface
"""
__metaclass__ = ABCMeta
@abstractmethod
def enqueue(self, item):
pass
def dequeue(self):
def is_empty(self):
def size(self):
@staticmethod
def create():
return LinkedListQueue()
def iterate(self):
class Node(object):
value = None
nextNode = None
def __init__(self, value):
self.value = value
class LinkedListQueue(Queue):
first = None
last = None
N = 0
return self.N
x = self.first
while x is not None:
value = x.value
x = x.nextNode
yield value
old_last = self.last
self.last = Node(item)
if old_last is not None:
old_last.nextNode = self.last
if self.first is None:
self.first = self.last
self.N += 1
return self.N == 0
if self.is_empty():
return None
old_first = self.first
self.first = old_first.nextNode
if old_first == self.last:
self.last = None
self.N -= 1
return old_first.value
class ArrayQueue(Queue):
head = 0
tail = 0
s = []
def __init__(self, capacity=None):
if capacity is None:
capacity = 10
self.s = [0] * capacity
return
for i in range(self.head, self.tail):
yield self.s[i]
self.s[self.tail] = item
self.tail += 1
if self.tail == len(self.s):
self.resize(len(self.s) * 2)
def resize(self, new_size):
tmp = [0] * new_size
tmp[i-self.head] = self.s[i]
self.s = tmp
self.tail = self.tail - self.head
self.head = 0
return self.tail - self.head
return self.size() == 0
deleted = self.s[self.head]
self.head += 1
if self.size() == len(self.s) // 4:
self.resize(len(self.s) // 2)
return deleted