用两个栈实现队列 及 两个队列实现栈功能

前言

最近笔试遇到这个问题,感觉蛮有意思的,分析看看

实现

一、问:用两个栈实现一个队列的功能,要求给出算法和思路

示意图
栈实现队列
答:

  1. 设2个栈A,B,初始化为空

  2. 入队:
    将新元素push入栈A;

  3. 出队:
    (1) 判断栈B是否为空;
    (2) 如果不为空,则将栈A中所有元素依次pop出并push到栈B;
    (3) 将栈B的栈顶元素pop出;

说明:

利用栈的两次先进后出实现队列的先进先出还是蛮有意思的。同时,这样实现的队列入队和出队的平摊复杂度都还是0(1)

二、问:用两个队列实现一个栈的功能

示意图
队列实现栈

答:

  1. 设2个队列A,B,初始化为空

  2. 入栈:
    将新元素Hello入栈到队列A中;

  3. 入队:
    (1) 将队列A中,除了队尾o以外的Hell依次出队A,并入队到队列B;
    (2) 此时队列A中只剩o

  4. 出栈:
    o元素进行队列的出队,完成栈的出栈操作

  5. 反复进行多次,即可实现栈的先进后出的特点

挖个坑,后续补这儿的代码说明

猜你喜欢

转载自blog.csdn.net/qq_30722795/article/details/108260805