队列和栈的转化

1- 如何仅用队列结构实现栈结构?

使用两个队列,一个data队列一个help队列.

加入压栈五个数之后要弹出第五个数,两个队列的操作就是,压栈五个数正常存入data队列,弹栈的时候前四个数先进help队列,data队列中的数当做弹栈的数据返回,然后help和data队列互换引用.

import java.util.LinkedList;
import java.util.Queue;

public class QueueStack {
    private Queue<Integer> data;
    private Queue<Integer> help;

    QueueStack(){
        this.data = new LinkedList<Integer>();
        this.help = new LinkedList<Integer>();
    }

    public void push( Integer integer){
        this.data.add(integer);
    }

    public Integer peek(){
        if (this.data.size() == 0){
            throw new RuntimeException("stack is empty");
        }
        while (data.size() != 1){
            help.add(data.poll());
        }
        Integer res = data.peek();
        help.add(data.poll());
        swap();
        return res;
    }

    public Integer poll(){
        if (data.isEmpty()){
            throw new RuntimeException("stack is empty");
        }
        while (data.size() > 1) {
            help.add(data.poll());
        }
        Integer res = data.poll();
        swap();
        return  res;
    }

    private void swap(){
        Queue<Integer> temp = data;
        data = help;
        help = temp;
    }
}

2- 如何仅用栈结构实现队列结构?

两个栈结构顶替一个队列.将data栈的数据swap到help栈,这样经过一次传递之后,数据顺序就恢复成了先进先出.

需要注意,在data和help数据传递的过程中,如果help不是空的是不可以传输数据的.

import java.util.Stack;

public class StackQueue {
    private Stack<Integer> data;
    private Stack<Integer> help;

    StackQueue(){
        this.data = new Stack<Integer>();
        this.help = new Stack<Integer>();
    }

    //push  peek pull  swap
    public void push(Integer integer){
        this.data.push(integer);
    }

    public Integer pull(){
        swap();
        return help.pop();
    }

    public Integer peek(){
        swap();
        return help.peek();
    }

    private void swap(){
        if (data.isEmpty() || help.isEmpty()){
            throw new RuntimeException("queue is empty");
        }else if(!help.isEmpty()){
            return;
        }

        while(!data.isEmpty()){
            help.add(data.pop());
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_39445556/article/details/104779549