Python栈的实现方法示例【列表、单链表】

yizhihongxing

下面我将详细讲解Python栈的实现方法,包括列表和单链表两种方法。

什么是栈?

在开始讲解栈的实现方法之前,我们需要先了解什么是栈。栈(Stack)是一种先进后出的数据结构,它只允许在一端进行插入和删除操作,这一端通常称为栈顶。栈被广泛应用于计算机中,例如函数调用、表达式求值、括号匹配等。

列表实现栈

在Python中,可以使用列表(list)来实现栈。列表的append()方法用于在末尾添加元素,而pop()方法则用于删除并返回列表的最后一个元素,因此可以通过列表的末尾作为栈顶,实现栈的基本功能。

下面是使用列表实现栈的示例代码:

class Stack:
    def __init__(self):
        self.items = []

    def push(self, item):
        self.items.append(item)

    def pop(self):
        if not self.is_empty():
            return self.items.pop()

    def peek(self):
        if not self.is_empty():
            return self.items[-1]

    def is_empty(self):
        return len(self.items) == 0

    def size(self):
        return len(self.items)

这个示例中,Stack类维护一个列表self.items,它代表栈。push()方法用于添加元素,pop()方法用于删除元素,peek()方法用于返回栈顶元素但不删除它,is_empty()方法用于判断栈是否为空,size()方法用于返回栈的大小。

单链表实现栈

除了使用列表,我们还可以使用单链表来实现栈。在单链表中,每个节点包含一个元素和一个指向下一个节点的引用。我们可以将头节点作为栈顶,然后使用链表的头插入和删除操作来实现栈的基本功能。

下面是使用单链表实现栈的示例代码:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class Stack:
    def __init__(self):
        self.head = None

    def push(self, item):
        new_node = Node(item)
        new_node.next = self.head
        self.head = new_node

    def pop(self):
        if not self.is_empty():
            popped = self.head
            self.head = self.head.next
            popped.next = None
            return popped.data

    def peek(self):
        if not self.is_empty():
            return self.head.data

    def is_empty(self):
        return not self.head

    def size(self):
        count = 0
        current = self.head
        while current:
            count += 1
            current = current.next
        return count

这个示例中,Node类代表链表的节点,它包含一个元素data和一个指向下一个节点的next引用。Stack类维护一个头节点self.head,它相当于栈顶。push()方法用于添加元素,pop()方法用于删除元素,peek()方法用于返回栈顶元素但不删除它,is_empty()方法用于判断栈是否为空,size()方法用于返回栈的大小。

总结

本文详细介绍了Python栈的实现方法,包括使用列表和单链表两种方法。列表的append()和pop()操作实现简单、方便,但如果栈中元素过多,可能会导致效率下降。单链表的头插入和删除操作效率高,但需要额外的节点空间来存储节点的next引用。因此,在使用栈时,需要根据实际情况选择合适的实现方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python栈的实现方法示例【列表、单链表】 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Java 包和访问权限操作

    下面是Java包和访问权限操作的完整攻略: 1. Java 包 Java包是为了更好地组织类而创建的一种包含关系,类似于文件夹。它可以将具有相同功能的类组织在一起,方便类的查找、使用和维护。 1.1 包定义 包定义使用关键字 package,定义格式如下: package 包名; 其中,包名由多个单词组成,中间使用.间隔,如: package com.exa…

    other 2023年6月26日
    00
  • Win7系统提示“系统资源不足”的原因及解决方案

    Win7系统提示“系统资源不足”的原因及解决方案 原因分析 Win7系统提示“系统资源不足”通常是由于以下原因导致的: 内存不足:当系统运行的程序和进程占用的内存超过了系统可用的物理内存大小时,系统会提示资源不足。 虚拟内存不足:虚拟内存是指系统硬盘上的一个文件,用于扩展系统的可用内存。当系统运行的程序和进程占用的虚拟内存超过了系统设置的虚拟内存大小时,系统…

    other 2023年8月2日
    00
  • Android自定义View模仿QQ讨论组头像效果

    下面是我对“Android自定义View模仿QQ讨论组头像效果”的攻略详细讲解。 1. 准备工作 在开始自定义View之前,需要做一些准备工作,如下: 需要创建一个Android项目,可以选择任何一种常见的IDE,如AS、VS Code等; 在项目目录下创建一个MyView类,这个类将作为自定义View的核心类; 在res目录下创建一个attrs.xml文件…

    other 2023年6月25日
    00
  • python添加模块搜索路径和包的导入方法

    Python添加模块搜索路径和包的导入方法 在Python中,我们可以通过添加模块搜索路径来扩展Python解释器的模块查找范围,以便导入自定义模块和包。以下是添加模块搜索路径和包的导入方法的详细攻略: 1. 添加模块搜索路径 要添加模块搜索路径,可以使用sys模块中的path属性。sys.path是一个包含Python解释器在导入模块时搜索的路径列表。 i…

    other 2023年10月13日
    00
  • SharedWorker 多页面相互通信示例详解

    让我来详细讲解一下“SharedWorker 多页面相互通信示例详解”。 什么是 SharedWorker SharedWorker 是一个 JavaScript API,其允许运行在同一源下的多个脚本访问共享的 Worker(线程)实例。 sharedWorker 通过名称创建,也就是说,一个相同名称的 sharedWorker 可以被多个页面/脚本访问,…

    other 2023年6月27日
    00
  • ios8.2 beta2下载地址 ios8.2 beta2固件下载地址总汇

    很抱歉,但我无法提供关于非法下载或获取未经授权的软件的指导。这种行为可能违反软件的使用条款和法律法规。我建议您遵守官方渠道获取软件更新,以确保您的设备的安全和稳定性。 如果您有任何其他关于iOS 8.2 beta 2的问题,我将很乐意为您提供帮助。

    other 2023年8月4日
    00
  • 详解Java中方法重写和方法重载的6个区别

    现在我将为您提供完整的攻略,讲解Java中方法重写和方法重载的6个区别。 1. 方法重载和方法重写的定义 方法重载和方法重写是Java中两个相似但又不同的概念。在Java中,方法重载和方法重写都允许我们定义多个方法具有相同的名称,但实现不同的功能。 方法重载是指在同一个类中定义多个具有相同名称但参数列表不同的方法。方法重载可以让我们通过一个方法名称实现不同的…

    other 2023年6月26日
    00
  • c字裤怎么穿

    下面就是如何穿c字裤的完整攻略。 1.选择合适的尺码 选择合适的尺码非常重要,因为过大或者过小的尺码都会影响舒适度和穿着效果。建议选购有弹性的面料,有助于更好地贴合身体。同时,要注意裤子腰围是否合适,以免裤子下滑。 2.搭配合适的上衣 穿搭是非常重要的,特别是在上半身的搭配。C字裤的紧身设计,需要搭配上衣和鞋子以达到更好的穿着效果和搭配感。对于女性来说,可以…

    其他 2023年4月16日
    00
合作推广
合作推广
分享本页
返回顶部