数据结构-栈
栈 Stack」是一种遵循「先入后出 first in, last out」数据操作规则的线性数据结构。
栈的两种实现方式:
- 基于数组
- 基于链表
基于数组
class ArrayStack: """ 基于数组实现的栈 """ def __init__(self): """ 构造方法 """ self.__stack = [] # 列表(私有) def push(self, item): """ 入栈 """ self.__stack.append(item) def is_empty(self): """ 判断栈是否为空 """ return self.__stack == [] # return True或False def pop(self): """ 出栈 """ assert not self.is_empty(), "栈为空" return self.__stack.pop() def peek(self): """ 访问栈顶元素 """ assert not self.is_empty(), "栈为空" return self.__stack[-1] def size(self): """ 获取栈的长度 """ return len(self.__stack) def to_list(self): """ 返回列表用于打印 """ return self.__stack A = ArrayStack() A.push(1) print(A.peek())
基于链表
class ListNode: def __init__(self, val): self.val = val # 结点值 self.next = None # 指向下一结点的指针 class LinkedListStack: """ 基于链表实现的栈,头插法""" def __init__(self): """ 构造方法 """ self.__peek= None # 栈顶 self.__size = 0 # 栈的长度 def push(self, val): """ 入栈 """ node = ListNode(val) node.next = self.__peek self.__peek = node # 指针指向栈顶结点 self.__size += 1 def is_empty(self): """ 判断栈是否为空 """ return not self.__peek def peek(self): """ 访问栈顶元素 """ if not self.__peek: # 判空处理 return None return self.__peek.val def pop(self): """ 出栈 """ num = self.peek() self.__peek = self.__peek.next self.__size -= 1 return num def size(self): """ 获取栈的长度 """ return self.__size def to_list(self): """ 转化为列表用于打印 """ arr = [] node = self.__peek while node: arr.append(node.val) node = node.next arr.reverse() return arr A = LinkedListStack() A.push(1) print(A.peek())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」