class StackAsLinkedList(Stack): """ Stack implemented using a linked list. """ #}@head #{ # ... #}@tail #{ def __init__(self): """ (StackAsLinkedList) Constructs a stack. """ super(StackAsLinkedList, self).__init__() self._list = LinkedList() def purge(self): """ (StackAsLinkedList) -> None Purges this stack. """ self._list.purge() self._count = 0 #}>a #{ def push(self, obj): """ (StackAsLinkedList, Object) -> None Pushes the given object on to this stack. """ self._list.prepend(obj) self._count += 1 def pop(self): """ (StackAsLinkedList) -> None Pops the top object off this stack. """ if self._count == 0: raise ContainerEmpty result = self._list.first self._list.extract(result) self._count -= 1 return result def getTop(self): """ (StackAsLinkedList) -> None Returns the object at the top of this stack. """ if self._count == 0: raise ContainerEmpty return self._list.first #}>b #{ def accept(self, visitor): """ (StackAsLinkedList, Visitor) -> None Makes the given visitor visit all the objects in this stack. """ assert isinstance(visitor, Visitor) ptr = self._list.head while ptr is not None: visitor.visit(ptr.datum) if visitor.isDone: return ptr = ptr.next #}>c #{ class Iterator(Iterator): """ Enumerates the elements of a StackAsLinkedList. """ def __init__(self, stack): """ (StackAsLinkedList.Iterator, StackAsLinkedList) -> None Constructs an iterator for the given stack. """ super(StackAsLinkedList.Iterator, self).__init__(stack) self._position = stack._list.head def next(self): """ (StackAsLinkedList.Iterator) -> Object Returns the next element. """ if self._position is None: raise StopIteration element = self._position self._position = self._position.next return element.datum def __iter__(self): """ (StackAsLinkedList) -> StackAsLinkedList.Iterator Returns an iterator for this stack. """ return self.Iterator(self) #}>d def _compareTo(self, obj): """ (StackAsLinkedList, StackAsLinkedList) -> int Compares this stack with the given stack. """ assert isinstance(self, obj.__class__) raise NotImplementedError @staticmethod def main(*argv): "StackAsLinkedList test program." print StackAsLinkedList.main.__doc__ stack2 = StackAsLinkedList() Stack.test(stack2) return 0
class GeneralTree(Tree): """ A general tree implemented using a linked list of subtrees. """ #}@head #{ # ... #}@tail #{ def __init__(self, key): """ (GeneralTree, Object) -> None Constructs a general tree with the given object at its root. """ super(GeneralTree, self).__init__() self._key = key self._degree = 0 self._list = LinkedList() def purge(self): """ (GeneralTree) -> None Purges this general tree. """ self._list.purge() self._degree = 0 #}>a def getIsEmpty(self): """ (GeneralTree) -> bool Returns false always. """ return False def getIsLeaf(self): """ (GeneralTree) -> bool Returns true if this general tree is a leaf. """ return self._degree == 0 def getDegree(self): """ (GeneralTree) -> int Returns the degree of this general tree node. """ return self._degree #{ def getKey(self): """ (GeneralTree) -> Object Returns the key in this general tree node. """ return self._key def getSubtree(self, i): """ (GeneralTree) -> Object Returns the specified subtree of this general tree node. """ if i < 0 or i >= self._degree: raise IndexError ptr = self._list.head for j in xrange(i): ptr = ptr.next return ptr.datum def attachSubtree(self, t): """ (GeneralTree, GeneralTree) -> None Attaches the given general tree as a subtree of this general tree node. """ self._list.append(t) self._degree += 1 def detachSubtree(self, t): """ (GeneralTree, GeneralTree) -> GeneralTree Detaches and returns specified general tree from this general tree node. """ self._list.extract(t) self._degree -= 1 return t #}>b def _compareTo(self, obj): """ (GeneralTree, GeneralTree) -> int Compares this general tree with the given general tree. """ assert isinstance(self, obj.__class__) raise NotImplementedError @staticmethod def main(*argv): "GeneralTree test program." print GeneralTree.main.__doc__ gt = GeneralTree('A') gt.attachSubtree(GeneralTree('B')) gt.attachSubtree(GeneralTree('C')) gt.attachSubtree(GeneralTree('D')) gt.attachSubtree(GeneralTree('E')) Tree.test(gt) return 0
class QueueAsLinkedList(Queue): """ Queue implemented using a linked list. """ #}@head #{ # ... #}@tail #{ def __init__(self): """ (QueueAsLinkedList) -> None Constructs a queue. """ super(QueueAsLinkedList, self).__init__() self._list = LinkedList() def purge(self): """ (QueueAsLinkedList) -> None Purges this queue. """ self._list.purge() self._count = 0 #}>a #{ def getHead(self): """ (QueueAsLinkedList) -> Object Returns the object at the head of this queue. """ if self._count == 0: raise ContainerEmpty return self._list.first def enqueue(self, obj): """ (QueueAsLinkedList, Object) -> None Enqueues the given object to the tail of this queue. """ self._list.append(obj) self._count += 1 def dequeue(self): """ (QueueAsLinkedList) -> Object Dequeues the object at the head of this queue. """ if self._count == 0: raise ContainerEmpty result = self._list.first self._list.extract(result) self._count -= 1 return result #}>b def accept(self, visitor): """ (QueueAsLinkedList, Visitor) -> None Makes the given visitor visit all the objects in this queue. """ assert isinstance(visitor, Visitor) ptr = self._list.head while ptr is not None: visitor.visit(ptr.datum) if visitor.isDone: return ptr = ptr.next class Iterator(Iterator): """ Enumerates the elements of a QueueAsLinkedList. """ def __init__(self, queue): """ (QueueAsLinkedList.Iterator, QueueAsLinkedList) -> None Constructs an iterator for the given queue. """ super(QueueAsLinkedList.Iterator).__init__(queue) self._position = None def next(self): """ (QueueAsLinkedList.Iterator) -> Object Returns the next element. """ if self._position is None: self._position = self._container._list.head else: self._position = self._position.next if self._position is None: raise StopIteration return self._position.datum def __iter__(self): """ (QueueAsLinkedList) -> QueueAsLinkedList.Iterator Returns an iterator for this queue. """ return self.Iterator(self) def _compareTo(self, obj): """ (QueueAsLinkedList, QueueAsLinkedList) -> int Comparse this queue with the given queue. """ assert isinstance(self, obj.__class__) raise NotImplementedError @staticmethod def main(*argv): "QueueAsLinkedList test program." print QueueAsLinkedList.main.__doc__ queue2 = QueueAsLinkedList() Queue.test(queue2) return 0
class QueueAsLinkedList(Queue): """ Queue implemented using a linked list. """ #}@head #{ # ... #}@tail #{ def __init__(self): """ (QueueAsLinkedList) -> None Constructs a queue. """ super(QueueAsLinkedList, self).__init__() self._list = LinkedList() def purge(self): """ (QueueAsLinkedList) -> None Purges this queue. """ self._list.purge() self._count = 0 #}>a #{ def getHead(self): """ (QueueAsLinkedList) -> Object Returns the object at the head of this queue. """ if self._count == 0: raise ContainerEmpty return self._list.first def enqueue(self, obj): """ (QueueAsLinkedList, Object) -> None Enqueues the given object to the tail of this queue. """ self._list.append(obj) self._count += 1 def dequeue(self): """ (QueueAsLinkedList) -> Object Dequeues the object at the head of this queue. """ if self._count == 0: raise ContainerEmpty result = self._list.first self._list.extract(result) self._count -= 1 return result #}>b def accept(self, visitor): """ (QueueAsLinkedList, Visitor) -> None Makes the given visitor visit all the objects in this queue. """ assert isinstance(visitor, Visitor) ptr = self._list.head while ptr is not None: visitor.visit(ptr.datum) if visitor.isDone: return ptr = ptr.next class Iterator(Iterator): """ Enumerates the elements of a QueueAsLinkedList. """ def __init__(self, queue): """ (QueueAsLinkedList.Iterator, QueueAsLinkedList) -> None Constructs an iterator for the given queue. """ super(QueueAsLinkedList.Iterator).__init__(queue) self._position = None def next(self): """ (QueueAsLinkedList.Iterator) -> Object Returns the next element. """ if self._position is None: self._position = self._container._list.head else: self._position = self._position.next if self._position is None: raise StopIteration return self._position.datum def __iter__(self): """ (QueueAsLinkedList) -> QueueAsLinkedList.Iterator Returns an iterator for this queue. """ return self.Iterator(self) def _compareTo(self, obj): """ (QueueAsLinkedList, QueueAsLinkedList) -> int Comparse this queue with the given queue. """ assert isinstance(self, obj.__class__) raise NotImplementedError def main(*argv): "QueueAsLinkedList test program." print QueueAsLinkedList.main.__doc__ queue2 = QueueAsLinkedList() Queue.test(queue2) return 0 main = staticmethod(main)
class StackAsLinkedList(Stack): """ Stack implemented using a linked list. """ #}@head #{ # ... #}@tail #{ def __init__(self): """ (StackAsLinkedList) Constructs a stack. """ super(StackAsLinkedList, self).__init__() self._list = LinkedList() def purge(self): """ (StackAsLinkedList) -> None Purges this stack. """ self._list.purge() self._count = 0 #}>a #{ def push(self, obj): """ (StackAsLinkedList, Object) -> None Pushes the given object on to this stack. """ self._list.prepend(obj) self._count += 1 def pop(self): """ (StackAsLinkedList) -> None Pops the top object off this stack. """ if self._count == 0: raise ContainerEmpty result = self._list.first self._list.extract(result) self._count -= 1 return result def getTop(self): """ (StackAsLinkedList) -> None Returns the object at the top of this stack. """ if self._count == 0: raise ContainerEmpty return self._list.first #}>b #{ def accept(self, visitor): """ (StackAsLinkedList, Visitor) -> None Makes the given visitor visit all the objects in this stack. """ assert isinstance(visitor, Visitor) ptr = self._list.head while ptr is not None: visitor.visit(ptr.datum) if visitor.isDone: return ptr = ptr.next #}>c #{ class Iterator(Iterator): """ Enumerates the elements of a StackAsLinkedList. """ def __init__(self, stack): """ (StackAsLinkedList.Iterator, StackAsLinkedList) -> None Constructs an iterator for the given stack. """ super(StackAsLinkedList.Iterator, self).__init__( stack) self._position = stack._list.head def next(self): """ (StackAsLinkedList.Iterator) -> Object Returns the next element. """ if self._position is None: raise StopIteration element = self._position self._position = self._position.next return element.datum def __iter__(self): """ (StackAsLinkedList) -> StackAsLinkedList.Iterator Returns an iterator for this stack. """ return self.Iterator(self) #}>d def _compareTo(self, obj): """ (StackAsLinkedList, StackAsLinkedList) -> int Compares this stack with the given stack. """ assert isinstance(self, obj.__class__) raise NotImplementedError @staticmethod def main(*argv): "StackAsLinkedList test program." print StackAsLinkedList.main.__doc__ stack2 = StackAsLinkedList() Stack.test(stack2) return 0