数据结构4 栈(Stack)

C# Stack源码剖析 Stack(栈)表示对象的后进先出 (LIFO) 集合。实现了ICollection接口。概念 定义:限定仅在表尾进行插入或删除操作的线性表,表尾对应栈顶,表头对应栈底,不含元素的栈称为空栈。 阅读详情
  1. 栈:先进后出。
    基于链表创建的。
  2. 应用:
  • 浏览器后退功能。
  • 子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。类似return语句
  • 处理递归调用:和子程序的调用类似,只是除了存储下一个指令的地址外,也将参数、区域变量等数据存入堆栈中。
  • 表达式的转换【中缀表达式转后缀表达式】与求值(实际解决)
  • 二叉树的遍历
  • 图形的深度优先(depth-first)搜索法
  1. 复杂度:
  • 访问: O(1)
    只访问栈顶元素。
  • 搜索:O(N)
  • 插入: O(1)
    只在栈的尾端插入。
  • 删除: O(1)
    只删除栈顶元素。
  1. Python栈的常用操作:
  • 创建栈
stack = []
  • 添加元素
stack.append(1)
stack.append(2)
stack.append(3)
  • 查看栈顶元素 – 即将出栈的元素
stack[-1]
  • 删除栈顶元素 – 即将出栈的元素
temp = stack.pop()
  • 栈的长度
len(stack)
  • 栈是否为空
len(stack) == 0
  • 遍历栈(边删除栈顶元素,边遍历)
while len(stack) > 0:
	temp = stack.pop()
	print(temp)
  1. java栈的常用操作:
  • 创建栈
Stack<Integer> stack = new Stack<>();
  • 添加元素
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack.toString());
  • 查看栈顶元素 – 即将出栈的元素
stack.peek();
  • 删除栈顶元素 – 即将出栈的元素
int temp = stack.pop();
System.out.println(temp);
  • 栈的长度
stack.size();
  • 栈是否为空
stack.isEmpty();
  • 遍历栈(边删除栈顶元素,边遍历)
while (!stack.isEmpty()){
    int num = stack.pop();
    System.out.println(num);
}
  1. 例题
    在这里插入图片描述
class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for(char i:s.toCharArray()){
            if (i == '(' || i == '[' || i == '{'){
                stack.push(i);
            }
            else{
                if(stack.size() == 0){
                    return false;
                }
                else{
                    char temp = stack.pop();
                    if(i == ')'){
                        if(temp != '('){
                            return false;
                        }
                    }
                    else if(i == ']'){
                        if(temp != '['){
                            return false;
                        }
                    }
                    else{
                        if(temp != '{'){
                            return false;
                        }
                    }
                }
            }
        }
        if (stack.size() == 0){
            return true;
        }
        else{
            return false;
        }
    }
}
class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        for i in s:
            if i == "(" or i == "[" or i == "{":
                stack.append(i)
            else:
                if len(stack) == 0:
                    return False
                else:
                    temp = stack.pop()
                    if i == ")":
                        if temp != "(":
                            return False
                    elif i == "]":
                        if temp != "[":
                            return False
                    elif i == "}":
                        if temp != "{":
                            return False
        if len(stack) == 0:
            return True
        else:
            return False

在这里插入图片描述

class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        res = []
        stack = []
        for i in nums2:
            stack.append(i)
        for num in nums1:
            temp = []
            isFound = False
            max = -1
            while(len(stack)!=0 and isFound == False):
                top = stack.pop()
                if top > num:
                    max = top
                elif top == num:
                    isFound = True
                temp.append(top)
            res.append(max)
            while(len(temp)!=0):
                stack.append(temp.pop())
        return res
数据结构之栈与Java中的Stack、Deque 栈 1.栈的定义 2.栈类型、结构及其特点 3.顺序栈的基本功能实现 4.链式栈的基本功能实现 Stack 1.Stack介绍 2.Stack部分源码分析 3.为什么说Stack是不优良的设计 Deque 1.使用Deque代替Stack 2.ArrayDeque部分源码分析 3.再谈LinkedList 总结 ... 阅读详情

相关推荐

4、探索数据结构与算法:深入理解栈(Stack)

本文深入介绍了数据结构中的栈(Stack),详细讲解了栈的基本概念、操作、数组和链表的两种实现方式,并结合Go语言示例展示了其具体应用。文章涵盖了栈在函数调用、编译器语法检查、表达式求值、括号匹配等场景的应用,同时探讨了栈的优化方法及与其他数据结构的结合使用,帮助读者全面掌握栈的核心知识及其实际用途。

resnet7explorer的博客 47

Python实现Stack堆栈

通过列表的pop方法(删除一个列表元素并且将这个列表元素返回给调用者)和append(在列表后面追加一个元素)的结合,可以实现堆栈操作,pop()可以返回一个列表中的最后一个元素,通过定义一个count用来计数,用来记录入栈的元素个数,防止栈溢出或者出栈一个空列表。 class Stack(): def __init__(self, size): self.size ...

