精华内容
下载资源
问答
  • 详细内容python栈是什么意思?栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。由于栈具有后入先出的特点,所以任何不在栈顶的...

    详细内容

    328a3f403c6ebc4f42024b82181fff94.png

    python栈是什么意思?

    栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。

    由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元素,必须先拿掉上面的元素。

    对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。入栈使用push()方法,出栈使用pop()方法。

    另一个常用的操作是预览栈顶的元素。pop()方法虽然可以访问栈顶的元素,但是调用该方法后,栈顶元素也从栈中被永久性地删除了。peek()方法则只返回栈顶元素,而不删除它。

    为了记录栈顶元素的位置,同时也为了标记哪里可以加入新元素,我们使用变量top,当向栈内压入元素时,该变量增大;从栈内弹出元素时,该变量减小。

    push()、pop()和peek()是栈的3个主要方法,但是栈还有其他方法和属性。

    stack通常的操作:Stack() 建立一个空的栈对象

    push() 把一个元素添加到栈的最顶层

    pop() 删除栈最顶层的元素,并返回这个元素

    peek() 返回最顶层的元素,并不删除它

    isEmpty() 判断栈是否为空

    size() 返回栈中元素的个数

    简单案例以及操作结果:

    398981e9b8173a42b149cea76968a0c0.png

    这里使用python的list对象模拟栈的实现:class Stack:

    """模拟栈"""

    def __init__(self):

    self.items = []

    def isEmpty(self):

    return len(self.items)==0

    def push(self, item):

    self.items.append(item)

    def pop(self):

    return self.items.pop()

    def peek(self):

    if not self.isEmpty():

    return self.items[len(self.items)-1]

    def size(self):

    return len(self.items)

    创建一个栈对象,并加入操作方法:s=Stack()

    print(s.isEmpty())

    s.push(4)

    s.push('dog')

    print(s.peek())

    s.push(True)

    print(s.size())

    print(s.isEmpty())

    s.push(8.4)

    print(s.pop())

    print(s.pop())

    print(s.size())

    相关推荐:《Python教程》

    展开全文
  • python栈是什么意思?栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法...

    a88b85cd606e1e4147d28797d62ac6d3.png

    python栈是什么意思?

    栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。

    由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元素,必须先拿掉上面的元素。

    对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。入栈使用push()方法,出栈使用pop()方法。

    另一个常用的操作是预览栈顶的元素。pop()方法虽然可以访问栈顶的元素,但是调用该方法后,栈顶元素也从栈中被永久性地删除了。peek()方法则只返回栈顶元素,而不删除它。

    为了记录栈顶元素的位置,同时也为了标记哪里可以加入新元素,我们使用变量top,当向栈内压入元素时,该变量增大;从栈内弹出元素时,该变量减小。

    push()、pop()和peek()是栈的3个主要方法,但是栈还有其他方法和属性。

    stack通常的操作:Stack() 建立一个空的栈对象

    push() 把一个元素添加到栈的最顶层

    pop() 删除栈最顶层的元素,并返回这个元素

    peek() 返回最顶层的元素,并不删除它

    isEmpty() 判断栈是否为空

    size() 返回栈中元素的个数

    简单案例以及操作结果:

    cda8d531803a2e27fa44cb08e15cb190.png

    这里使用python的list对象模拟栈的实现:class Stack:

    """模拟栈"""

    def __init__(self):

    self.items = []

    def isEmpty(self):

    return len(self.items)==0

    def push(self, item):

    self.items.append(item)

    def pop(self):

    return self.items.pop()

    def peek(self):

    if not self.isEmpty():

    return self.items[len(self.items)-1]

    def size(self):

    return len(self.items)

    创建一个栈对象,并加入操作方法:s=Stack()

    print(s.isEmpty())

    s.push(4)

    s.push('dog')

    print(s.peek())

    s.push(True)

    print(s.size())

    print(s.isEmpty())

    s.push(8.4)

    print(s.pop())

    print(s.pop())

    print(s.size())

    相关推荐:《Python教程》

    展开全文
  • 后来才好像明白是什么意思… 假设有一串数字要将他们压栈: 1 2 3 4 5 如果这个栈是很大很大,那么一次性全部压进去,再出栈:5 4 3 2 1 但是,如果这个栈高度为4,会发生什么? 1 2 3 4都顺利入栈,但是满了,那么...

    一、弹栈顺序

    在这里插入图片描述

    解题思路
    一开始都看不懂题目…

    后来才好像明白是什么个意思…

    假设有一串数字要将他们压栈: 1 2 3 4 5

    如果这个栈是很大很大,那么一次性全部压进去,再出栈:5 4 3 2 1

    但是,如果这个栈高度为4,会发生什么? 1 2 3 4都顺利入栈,但是满了,那么要先出栈一个,才能入栈,那么就是先出4,然后压入5,随后再全部出栈:4 5 3 2 1

    那么我总结了所有可能的出栈情况:

    5 4 3 2 1//栈高度为5

    4 5 3 2 1//栈高度为4

    3 4 5 2 1//栈高度为3

    2 3 4 5 1//栈高度为2

    1 2 3 4 5//栈高度为1

    借助一个辅助的栈,遍历压栈的顺序,依次放进辅助栈中。

    对于每一个放进栈中的元素,栈顶元素都与出栈的popIndex对应位置的元素进行比较,是否相等,相等则popIndex++,再判断,直到为空或者不相等为止。

    public class Solution {
        public boolean IsPopOrder(int [] pushA,int [] popA) {
            //数组为空的情况
            if(pushA.length == 0 || popA.length == 0){
                return false;
            }
     
            //弹出序列的下表索引
            int popIndex = 0;
     
            //辅助栈
            Stack<Integer> stack = new Stack<Integer>();
     
            for(int i=0;i<pushA.length;i++){
                //不停地将pushA中的元素压入栈中,一旦栈顶元素与popA相等了,则开始出栈
                //不相等则继续入栈
                stack.push(pushA[i]);
                while(!stack.isEmpty() && stack.peek()==popA[popIndex]){
                    stack.pop();
                    popIndex++;
                }
            }
            //栈中没有元素了说明元素全部一致,并且符合弹出顺序,那么返回true
            return stack.isEmpty();
        }
    }
    

    二、丑数

    在这里插入图片描述
    通俗易懂的解释:
    首先从丑数的定义我们知道,一个丑数的因子只有2,3,5,那么丑数p = 2 ^ x * 3 ^ y * 5 ^ z,换句话说一个丑数一定由另一个丑数乘以2或者乘以3或者乘以5得到,那么我们从1开始乘以2,3,5,就得到2,3,5三个丑数,在从这三个丑数出发乘以2,3,5就得到4,6,10,6,9,15,10,15,25九个丑数,我们发现这种方***得到重复的丑数,而且我们题目要求第N个丑数,这样的方法得到的丑数也是无序的。那么我们可以维护三个队列:
    (1)丑数数组: 1
    乘以2的队列:2
    乘以3的队列:3
    乘以5的队列:5
    选择三个队列头最小的数2加入丑数数组,同时将该最小的数乘以2,3,5放入三个队列;
    (2)丑数数组:1,2
    乘以2的队列:4
    乘以3的队列:3,6
    乘以5的队列:5,10
    选择三个队列头最小的数3加入丑数数组,同时将该最小的数乘以2,3,5放入三个队列;
    (3)丑数数组:1,2,3
    乘以2的队列:4,6
    乘以3的队列:6,9
    乘以5的队列:5,10,15
    选择三个队列头里最小的数4加入丑数数组,同时将该最小的数乘以2,3,5放入三个队列;
    (4)丑数数组:1,2,3,4
    乘以2的队列:6,8
    乘以3的队列:6,9,12
    乘以5的队列:5,10,15,20
    选择三个队列头里最小的数5加入丑数数组,同时将该最小的数乘以2,3,5放入三个队列;
    (5)丑数数组:1,2,3,4,5
    乘以2的队列:6,8,10,
    乘以3的队列:6,9,12,15
    乘以5的队列:10,15,20,25
    选择三个队列头里最小的数6加入丑数数组,但我们发现,有两个队列头都为6,所以我们弹出两个队列头,同时将12,18,30放入三个队列;
    ……………………
    疑问:
    1.为什么分三个队列?
    丑数数组里的数一定是有序的,因为我们是从丑数数组里的数乘以2,3,5选出的最小数,一定比以前未乘以2,3,5大,同时对于三个队列内部,按先后顺序乘以2,3,5分别放入,所以同一个队列内部也是有序的;
    2.为什么比较三个队列头部最小的数放入丑数数组?
    因为三个队列是有序的,所以取出三个头中最小的,等同于找到了三个队列所有数中最小的。

    public class GetUglyNumber_Solution {
        Queue<Integer> queue2 = new LinkedList<>();
        Queue<Integer> queue3 = new LinkedList<>();
        Queue<Integer> queue5 = new LinkedList<>();
        List<Integer> res = new ArrayList<>();
        public int GetUglyNumber_Solution(int index) {
            if(index<=0)
                return 0;
            res.add(1);
            while (res.size()<index){
                queue2.offer((res.get(res.size()-1))*2);
                queue3.offer((res.get(res.size()-1))*3);
                queue5.offer((res.get(res.size()-1))*5);
                int min = 1;
                while (res.contains(min)){
                    min = Math.min(queue2.peek(),Math.min(queue3.peek(),queue5.peek()));
                    if(min==queue2.peek())
                        queue2.poll();
                    else if(min==queue3.peek())
                        queue3.poll();
                    else
                        queue5.poll();
                }
                res.add(min);
            }
            return res.get(res.size()-1);
        }
    }
    
    展开全文
  • 题目描述 输入两个整数序列,第一个序列表示的压入顺序,请判断第二个序列是否可能为该出顺序。 假设压入栈的所有数字均不相等。例如序列1,2,3,4,5某...什么意思呢?简单的说就是给你序列,让你通过一...

    题目描述

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序
    假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

    newcoder 题目链接

    题解


    以下为2019.06.08 更新

    class Solution {
    public:
        bool IsPopOrder(vector<int> pushV,vector<int> popV) {
            /**
             * 借助一个栈吧
             */
            if (pushV.empty() || popV.empty() || pushV.size() != popV.size())
            {
                return false;
            }
            
            int size = static_cast<int>(pushV.size());
            int index = 0;
            std::stack<int> s;
            for (int i = 0; i < size; ++i)
            {
                // 如果栈为空,或者栈顶元素不为 popV[i] 的元素,就一直压栈
                // 如果 pushV 的所有元素都压入栈中了,就直接 return false
                while(s.empty() || s.top() != popV[i])
                {
                    s.push(pushV[index]);
                    ++index;
                    if (index > size)
                    {
                        return false;
                    }
                }
                // 能走到这里,说明s.empty() == false 并且 s.top() == popV[i]
                // 直接出栈,比较后面的元素呗
                s.pop();
            }
            
            if (s.empty())
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    };
    

    以上为 2019.06.08 更新

    什么意思呢?简单的说就是给你序列,让你通过一个栈的 push 和 pop 操作,来匹配另一个序列,如果匹配就返回 true,不匹配返回 false
    借用一个辅助的栈,遍历压栈顺序,
    先将第一个放入栈中,这里是1,
    然后判断栈顶元素是不是出栈顺序的第一个元素

    这里是4,很显然1≠4,
    所以我们继续压栈,直到相等以后开始出栈,
    出栈一个元素,则将出栈顺序向后移动一位,直到不相等,
    这样循环等压栈顺序遍历完成,
    如果辅助栈还不为空,说明弹出序列不是该栈的弹出顺序。

    代码附上:

    class Solution {
    public:
        bool IsPopOrder(std::vector<int> pushV,std::vector<int> popV) {
            
            if(pushV.size() != popV.size())
            {
                return false;
            }
            std::stack<int> st;
            int index = 0;
            int size = (int)pushV.size();
            for(int i = 0; i < size; ++i)
            {
                while(st.empty() || st.top() != popV[i])
                {
                    st.push(pushV[index++]);
                    if(index > size)
                    {
                        return false;
                    }
                }
    
                st.pop();
            }
    
            if(!st.empty())
            {
                return false;
            }
            else
            {
                return true;
            }
        }
    
    };
    

    成功通过 newcoder 所有测试用例


    有问题欢迎留言,
    有更好的解法,还请不吝赐教
    谢谢你的浏览 ?

    展开全文
  • 题目:输入两个整数序列,第一个序列表示的压入顺序,请判断第二个序列是否为该出顺序。假设压入栈的所有数字均不相等。... 这道题我开始都没看懂是什么意思,序列{1,2,3,4,5}压栈之后,出栈不就是{5...
  • 输入两个整数序列,第一个序列表示的压入顺序,请判断第二个序列是否可能为该出顺序。假设压入栈的所有数字...这道题卡了很久都不知道是什么意思。 下面结合代码讲解一下。 看出序列4 5321,说明最后一个...
  • (,先进后出,后进先出)。main函数调用main 中查找内建函数print压栈,将常量字符串压栈,调用函数,出栈顶。main中全局函数foo1压栈,将常量100,101压栈,调用函数foo1,创建栈帧。Print函数压栈,字符串和变量...
  • /*** User: jifei* Date: 2013-07-30* Time: 23:12*//*** PHP实现双向队列,双端队列* 双端队列(deque,全名double-ended queue)一种具有队列和性质的数据结构。* 双端队列中的元素可以从两端出,插入和删除...
  • #define WINAPI __stdcall是什么意思

    千次阅读 2010-12-07 15:52:00
    调用约定(Calling convention):决定函数参数传送时入栈和出栈的顺序,由调用者还是被调用者把参数,以及编译器用来识别函数名字的修饰约定。  函数调用约定有多种,这里简单说一下:  1...
  • 调用约定(Calling convention):决定函数参数传送时入栈和出栈的顺序,由调用者还是被调用者把参数,以及编译器用来识别函数名字的修饰约定。  函数调用约定有多种,这里简单说一下:  1、__stdcall调用...
  • C语言顺序的实现

    2020-03-17 10:33:20
    栈是先进后出的一种结构,什么意思呢,可以想象一下一把手枪,最先上的子弹反而在弹夹底部,最先射出的往往是最后上的一发子弹。这就是栈,跟栈成对比的还有一种叫做队列,他是先进先出的一种数据结构。栈的地址应当...
  • 展开全部1、32313133353236313431303231363533e58685e5aeb931333365643662中的“先进后出,后进先出”意思是:的概念弹压,就像子弹壳装,一粒一粒压进去,但是打出来的时候从上面打出来的,最先压进去的最后...
  • 什么是栈?栈与线性表类似,栈是他们的限制版本...栈是一种特殊的线性表,其插入(入栈,压栈)与删除(出栈,弹栈)都在同一段操作。作者自己写了一些东西来实现栈,但奇妙的是作者写的东西与C++的标准模板库冲突了。所...
  • 首先先维护一个单调递增的,同时记录一个lef值表示:lef[i]表示当前内这个元素能匹配的最左值,什么意思呢?就是在最左边那里,它最小的。a[lef[i] - 1] < a[lef[i]] 的。这样的话,每次出一个元素,我就...
  • 相当于对于当前点 i ,求向左和向右分别能延伸到的位置 l[i], r[i],然后最后求 MAX(h[i] * (r[i]-l[i]) ).意思是向两边找到比它矮的位置为止....求 l[i] 时,维护一个递增,考虑当前的 i,如果栈顶元素不小于 i ,
  • 相信很多人和我一样,拿到这道题完全不知道是什么意思,那我们来仔细分析一下,我尽量用通俗的语言给大家讲清楚。 输入:target(数组)和n(整数) 从1到n之间抽出元素组合成和target一模一样的数组 并且这里的target...
  • 云原生从字面意思上来看可以分成云和原生两个部分。 云和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,包含IaaS、PaaS和SaaS。...#一、什么是南北流量和东西流量 南北流量(NORTH-SOU
  • Activity的四种启动模式 Activity一共有四种启动模式...分析启动模式之前,需要清楚Activity的任务栈是什么意思。栈可以看成是一个队列,采用的是先入后出的原则,简单的可以把栈想象成一个可以压入子弹弹夹,每个任务
  • 1、push是什么?(推进)push就是推,延伸为推进。这个它是汇编的一个指令,(在其它语言中也...(出)pop和push相反,它的意思出,就是从出一个元素,每次出的都是栈顶(光盘盒最上面那个,也就是最后放进...
  • push和pop的区别?

    2016-05-30 09:59:00
    你可以假想栈是一个放光盘的那种盒子,有底没盖,先push进去的光盘总是要等后push进去的出来后才能出来。 2、pop是什么?(出) pop和push相反,它的意思出,就是从栈里出一个元素,每次出的都是栈顶...
  • 剑指offer (21)

    2020-02-06 17:35:38
    题目 : 输入两个整数序列,第一个序列表示的压入顺序,请判断第二个序列是否可能为该出顺序。假设压入栈的所有数字均不相等。...后来才好像明白是什么意思… 假设有一串数字要将他们压...
  • 什么意思呢?举个例子,我们都知道这个数据结构,假设现在一个支持三种操作: POP(S) //出栈顶元素 PUSH(S,x) //将元素x压如中 MultiPop(S,k) //将的前k个元素出 普通分析: 设为空栈,那么一系列...
  • 可持久化概述

    2018-03-28 11:48:29
    可持久化是什么意思呢?就是说,对于我们某一个数据结构,我们要O(1)O(1)O(1)查询它的历史版本。大概就是反复横跳的意思。我们有几个想法: 1.每次修改操作把它放进一个栈里,要查询历史版本就弹栈修改回去。但是...
  • 单调的第一个题,看过很多遍了,最近才真的明白是什么意思 POJ2559 题意:给定n个高度不定的,宽度为1的小矩形,求可以构成的最大面积 方法:所谓单调,是这样一种数据结构:从底到栈顶是单调的 拿第...
  • 开始没有明白是什么意思。后来联想到前文中提到的环境——当执行流进入一个函数时,函数的环境就会被推入一个环境中。而在函数执行之后,将其环境出,把控制权返回给之前的执行环境。想到这里,之前对于数据...
  • 2. 局部变量表中Slot为2的位置储存了a这个变量,这个2是一个类似于地址索引之类的东西,指向变量a的地址空间,而操作数栈是根据这个索引将变量的值保存在这个地址上的。 但是我感觉这么解释有点太牵强了,有木有...
  • 简介queue这个结构模拟的数据结构中的队列什么意思呢? 就是说 通过push操作把数压进队列,增加队列长度。 通过pop操作把队列的队首给提取出来值,然后队列的队首会删除,形成新队首 通过front,back函数得到队...
  • 本博客注有“转”字样的为转载文章,其余为本人原创...这是什么意思呢。 方括号里面有三个字段我们称为[-o, +p,x] 第一个字段o表示调用函数后会从出多少个元素第二个字段p表示调用函数后会压入多少元素到...

空空如也

空空如也

1 2 3
收藏数 43
精华内容 17
关键字:

弹栈是什么意思