• 请不要在回答技术问题时复制粘贴 AI 生成的内容
28hua
V2EX  ›  程序员

三个栈实现一个队列

  •  
  •   28hua · Apr 30, 2015 · 4665 views
    This topic created in 4058 days ago, the information mentioned may be changed or developed.
    保证每个队列操作(在最坏情况下)都只需要常数次的栈操作(警告:非常难!)

    http://www.oschina.net/question/585840_119204

    问题下的回答看不懂了
    8 replies    2015-05-03 09:55:18 +08:00
    ryd994
        1
    ryd994  
       Apr 30, 2015
    答案2属于脑筋急转弯,窃以为不算答案,真要这么实现早被内存玩死了
    答案1的汉诺塔属于正常人第一反应
    sgissb1
        3
    sgissb1  
       May 1, 2015
    不是2个栈实现一个队列吗?怎么是三个呢?
    ryd994
        4
    ryd994  
       May 1, 2015 via Android
    @sgissb1 两个实现起来很简单,但是至少O(n)
    现在要O(1)
    入队压栈A,出队弹栈B
    如果栈B空了,就一个个从栈A倒出过来
    sgissb1
        5
    sgissb1  
       May 2, 2015
    @ryd994 哦,没注意。
    zwzmzd
        6
    zwzmzd  
       May 3, 2015 via Android
    其实从摊还角度来看,两个栈的实现平均每次复杂度也是O(1)
    uleh
        7
    uleh  
       May 3, 2015 via iPhone
    没get到这题的点在哪里…
    汉娜塔有个限制是每堆都必须按从小到大排列,栈和队列又没有这个限制。
    进的时候入栈1,出的时候栈1全部出栈并入栈2,然后按栈2顺序出。
    出栈过程中发生入栈操作则使用栈3。
    不就可以了么。
    uleh
        8
    uleh  
       May 3, 2015 via iPhone
    @uleh 常数次栈操作…问题是出在这呢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2880 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 15:25 · PVG 23:25 · LAX 08:25 · JFK 11:25
    ♥ Do have faith in what you're doing.