for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
from abc import ABCMeta, abstractmethod
class StackNode(object):
item = None
nextNode = None
def __init__(self, item):
self.item = item
class Stack(object):
""" Stack interface which provides the API for stack data structure
"""
__metaclass__ = ABCMeta
@abstractmethod
def push(self, item):
pass
def pop(self):
def is_empty(self):
def size(self):
def iterate(self):
@staticmethod
def create():
return LinkedListStack()
class LinkedListStack(Stack):
""" Linked list implementation of stack
first = None
N = 0
node = StackNode(item)
old_first = self.first
node.nextNode = old_first
self.first = node
self.N += 1
if self.is_empty():
return None
if old_first.nextNode is None:
self.first = None
self.first = old_first.nextNode
self.N -= 1
return old_first.item
return self.N == 0
return self.N
x = self.first
while x is not None:
value = x.item
x = x.nextNode
yield value
class ArrayStack(Stack):
""" Array implementation of stack
def __init__(self, capacity=None):
if capacity is None:
capacity = 10
self.s = [0] * capacity
self.N = 0
self.s[self.N] = item
if self.N == len(self.s):
self.resize(len(self.s) * 2)
def resize(self, new_size):
tmp = [0] * new_size
for i in range(min(new_size, len(self.s))):
tmp[i] = self.s[i]
self.s = tmp
value = self.s[self.N-1]
if self.N == len(self.s) // 4:
self.resize(len(self.s) // 2)
return value
return
for i in reversed(range(self.N)):
yield self.s[i]