#!/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!
Python 使用list实现堆栈 (基于class, 包含迭代器)
原文:http://blog.csdn.net/guaguastd/article/details/43196219