栈
文章目录
栈(stack)是一种遵循先入后出逻辑的线性数据结构
class ListNode:
def __init__(self,value:int):
self.node: int=value
self.next:ListNode|None=None
class Liststack:
"""基于链表实现的栈"""
def __init__(self):
"""构造方法"""
# 栈顶元素
self._peek:ListNode|None=None
# 栈的元素大小
self._size:int=0
# 栈的元素大小
def size(self):
return self._size
# 判断元素是否为空
def is_empty(self):
# 栈顶元素不为None,即元素不为空
return not self._peek
# 元素入栈,初始化节点,新的节点指向栈顶
def push(self,value:int):
# 初始化节点
node = ListNode(value)
# 新节点指向原有节点,压栈
node.next = self._peek
# 重新初始化栈顶
self._peek = node
self._size +=1
# 元素出栈
def pop(self):
if self.is_empty():
raise IndexError("栈为空")
num = self._peek
# 将栈顶元素替换为下一元素实现出栈
self._peek = self._peek.next
self.size +=1
return num
#访问栈顶元素
def peek(self):
# 先判断栈是否为空
if self.is_empty():
raise IndexError("栈为空!")
else:
return self._peek.node
# 将栈转换为成列表
# 先遍历链表,存储数组,然后将数组翻转
def to_arr(self):
arr = []
# 临时变量
node = self._peek
# 节点为空,终止遍历
while node:
arr.append(node.node)
node = node.next
arr.reverse()
return arr
测试
# 初始化栈类
a = Liststack()
# 压栈
# 栈底元素
a.push(1)
a.push(2)
a.push(3)
# 栈顶元素
a.push(4)
print(a.size())
print("栈中的元素{}".format(a.to_arr()))
print("栈顶元素{}".format(a.peek()))