首页 > 编程语言 >栈的常见操作(Python)

栈的常见操作(Python)

时间:2024-12-26 23:30:05浏览次数:10  
标签:元素 Python self 常见 栈顶 pop 移除 操作 stack

栈的常见操作

1. Push(压栈)

功能
Push 操作是向栈中添加元素,将元素放置在栈顶。栈的特点是后进先出(LIFO),所以元素压入时会覆盖在栈的当前顶端。

使用场景
当我们需要存储临时数据,或者在递归函数调用时保存局部状态,通常会用到 Push 操作。

代码解析

class Stack:
    def __init__(self, capacity):
        self.stack = []  # 使用列表作为栈的存储容器
        self.capacity = capacity  # 设置栈的最大容量

    def push(self, element):
        # 检查栈是否已满
        if len(self.stack) < self.capacity:
            self.stack.append(element)  # 将元素加入栈顶
            print(f"Element {element} pushed to stack.")
        else:
            print("Stack is full. Cannot push element.")  # 如果栈满了,输出提示
  • self.stack.append(element):将元素添加到栈顶(在 Python 中就是将元素加入列表末尾)。
  • 容量检查:每次执行 push 操作时,首先需要检查栈是否已满,避免超过栈的最大容量。

示例输出

stack = Stack(5)
stack.push(10)  # 输出: Element 10 pushed to stack.
stack.push(20)  # 输出: Element 20 pushed to stack.

2. Pop(出栈)

功能
Pop 操作从栈顶移除元素并返回该元素。出栈时,栈顶元素被删除,栈顶指针指向下一个元素。

使用场景
在许多算法中,如深度优先搜索(DFS)、括号匹配、历史记录栈等,我们需要不断移除栈顶元素。

代码解析

    def pop(self):
        # 如果栈不为空,返回并移除栈顶元素
        if len(self.stack) > 0:
            return self.stack.pop()  # pop() 会移除并返回栈顶元素
        else:
            print("Stack is empty. Cannot pop element.")  # 如果栈为空,输出提示
            return None
  • self.stack.pop():调用 pop 方法会移除并返回栈顶元素。在 Python 中,pop() 会删除列表的最后一个元素,并返回该元素。
  • 空栈检查:每次执行 pop 时,必须先检查栈是否为空,避免对空栈执行操作。

示例输出

stack = Stack(5)
stack.push(10)
stack.push(20)
print(stack.pop())  # 输出: 20
print(stack.pop())  # 输出: 10
print(stack.pop())  # 输出: Stack is empty. Cannot pop element.

3. ReadTop(查看栈顶元素)

功能
ReadTop 操作返回栈顶元素但不将其移除。这通常用于查看栈的当前状态,而不改变栈的结构。

使用场景
如果我们想检查栈顶元素但不想删除它,可以使用 ReadTop。例如,在某些算法中需要参考栈顶元素的值,但后续可能还会用到该元素。

代码解析

    def read_top(self):
        # 如果栈不为空,返回栈顶元素但不移除它
        if len(self.stack) > 0:
            return self.stack[-1]  # 返回列表的最后一个元素
        else:
            print("Stack is empty. No top element.")
            return None
  • self.stack[-1]:在 Python 中,负索引 -1 指向列表的最后一个元素,即栈顶元素。
  • 空栈检查:如果栈为空,返回 None 并提示栈为空。

示例输出

stack = Stack(5)
stack.push(10)
stack.push(20)
print(stack.read_top())  # 输出: 20

4. Peek(移除并返回栈顶元素,同时更新栈顶指针)

功能
Peek 操作既会移除栈顶元素,又会返回该元素。在执行 Peek 后,栈顶指针会向下移动,指向下一个元素。

使用场景
Peek 操作通常在某些特定场合中使用,比如在解析表达式、匹配括号时需要实时移除栈顶元素。

代码解析

    def peek(self):
        # 如果栈不为空,移除并返回栈顶元素
        if len(self.stack) > 0:
            return self.stack.pop()  # 调用 pop() 即可移除并返回栈顶元素
        else:
            print("Stack is empty. Cannot peek.")
            return None
  • 这里的 peekpop 很相似,不同的是它在返回栈顶元素后会直接更新栈的结构,即移除该元素。

示例输出

stack = Stack(5)
stack.push(10)
stack.push(20)
print(stack.peek())  # 输出: 20,并移除它

5. IsEmpty(栈是否为空)

功能
IsEmpty 操作用于检查栈是否为空。如果栈内没有任何元素,返回 True,否则返回 False

使用场景
在执行 poppeek 操作前,通常需要先检查栈是否为空,以防止出现空栈错误。

