数据结构-栈

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())  
复制代码

 

posted @   天才九少  阅读(8)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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 热点速览」
点击右上角即可分享
微信分享提示