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

首先我们需要了解什么是栈。栈是一种后进先出(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日

相关文章

  • SpringBoot+Dubbo+Zookeeper实现简单分布式开发的应用详解

    让我来给你讲解一下“SpringBoot+Dubbo+Zookeeper实现简单分布式开发的应用详解”的完整攻略。 简介 在分布式系统中,不同的业务模块需要部署在不同的服务器上,而这些服务器之间需要进行协调,才能保证各个模块能够协作工作。Dubbo是阿里巴巴开发的高性能RPC框架,其主要的作用就是为分布式应用提供了远程服务调用的支持。而Zookeeper则是…

    GitHub 2023年5月16日
    00
  • go mod的使用方法小结

    下面我就来详细讲解一下“go mod的使用方法小结”的完整攻略,以及两条示例说明。 什么是go mod 在Go1.11版本中引入的go mod,是一个用于管理依赖项的工具。它可以将应用程序的依赖项转化为模块,并下载它们的代码。Go mod 还具有版本控制的功能,可以确保在编译代码时使用的依赖项版本是稳定的。使用 go mod 可以方便地解决 Go 语言依赖管…

    GitHub 2023年5月16日
    00
  • 使用Git向GitHub上传更新内容

    请允许我对使用Git向GitHub上传更新内容的完整攻略进行详细讲解,请参考以下步骤: 第一步:在GitHub上创建repository 在GitHub上创建一个repository,可以点击网页右上角“New”按钮。填写repository的名称、简介、选择开放性、是否添加README等信息,最后点击“Create Repository”按钮完成创建。 第…

    GitHub 2023年5月16日
    00
  • go run main.go 一直提示找不到包的解决方案

    当我们使用命令 “go run main.go” 运行程序时,有时会出现找不到包的错误。这通常是因为代码引入的依赖包不存在或者没有正确安装在 GOPATH 目录中。 为解决此类问题,以下是一些常见的解决方案: 解决方案一:将依赖包导入 GOPATH 在 Go 中,导入的包需要在 GOPATH 环境变量中找到。所以当使用命令 “go run main.go” …

    GitHub 2023年5月16日
    00
  • vue项目实现github在线预览功能

    首先,我们需要在Github上创建一个仓库来存储我们的Vue项目代码。在仓库中创建一个叫做gh-pages的分支,以便我们可以将我们的Vue项目部署到该分支上。接下来,我们在本地计算机上克隆该仓库,以便可以在本地进行代码编辑和调试。 第一条示例: 1. 在Vue项目的根目录中安装`gh-pages`包(使用npm或yarn): npm install gh-…

    GitHub 2023年5月16日
    00
  • npm安装vue@cli报错的简单处理方式

    当使用NPM安装Vue CLI时,可能会遇到某些问题。本攻略将简述两种可能的错误消息及其解决方案。 问题描述 安装Vue CLI时可能会出现以下两种错误消息: 错误1: npm ERR! code ECONNRESET错误2: npm ERR! code 1 解决方案 解决方案1:ECONNRESET错误 该错误消息属于网络错误,有许多原因可能导致该错误,但…

    GitHub 2023年5月16日
    00
  • 关于go-zero单体服务使用泛型简化注册Handler路由的问题

    当我们使用go-zero开发单体服务时,可能会遇到需要注册多个handler路由的情况,而这些handler的参数和返回值类型往往是类似的,这时就可以考虑使用泛型来简化注册过程。 具体步骤如下: 创建接口定义 首先,我们需要定义一个公共的接口,该接口包含了参数和返回值类型相同的方法定义,如下所示: type CommonService interface {…

    GitHub 2023年5月16日
    00
  • 使用git命令将本地代码上传到GitHub

    使用git命令将本地代码上传到GitHub分为以下几个步骤: 步骤一:创建GitHub仓库并获取仓库地址 在GitHub网站上创建一个仓库,获得一个仓库地址。在这个仓库地址中“用户名”是你的GitHub账户的用户名,”仓库名”是你要创建的仓库的名字,仓库地址类似于 https://github.com/用户名/仓库名.git。 步骤二:本地创建Git仓库 在…

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