代码解析

    def is_empty(self):
        return len(self.stack) == 0  # 如果栈中元素个数为0,说明栈为空
  • len(self.stack) == 0:通过检查栈的长度是否为 0 来判断栈是否为空。

示例输出

stack = Stack(5)
print(stack.is_empty())  # 输出: True
stack.push(10)
print(stack.is_empty())  # 输出: False

6. IsFull(栈是否已满)

功能
IsFull 操作用于检查栈是否已满。如果栈已达到预设容量,返回 True,否则返回 False

使用场景
IsFull 操作通常在执行 Push 操作前调用,确保不会向已经满的栈中添加新元素。

代码解析

    def is_full(self):
        return len(self.stack) == self.capacity  # 栈满时,长度等于容量
  • len(self.stack) == self.capacity:通过比较栈的长度与设定的容量来判断栈是否已满。

示例输出

stack = Stack(3)
print(stack.is_full())  # 输出: False
stack.push(10)
stack.push(20)
stack.push(30)
print(stack.is_full())  # 输出: True

标签:元素,Python,self,常见,栈顶,pop,移除,操作,stack
From: https://blog.csdn.net/2302_79730293/article/details/144705966

相关文章

  • OpenCV计算机视觉 03 椒盐噪声的添加与常见的平滑处理方式(均值、方框、高斯、中值)
    上一篇文章:OpenCV计算机视觉02图片修改图像运算边缘填充阈值处理添加椒盐噪声defadd_peppersalt_noise(image,n=10000):  result=image.copy()  h,w=image.shape[:2]  #获取图片的高和宽  foriinrange(n):  #生成n个椒盐噪声  ......
  • Python 项目组织最佳实践:从脚本到大型项目的进化之路
    在Python开发生涯中,相信很多人都是从写简单脚本开始的。随着项目规模扩大,我们会遇到各种项目组织的问题。今天,让我们从一个实际场景出发,看看如何一步步优化Python项目结构,实现从简单脚本到专业项目的进化。从一个数据处理需求说起假设我们需要处理一些日志文件,提取其中的错......
  • Bash 将 Python 列表格式的字符串转为空格分隔字符串的 N 种方法
    MY_LIST='["item1","item2","item3"]'echo"Originallist:$MY_LIST"MY_LIST_CONVERTED=$(echo$MY_LIST|sed's/\[//g'|sed's/\]//g'|sed's/"//g'|sed's/,//......
  • Python运算符
    前言随着人工智能的不断发展,python这门技术也越来越重要,很多人都开启了python学习,本文就介绍了python的基础内容——Python运算符。一、Pathon运算符是什么?Python运算符包含了算数运算符、赋值运算符、比较运算符、逻辑运算符、其他运算符。接下来我们说一下各个运算符的代......
  • 【java毕设 python毕设 大数据毕设】基于springboot校园失物招领系统的设计与实现 适
    ✍✍计算机编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java实战|SpringBoot/SSMPython实战项目|Django微信小程......
  • 【java毕设 python毕设 大数据毕设】基于springboot的小学生古诗词学习软件的设计与实
    ✍✍计算机编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java实战|SpringBoot/SSMPython实战项目|Django微信小程......
  • Spring常见的77道面试题及答案
    一、Spring概述1.什么是spring?2.Spring框架的设计目标,设计理念,和核心是什么?3.Spring的优缺点是什么?4.Spring有哪些应用场景5.Spring由哪些模块组成?6.Spring框架中都用到了哪些设计模式?7.详细讲解一下核心容器(springcontext应用上下文)模块8.Spring框架中有......
  • 数据链中常见电磁干扰matlab仿真,对比噪声调频,线性调频,噪声,扫频,灵巧五种干扰模型
    1.算法运行效果图预览(完整程序运行后无水印)   2.算法运行软件版本matlab2022a 3.部分核心程序(完整版代码包含详细中文注释和操作步骤视频) %噪声调频干扰............................................%调频指数uj=1;mf=0.6;wpp=6;df1=fs/......
  • python的网页自动化工具DrissionPage
    一直以来用的都是Python+Selenium实现自动化。直到发现了DrissionPage,实际用过之后写脚本速度提高了100%,执行效率提高了50%。代码简洁,功能强大,Selenium代码迁移也很丝滑。 概述基于python的网页自动化工具。既能控制浏览器,也能收发数据包。可兼顾浏览器自动化的便利性和re......
  • python3启动一个本地http服务器
    在win10系统中,使用python版本为Python3.6.3 编写index.html网页在当前目录F:\httpTest下,新建index.html,内容如下:<!DOCTYPEhtml><head><metacharset="utf-8"><title>HttpTest</title><style>div{......