#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Created on 2015-1-27
@author: beyondzhou
@name: test_liststack.py
'''
def test_liststack():
# import listStack
from mystack import listStack
print '#Init a stack named smith using push'
smith = listStack()
smith.push('CSCI-112')
smith.push('MATH-121')
smith.push('HIST-340')
smith.push('ECON-101')
print '\n#output smith stack'
for element in smith:
print element
print '\n#pop one item'
smith.pop()
print '\n#output smith stack after pop'
for element in smith:
print element
print '\n#get the peek item'
peek_item = smith.peek()
print 'peek item is ', peek_item
print '\n#get the length of stack'
print 'the lenght of stack is ', len(smith)
print '\n#check wheter the stack is empty'
if smith.isEmpty():
print 'stack is empty!'
else:
print 'stack is not empty!'
print '\n#pop all items'
while not smith.isEmpty():
smith.pop()
print '\n#check wheter the stack is empty after pop all items'
if smith.isEmpty():
print 'stack is empty!'
else:
print 'stack is not empty!'
if __name__ == "__main__":
test_liststack()
# Implementation of iter
class _StackIterator:
def __init__(self, theList):
self._setItems = theList
self._curItem = 0
def __iter__(self):
return self
def next(self):
if self._curItem < len(self._setItems):
item = self._setItems[self._curItem]
self._curItem += 1
return item
else:
raise StopIteration
# Implementation of the Stack ADT using a Python list
class listStack:
# Created an empty stack
def __init__(self):
self._theItems = list()
# Returns True if the stack is empty or False otherwise
def isEmpty(self):
return len(self) == 0
# Returns the number of items in the stack
def __len__(self):
return len(self._theItems)
# Returns the top item on the stack without removing it
def peek(self):
assert not self.isEmpty(), "Cannot peek at an empty stack"
return self._theItems[-1]
# Removes and returns the top item on the stack
def pop(self):
assert not self.isEmpty(), "Cannot peek at an empty stack"
return self._theItems.pop()
# Push an item onto the top of the stack
def push(self, item):
self._theItems.append(item)
# Returns an iterator for traversing the list of items
def __iter__(self):
return _StackIterator(self._theItems)
#Init a stack named smith using push
#output smith stack
CSCI-112
MATH-121
HIST-340
ECON-101
#pop one item
#output smith stack after pop
CSCI-112
MATH-121
HIST-340
#get the peek item
peek item is HIST-340
#get the length of stack
the lenght of stack is 3
#check wheter the stack is empty
stack is not empty!
#pop all items
#check wheter the stack is empty after pop all items
stack is empty!