1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 5 class StackUnderflow(ValueError): 6 pass 7 8 #链表节点 9 class Node(object):10 def __init__(self, elem, next_ = None):11 self.elem = elem12 self.next = next_13 14 #顺序表实现栈15 class SStack(object):16 def __init__(self):17 self._elems = []18 19 def is_empty(self):20 return self._elems == []21 22 def top(self):23 if self.is_empty():24 raise StackUnderflow25 return self._elems[-1]26 27 def push(self, elem):28 self._elems.append(elem)29 30 def pop(self):31 if self.is_empty():32 raise StackUnderflow33 return self._elems.pop()34 35 #链表实现栈36 class LStack(object):37 def __init__(self):38 self._top = None39 40 def is_empty(self):41 return self._top is None42 43 def top(self):44 if self.is_empty():45 raise StackUnderflow("in LStack.top()")46 return self._top.elem47 48 def push(self, elem):49 self._top = Node(elem, self._top)50 51 def pop(self):52 if self.is_empty():53 raise StackUnderflow("in LStack.pop()")54 result = self._top.elem55 self._top = self._top.next56 return result57 58 59 60 if __name__=="__main__":61 st1 = SStack()62 st1.push(3)63 st1.push(5)64 while not st1.is_empty():65 print(st1.pop())66 67 print("============")68 st2 = LStack()69 st2.push(3)70 st2.push(5)71 while not st2.is_empty():72 print(st2.pop())