栈的数据类型描述
栈的顺序表实现
class StackUnderflow(ValueError):
pass
class SStack:
def __init__(self):
self._elems = []
def is_empty(self):
return self._elems == []
def top(self):
if self._elems == []:
raise StackUnderflow("空栈异常:in SStack.top()")
return self._elems[-1]
def push(self,elem):
self._elems.append(elem)
def pop(self):
if self._elems == []:
raise StackUnderflow("空栈异常:in SStack.pop()")
return self._elems.pop()
st1 = SStack()
st1.push(3)
st1.push(7)
st1.push(5)
while not st1.is_empty():
print(st1.pop())
栈的链表实现
class LNode:
def __init__(self, elem, _next=None):
self.elem = elem
self.next = _next
class LStack:
def __init__(self):
self._top = None
def is_empty(self):
return self._top is None
def push(self, elem):
self._top = LNode(elem, self._top)
def pop(self):
if self._top is None:
raise StackUnderflow("空栈异常:in LStack.pop()")
p = self._top
self._top = p.next
return p.elem
def top(self):
if self._top is None:
raise StackUnderflow("空栈异常:in LStack.top()")
return self._top.elem
st2 = LStack()
st2.push(3)
st2.push(5)
st2.push(7)
while not st2.is_empty():
print(st2.pop())