码迷,mamicode.com
首页 > 其他好文 > 详细

栈实现队列

时间:2021-05-24 00:53:44      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:测试用例   组元   out   info   用例   就会   app   mamicode   先进先出   

栈实现队列

思路

在数据结构中,栈本身就具有倒序的作用,因此,如果在一组元素全部进栈后,最后进栈的会最先被弹出,而队列是最先进入的元素就最先被弹出。

技术图片

如图:如果以 1 2 3 4 分别进入栈和队列,左为栈的弹出结果,右为队列的出队结果,刚好相反

于是,如果把栈得到的结果再次进行一次入栈操作,再出栈时得到的结果就会再次回到1 2 3 4

所以思路就是,先全部进栈,出栈,把得到的结果再次执行同样的进栈操作,那么此时栈顶就对应着想象中的队列的队首了

代码实现

public class CQueue {
    //两个栈,一个出栈,一个入栈
    private Stack<Integer> stack1;
    private Stack<Integer> stack2;

    public CQueue() {
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }

    public void appendTail(int value) {
        stack1.push(value);
    }

    public int deleteHead() {
        if(!stack2.isEmpty()){
            return stack2.pop();
        }else{
            while(!stack1.isEmpty()){
                stack2.push(stack1.pop());
            }
            return stack2.isEmpty() ? -1 : stack2.pop();
        }
    }

测试用例

public static void main(String[] args) {
    CQueue cqueue = new CQueue();
    cqueue.appendTail(1);
    cqueue.appendTail(3);
    cqueue.appendTail(5);
    cqueue.appendTail(7);
    int param_1 = cqueue.deleteHead();
    System.out.println("出队:" + param_1);
    int param_2 = cqueue.deleteHead();
    System.out.println("出队:" + param_2);
}

技术图片

从结果可得到,符合了队列先进先出的特点,也是想要的结果

栈实现队列

标签:测试用例   组元   out   info   用例   就会   app   mamicode   先进先出   

原文地址:https://www.cnblogs.com/we1yu4n/p/14742885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!