栈是一个LIFO数据结构,也就是后进去的元素先出来,栈中的元素没有任何的
相互关联,栈可以实现的操作也很简单,除了建立空栈,判断空栈外,只有对
栈顶压入元素,弹出元素,查看栈顶元素。
我们通过顺序表和链接表依次来实现一个栈的类:
通过顺序表实现:
class StackOverFlow(ValueError):
pass
class Stack:
maxElem = 9
# 指定栈最大能存储的元素数量
# 注意一点是我们在这里利用python数组实现的栈结构,所以栈
# 是不会被填满的,在这里添加一个maxElem类属性只是假设有一个
# 栈有一个最大值
def __init__(self):
self._elem = []
def is_empty(self):
if not self._elem:
return True
return False
def push(self, elem):
if len(self._elem) == Stack.maxElem:
print("栈已满,无法加入")
raise StackOverFlow
self._elem.append(elem)
def pop(self):
if len(self._elem) == 0:
raise StackOverFlow("栈为空,干嘛删")
return self._elem.pop()
def get_top(self):
if len(self._elem) == 0:
raise StackOverFlow("栈为空,无法拿")
return self._elem[-1]
通过链接表实现:
class StackOverFlow(ValueError):
pass
class Node:
def __init__(self, elem=None, lnext=None):
self.elem = elem
self.next = lnext
class Stack:
def __init__(self):
self._head = None
def is_empty(self):
return self._head == None
def push(self, elem):
new_node = Node(elem, self._head)
self._head = new_node
def pop(self):
if self._head == None:
raise StackOverFlow("栈为空")
elem = self._head.elem
self._head = self._head.next
return elem
def top(self):
if self._head == None:
raise StackOverFlow("栈为空")
return self._head.elem