只想整天学习 2706

对python中的pop函数和append函数详解

pop()函数 1、描述 pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。 语法 pop()方法语法: list.pop(obj=list[-1]) 2、参数 obj – 可选参数,要移除列表元素的对象。 3、返回值 该方法返回从列表中移除的元素对象。 4、实例 以下实例展示了 pop()函数的使用方法: #!/usr/bin/python aList = [123, 'xyz', 'zara', 'abc']; print "A List : ", aList.pop(); print "B List : ", aList.pop(2); 以上实例输出

LeetCode20题:有效的括号(Python)

#主要的思路就是遍历字符串,遇到左括号就将对应的右括号压入列表然后取出与左括号匹配 #不同情况:1.括号的个数为奇数(){,对应的代码是 if len(s) % 2 == 1:return False # 2.类型不匹配[},对应的代码是bracket!=stack.pop() # 3.以右括号开始或者右括号多了出来(、([{}]))),对应代码是elif len(stack)==0 # 4.左括号((多了出来,对应的代码是retur

qq_45451226的博客 262

Python基于list的append和pop方法实现堆栈与队列功能示例

主要介绍了Python基于list的append和pop方法实现堆栈与队列功能,结合实例形式分析了Python使用list定义及使用队列的相关操作技巧,需要的朋友可以参考下

告别电机啸叫!手把手教你配置TMC5160的StealthChop2静音模式(附参数自整定避坑指南)

本文详细介绍了如何通过配置TMC5160的StealthChop2模式彻底消除3D打印机电机噪音。从硬件准备到参数自整定,再到高级调优与异常处理,手把手教你实现实验室级别的静音效果,提升打印质量和使用体验。

weixin_33724659的博客 488

python中stack的用法_python中实现栈的三种方法

栈是一种线性数据结构,用先进后出或者是后进先出的方式存储数据,栈中数据的插入删除操作都是在栈顶端进行,常见栈的函数操作包括empty()– 返回栈是否为空 – Time Complexity : O(1)size()–返回栈的长度 – Time Complexity : O(1)top()– 查看栈顶元素 – Time Complexity : O(1)push(g)– 向栈顶添加元素 ...

weixin_32479557的博客 1万+

别再乱刷了!《另一个伊甸》异节、改典、典录获取途径完全梳理,这些隐藏奖励你拿全了吗?

本文全面解析《另一个伊甸》中异节、改典、典录的获取途径,包括断章、外传、精灵试炼等高概率掉落副本,以及隐藏任务、限时活动和特殊挑战。提供高效收集策略和优先级建议,帮助玩家快速获取这些稀缺资源,实现角色真证和上限突破。

weixin_42699679的博客 592

python中stack()_Python中的堆栈和队列,python,之栈,stack,queue

栈和队列是两种常用的,重要的数据结构。栈和队列是限定插入和删除只能在表的“端点”进行的线性表。【栈】特点:后进先出1,创建栈(借助列表)stack = list()print(stack)[]2,判断是否为空栈stack = list()print(stack)if not stack:print('为空栈')else:print('不是空栈')[]为空栈3,添加元素(进栈)stack = lis...

weixin_39628380的博客 1294

CHI里的Error handling机制

本文讲解了CHI里的Error handling机制。

W1Z1Q的专栏 2500

开源项目 ruoyi-sso-oauth2(一)环境配置

Ruoyi若依实现单点登录SSO、oauth2认证

Xiaoweidumpb 9684

python 栈

       栈是线性的集合,其中,访问都严格的限制在一端,也叫作顶(top)。栈是遵从后进先出(LIFO)的协议,从栈放入项和从栈删除项的操作分别叫压人(push)和弹出(pop)。        栈并不是Python的内建类型,Python程序员在必要的时候可以使用列表来模拟基于数组的栈。如果将列表的末尾看作是栈的顶,列表方法append就是将元素压入到栈中,而列表方法pop会删除并返回栈顶...

Shirven 1万+

基于STM32、HAL库的W25Q01JVZEIQ TR FLASH存储器驱动应用程序设计

1Gb (128MB),分为512个可擦除块(block),每个块256KB。:块擦除约30-50ms,芯片擦除约30s。:标准SPI (支持1/2/4线模式)// 初始化CS引脚为高电平。// 擦除扇区(4KB)// 初始化Flash。/* 状态寄存器位 *//* 指令定义 *//* 超时定义 *//* 函数声明 */

corlin6688的博客 267

跟我学数据结构:(4) 栈 (Stack)

TAO工作室Stone Jiang的专栏 1797

知识图谱实战应用8-从文本关系抽取到知识图谱关系构建流程贯通

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用8-从文本关系抽取到知识图谱关系构建流程贯通。我们从文本数据中采集到关键信息,并抽取出其中的关系信息,然后在存入图数据库中,整个过程实现自动化,我这里将举一个文本例子进行抽取。 对于知识图谱的构建是将实体、概念和它们之间的关系都以图表形式呈现出来的一种数据结构。要构建一个知识图谱,需要从不同的数据源中采集到相关信息,并将这些信息整合在一起,最终形成一个全面而且精确的知识图谱。

