Day10|232.用栈实现队列

文章讲述了如何使用栈和队列实现队列和栈的功能,包括`MyQueue`和`MyStack`类的代码实现,以及在处理空队列和重定位元素时的注意事项。
摘要由CSDN通过智能技术生成

232.用栈实现队列代码随想录

pop和peek的大体思路是把stackIn倒入stackOut,再从stackOut里pop元素,但是当stackOut里元素没pop完,stackIn里又加入了新元素,要加一个stackOut为空才能再倒入元素的判断语句,不然pop的顺序就出错了(会把新push的元素先于stackOut的既有元素pop出来)

class MyQueue {
    Stack<Integer> stackIn;
    Stack<Integer> stackOut;

    public MyQueue() {
        stackIn = new Stack<>();
        stackOut = new Stack<>();
    }
    
    public void push(int x) {
        stackIn.push(x);
    }
    
    public int pop() {
        if(!stackOut.empty()){
            return stackOut.pop();
        }else{
            dumpstackIn();
            return stackOut.pop();
        }
        
    }
    
    public int peek() {
        if(!stackOut.empty()){
            return stackOut.peek();
        }else{
            dumpstackIn();
            return stackOut.peek();
        }
    }
    
    public boolean empty() {
        if(stackIn.empty() && stackOut.empty()){
            return true;
        }else{
            return false;
        }
    }
    public void dumpstackIn(){
        while(!stackIn.empty()){
            stackOut.push(stackIn.pop());
        }
    }
}

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue obj = new MyQueue();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.peek();
 * boolean param_4 = obj.empty();
 */

225. 用队列实现栈代码随想录

对队列的初始化还不太会,只知道用Queue和LinkedList,什么Deque和ArrayList不太会用

queue内部有isEmpty也不知道

对于一个循环变量来说,判断其的两个状态:承前状态,刚刚更新完变量没有进入下一次循环的判断,启后状态,进入下一次循环的判断并执行操作。一般来说启后状态属于当前循环状态,启后之后的自更新是为下一次循环服务的。例如对1~n每一个都操作,最后有n的节点状态满足循环,i自减到0退出循环;再例如x~n操作,有n-x+1的节点状态满足循环变量自减,最后i变成x-1节点退出循环。

k

这种数数是代码基本功。

class MyStack {
    Queue<Integer> queue;

    public MyStack() {
        queue = new LinkedList<>(); 
    }
    
    public void push(int x) {
        queue.add(x);
    }
    
    public int pop() {
        rePosition();
        return queue.poll();
    }
    
    public int top() {
        rePosition();
        int res = queue.poll();
        queue.add(res);
        return res;
    }
    
    public boolean empty() {
        return queue.isEmpty();
    }
    public void rePosition(){
        int size = queue.size();
        size--;
        while(size != 0){
            queue.add(queue.poll());
            size--;
        }
    }
}

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack obj = new MyStack();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.top();
 * boolean param_4 = obj.empty();
 */

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值