本节主要针对链栈的基本操作进行解析。
# coding:___utf-8___
# author:Guoxuan Sun time:2023/1/12
#链栈的基本操作
#链栈的创建与顺序栈的区别就是每个结点都有一个指针域
#同时链栈也是有两个指针front和rear
#链栈中的front指针指向的结点是第一个结点,不是空姐点
class LinkNode:
def __init__(self.data=None):
self.data=data
self.next=None
class LinkQueue:
def __init__(self):#一开始创建时两个指针都赋值为None
self.front=None
self.rear=None
def empty(self):#判断队列为空,依然是front和rear指向同一个结点,但是在链栈中指向同一个结点必定front=rear=None,而且front
#永远在前边,front为None的话rear必然也为None,所以简化了条件self.front==None
return self.front==None
#添加和删除操作依然要保持FIFO的特点
def push(self,e):#添加一个结点
s=LinkNode(e)#创建一个结点
if self.empty():#添加第一个节点时,front与rear都指向第一个结点
self.front=self.rear=s
else:#其他情况依然用next来移动指针
self.rear.next=s#搞定next域
self.rear=s#搞定指针指向
def pop(self)#删除结点,返回被删除的元素
assert not self.empty()
if self.front==self.rear:#只剩一个结点的情况,再删除就没有了
e=self.front.data
self.front=self.rear=None
else:
e=self.front.data
self.front=self.front.next#只要实现指针移动即可
return e
def gethead(self):#获取头结点
assert not self.empty()
e=self.front.data
return e