栈:先进后出的数据结构

一、栈的基本定义

栈(Stack)是一种线性数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后入栈的数据最先弹出)。栈可以简单地看做是一种限制性的单向链表,它限制了只能在链表的一端进行插入和删除操作,这一端称之为栈顶(top),另一端称之为栈底(bottom)。

二、栈的操作

对栈的操作主要有两个:压入和弹出。在栈中压入元素的操作称为push,而弹出元素的操作称为pop。

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

    def push(self, item):
        # 压入元素
        self.stack.append(item)

    def pop(self):
        # 弹出元素
        if not self.is_empty():
            return self.stack.pop()

    def peek(self):
        # 返回栈顶元素
        if not self.is_empty():
            return self.stack[-1]

    def size(self):
        # 返回栈大小
        return len(self.stack)

    def is_empty(self):
        # 判断栈是否为空
        return len(self.stack) == 0

三、栈的应用

1. 表达式求值

栈可以用来求表达式的值,由于表达式的优先级问题,我们需要把中缀表达式转化为后缀表达式。比如a+b*c-d,可以转化为abc*+d-

def evaluate_postfix_expression(expression: str) -> int:
    stack = Stack()
    for i in expression:
        if i.isdigit():
            stack.push(i)
        else:
            num2, num1 = int(stack.pop()), int(stack.pop())
            if i == '+':
                stack.push(num1 + num2)
            elif i == '-':
                stack.push(num1 - num2)
            elif i == '*':
                stack.push(num1 * num2)
            elif i == '/':
                stack.push(num1 / num2)
    return stack.pop()

2. 括号匹配

栈也可以用来匹配括号,比如,判断括号序列是否合法,(()())合法,(()非法。

def is_valid_brackets(s: str) -> bool:
    stack = Stack()
    for i in s:
        if i == '(':
            stack.push(i)
        elif i == ')':
            if stack.is_empty():
                return False
            else:
                stack.pop()
    return stack.is_empty()

3. 函数调用的系统栈

函数的调用关系也可以看做是一种栈的结构,每当一个函数被调用时,系统就会在栈顶记录下来当前的函数调用信息,同时栈指针上移一位,而在一个函数执行完以后,栈顶的函数返回并弹出,此时系统将把执行权向下移交给当前的栈顶函数。

四、栈的优缺点

1. 优点

1. 栈能够保证基本操作的时间复杂度为O(1)。

2. 栈是一种先进后出的数据结构,特别适用于需要倒序输出或倒序执行操作的场景。

3. 栈可以解决一些复杂的问题,比如函数调用等。

2. 缺点

1. 栈的空间固定,一旦栈满就不能再去push数据,容易产生栈溢出的问题。

2. 栈的操作受限,只有栈顶元素可以进行操作,其他位置的元素不能进行操作。

3. 栈不支持随机访问,只能从栈顶往下遍历。

五、总结

本文详细介绍了栈的定义、操作、应用及其优缺点,栈是一种非常重要和实用的数据结构,广泛应用于计算机科学领域。

原创文章,作者:KIMHZ,如若转载,请注明出处:https://www.506064.com/n/368605.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
KIMHZKIMHZ
上一篇 2025-04-12 01:13
下一篇 2025-04-12 01:13

相关推荐

  • 数据结构与算法基础青岛大学PPT解析

    本文将从多个方面对数据结构与算法基础青岛大学PPT进行详细的阐述,包括数据类型、集合类型、排序算法、字符串匹配和动态规划等内容。通过对这些内容的解析,读者可以更好地了解数据结构与算…

    编程 2025-04-29
  • 数据结构学生成绩管理系统

    在现代教育中,学生成绩的管理已经成为了一个不可或缺的部分。借助数据结构,一个高效、可靠的学生成绩管理系统可以被轻松实现。 一、数据结构的选择 在构建学生成绩管理系统时,选择合适的数…

    编程 2025-04-29
  • Python方阵:一种便捷高效的数据结构

    Python方阵是一种非常流行的数据结构,它在各种应用场景中得到了广泛的应用和发展。本文将从多个方面介绍Python方阵的优点、用法和实现方法,供读者参考。 一、Python方阵的…

    编程 2025-04-27
  • MySQL 数据结构的详细阐述

    一、存储引擎 MySQL 数据库使用不同的存储引擎来支持不同的需求,如性能、事务支持、并发性等。目前,MySQL 支持的存储引擎有 MyISAM、InnoDB、Memory、CSV…

    编程 2025-04-23
  • MySQL底层数据结构详解

    一、B+树索引 1、B+树是一种平衡树,它是一种多路查找树,每个节点可以存储多个索引值和相应数据的地址。MySQL使用B+树作为索引结构,B+树的优势在于磁盘I/O瓶颈的优化,它的…

    编程 2025-04-18
  • redismset:实现高效可靠的分布式Set数据结构

    一、基本介绍 redismset是Redis数据库中的一种高效可靠的分布式Set数据结构。它支持添加、删除、查找等基本操作,并且可以在分布式的环境下正常工作。红黑树是redisms…

    编程 2025-02-11
  • 数据结构:从多个方面详细阐述

    一、数据结构的概念 数据结构是计算机科学中一种重要的基础概念,它是指数据对象及其之间的关系,是计算机存储、组织数据的方式。数据结构既包含数据对象的物理结构,也包括它们之间的逻辑联系…

    编程 2025-02-05
  • 深入理解 JavaScript 的 Map 数据结构

    一、Map 数据结构是什么? 在 ES6 之前,JavaScript 中内置的 key-value 序列结构只有 Object 或 Array。ES6 引入了新的数据结构 Map,…

    编程 2025-02-01
  • 算法与数据结构c语言描下载,数据结构与算法分析C++语言描述第三版

    本文目录一览: 1、《数据结构(C语言版)》pdf下载在线阅读全文,求百度网盘云资源 2、《数据结构与算法分析c语言描述第二版》pdf下载在线阅读全文,求百度网盘云资源 3、算法与…

    编程 2025-01-16
  • Shell二维数组实现数据结构

    一、什么是二维数组 在计算机科学中,二维数组是一个数据结构,它是由一些列相同类型的元素组成的,每个元素由一组唯一的引用值(称为索引或下标)标识。当需要存储一些数值、文本或引用变量时…

    编程 2025-01-16

发表回复

登录后才能评论