栈的定义
栈是一种只能在一端进行插入或删除操作的线性表。其中允许插入或删除操作的一端称为栈顶。栈顶由栈顶指针来指示。表的另一端称为栈底,栈底是固定不动的。栈的插入和删除操作一般称为入栈和出栈。
从栈的定义可以看出,栈是一种在操作上稍加限制的线性表,即本质上是线性表,而线性表有两种主要的存储结构——顺序表和链表,因此栈也有同样对应的两种存储结构:顺序栈和链式栈。
栈的主要特点是先进后出。栈中的元素就好比一个开入死胡同的车队,最先开进去的汽车只能等后进来的汽车都出去了,才能出来。
顺序栈
顺序栈可以用Python的列表结构实现,表尾作为栈顶,在表尾进行插入和删除操作。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/43c20d312d2b2acb728f3d55f70f6b2e.jpeg)
下面是代码部分:
创建空栈
def createStack():
return list()
将元素压栈
def push(Stack,item):
Stack.append(item)
弹出栈顶元素
def pop(Stack):
return Stack.pop()
判断栈是否为空
def isEmpty(Stack):
return Stack == []
链式栈
用链表存储结构实现栈的操作,此时,链表头指针也是栈顶指针。只能在链表表头(栈顶)进行插入和删除操作。
代码实现如下:
# 定义节点类
class Node(object):
def __init__(self,val,next = None):
self.val = val
self.next = next
# 链式栈
class LinkStack(object):
def __init__(self):
# 标记栈顶位置
self.top = None
# 入栈
def push(self, val):
self.top = Node(val,self.top) # 相当于链表头插法
# 出栈
def pop(self):
if self.top is None:
return None
else:
value = self.top.val
self.top = self.top.next
return value
# 判断栈是否为空
def isEmpty(self):
return self.top == None
# 查看栈顶元素
def top(self):
if self.top is None:
return None
else:
return self.top.val