微学AI的博客 2545

零基础学习CANoe Panel(5)——改变变量的值,控件图像也改变,这是怎么回事?

Panel 中控件的图像随着值变化,是怎么回事?

蚂蚁小兵 2146

数据结构4-栈(stack)

栈(stack) 栈,其实就是————————杯子,没错,假设,你向杯子里放了一个网球(其实我也不知道我为什么要往杯子里放个球…),一个乒乓球,一个高尔夫……然后你要取出来,怎么取呢?是不是应该先是高尔夫,然后是乒乓球,最后是网球,栈就是这样一个底部封死的东西,如图,先进来的最后出去,后进来的先出去。好像并没有说明卵用…… 使用条件:对于先进后出的情况 函数: - XXX.push(...

LiuKairui的博客 436

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数据结构与算法——4. 线性结构之栈(Stack)

文章目录一、栈(Stack)1. 栈的定义2. 栈的特性:反转次序3. 使用python实现栈二、栈的应用:括号的嵌套匹配1. 括号的使用规则2. 识别括号的嵌套是否正确 一、栈(Stack) 1. 栈的定义 栈是一种有次序的数据项集合,在栈中,数据项的添加和移除都仅发生在同一端,这一端叫“栈顶stack top”。而另一端叫“栈底stack base”。 在读取数据时,最后加入的数据项放在栈顶,会被第一个取出。而最先加入的数据项放在栈低,只能在所有数据项被取完后,最后一个取出。这种次序被称为“先进后出LI

花城的博客 1157

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

数据结构-数组实现栈

/** * 用数组实现栈结构 * @author : wangtb * @date : 2019-10-04 22:50 */ public class Array2Stack { private Integer[] arr; private Integer index; public Array2Stack(int initSize) { i...

abs.征召 143

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据结构----栈(Stack,顺序存储)C++模板

C++栈模板(顺序存储) const int max_size = 100; template<typename Stack_entry> class Stack { public: Stack() :count(0) {} void push(const Stack_entry &x); void pop(); const Stack_entry &top() const; size_t size() const { return count; } void cl

Aiden的博客 306

【JavaSE与数据结构】栈与Stack类

本篇文章带大家认识Java集合——Stack,Stack就是栈的意思,是一种数据结构,又叫先进后出表,本文首先会介绍数据结构《栈》,了解清楚栈的特点与性质,然后会根据栈的性质简单来模拟栈以及集合框架Stack类常见方法的使用。 Tips:数据结构——链表,在博主的历史文章中介绍过并通过Java和C语言都实现模拟过,所以对链表不再多赘述,集合框架中LinkedList类底层就是使用双链表实现的,因此在Java中可以使用LinkedList对象来使用链表,如果对链表不了解,可以去博主数据结构与算法专栏了解。

未见花闻的博客 1755

C++数据结构之:栈Stack

it人员无论是使用哪种高级语言开发东东,想要更高效有层次的开发程序的话都躲不开三件套:数据结构,算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构。此系列专注讲解数据结构数组、链表、队列、栈、树、哈希表、图,通过介绍概念以及提及一些可能适用的场景,并以C++代码简易实现,多方面认识数据结构,最后为避免重复造轮子会浅提对应的STL容器。本文介绍的是栈Stack。

weixin_45068267的博客 1751

Java中栈(Stack)用法

java 栈 stack

Sueko的博客 3万+

C++ 栈函数stack用法

C++ Stack(栈)提供了堆栈的全部功能,换句话说就是这里面已经实现了一个先进后出的数据结构。不需要我们再去重新定义各种函数,简化开发过程。 c++ stl栈stack的头文件书写格式为: #include<stack> 实例化形式如下: stack<type> StackName; 其中成员函数如下: 1、检验堆栈是否为空 empty() 堆栈为空则返回真 形式如...

Clown_pan的博客 1万+

数据结构-Stack和栈

栈是一种特殊的线性表,只允许在固定的一段进行插入和删除操作,进行插入和删除操作的一段称为栈顶,另一端称为栈底。栈中的数据元素遵顼后进先出LIFO(Last In First Out)的原则,就像一叠盘子,只能在顶部添加或移除盘子。压栈:栈的插入操作叫做压栈/进栈/入栈,新插入的元素在栈顶。出战:栈的删除操作叫做出栈,要删除的 元素在栈顶。从图上观察发现:无论是插入还是删除操作,栈底的位置不发生变化,但是栈顶的位置会随插入或删除操作而发生变化。

2301_76928097的博客 1630
上一篇: 数据结构3 队列(Queue)
下一篇: 数据结构5 哈希表(Hash Table)
Neflibata_mo
博客等级 码龄6年 6粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值