Python实现栈的方法详解【基于数组和单链表两种方法】

yizhihongxing

首先我们需要了解什么是栈。栈是一种后进先出(LIFO)的数据结构,即最后进入的元素最先弹出。栈包含两种主要操作:压入(Push)和弹出(Pop)。压入操作用于添加新元素到栈顶,弹出操作则是将栈顶元素移出并返回其值。

用Python实现栈有两种常见方法:基于数组和基于单链表。下面我将分别介绍这两种方法。

基于数组的栈实现

首先,我们需要创建一个类来表示栈。这个类需要包含以下操作:

  • push(item):将一个元素压入栈顶。
  • pop():将栈顶元素弹出并返回其值。
  • peek():返回栈顶元素的值。
  • is_empty():判断栈是否为空。
  • size():返回栈的大小。

下面是基于数组的栈实现的完整代码示例:

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

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

    def pop(self):
        return self.items.pop()

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

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

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

# 示例:
s = ArrayStack()
s.push(1)
s.push(2)
s.push(3)
print(s.peek())  # 输出结果:3
print(s.pop())   # 输出结果:3
print(s.pop())   # 输出结果:2
print(s.size())  # 输出结果:1

基于单链表的栈实现

基于单链表的栈实现与基于数组的栈实现相比,主要区别在于数据的存储方式。在基于单链表的栈实现中,每个元素都是一个单独的节点,而这些节点通过指针连接在一起。

下面是基于单链表的栈实现的完整代码示例:

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

class LinkedListStack:
    def __init__(self):
        self.top = None

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

    def pop(self):
        if self.is_empty():
            raise Exception("Stack is empty")
        else:
            popped_node = self.top
            self.top = self.top.next
            return popped_node.data

    def peek(self):
        if self.is_empty():
            raise Exception("Stack is empty")
        else:
            return self.top.data

    def is_empty(self):
        return self.top is None

    def size(self):
        count = 0
        current = self.top
        while current is not None:
            count += 1
            current = current.next
        return count

# 示例:
s = LinkedListStack()
s.push(1)
s.push(2)
s.push(3)
print(s.peek())  # 输出结果:3
print(s.pop())   # 输出结果:3
print(s.pop())   # 输出结果:2
print(s.size())  # 输出结果:1

以上就是基于数组和单链表的两种Python实现栈的方法。通过上述代码示例,我们可以更清晰地了解栈的基本操作以及两种实现方式的异同。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现栈的方法详解【基于数组和单链表两种方法】 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Go语言开源库实现Onvif协议客户端设备搜索

    下面是针对该话题的完整攻略。 1. 什么是 Onvif 协议 Onvif 是一个针对网络视频设备的开放标准,具体来讲,它是一种网络视频设备的控制协议,用于传送视频、音频、元数据等。 2. Go语言开源库实现Onvif协议客户端设备搜索 在 Go 语言社区中,有基于 Onvif 协议的开源库 go-onvif,它提供了一个便捷的方式来构建符合 Onvif 标准…

    GitHub 2023年5月16日
    00
  • 2018年GitHub账户注册图文教程(github从注册到使用)

    2018年GitHub账户注册图文教程(github从注册到使用) 第一步:打开GitHub官网并注册账户 打开GitHub官网(https://github.com/)。 点击右上角的“Sign up”按钮,进入注册页面。 在注册页面中填写账户名、电子邮件和密码,然后点击“Create an account”按钮。 接下来,GitHub将会要求你验证邮箱地…

    GitHub 2023年5月16日
    00
  • Python视频编辑库MoviePy的使用

    当你需要对视频进行编辑时,Python提供了一个非常方便的工具——MoviePy。它可以让你对视频进行裁剪、调整音频、添加特效、字幕等等,这是一个功能强大的视频编辑库。下面是详细的使用攻略: 安装 使用pip安装MoviePy: pip install moviepy 基本用法 导入MoviePy库: from moviepy.editor import *…

    GitHub 2023年5月16日
    00
  • Android Studio 常见问题及解决方法(推荐)

    Android Studio 常见问题及解决方法(推荐) 1. 安装问题 1.1 安装失败 如果 Android Studio 安装过程中失败,通常情况下是由于环境变量或系统权限的问题。为了解决此问题,你可以尝试以下步骤: 确认您的系统符合 Android Studio 的最低要求。 确认你的系统没有被安装其他版本的 JDK(Java Development…

    GitHub 2023年5月16日
    00
  • Vue github用户搜索案例分享

    下面我会详细讲解“Vue github 用户搜索案例分享”的完整攻略并附带两条示例说明。 简介 本次分享的案例是一个基于 Vue.js 的 Github 用户搜索应用,借助 Github 的公共 API 实现了在搜索框中输入用户名后可查看该用户的 Github 账号信息以及其仓库列表。 技术栈 Vue.js:构建用户界面的 MVVM 框架,核心思想是响应式编…

    GitHub 2023年5月16日
    00
  • Go easyjson使用及反射原理

    Go easyjson是一个用于快速序列化和反序列化JSON数据的库,它比标准库中的encoding/json更快,并且支持代码生成以减少运行时的开销。下面是使用easyjson和反射的详细攻略,包含两个示例: 1. 使用easyjson 安装 要使用easyjson,需要安装它的生成器: $ go get github.com/mailru/easyjso…

    GitHub 2023年5月16日
    00
  • Android实现横竖屏切换的实例代码

    让我们来详细讲解“Android实现横竖屏切换的实例代码”的完整攻略。针对这个话题,我们可以采用以下两条示例说明: 示例一:重写onConfigurationChanged方法 重写onConfigurationChanged方法是实现横竖屏切换的一种常见方法。具体操作步骤如下: 打开你的Activity的.java文件 添加以下代码来重写onConfigu…

    GitHub 2023年5月16日
    00
  • kali-linux 202202 安装w3af命令行版的详细过程

    首先,我们需要明确一些前置条件。在安装 w3af 命令行版之前,你需要保证已经成功安装好了 Kali Linux 2022.02 版本,并且当前用户在 root 用户组中有管理员权限。 接下来,我们按照以下步骤来安装 w3af 命令行版: 步骤 1:安装依赖项 在安装 w3af 命令行版之前,我们需要先安装一些依赖项:Python、pip、git、以及一些 …

    GitHub 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部