栈和队列基础

先进后出

队列

先进先出

卡哥栈和队列基础

用栈实现队列

java 中有stack 和Deque 两种类型可以实现栈

java 复制代码
class MyQueue {
    Deque<Integer> stack1;
    Deque<Integer> stack2;
    public MyQueue() {
        stack1=new ArrayDeque<Integer>();
        stack2=new ArrayDeque<Integer>();
    }
    
    public void push(int x) {
        stack1.addFirst(x);
    }
    
    public int pop() {
        if(stack2.isEmpty()){
            while(!stack1.isEmpty()){
            int s =stack1.removeFirst();
            stack2.addFirst(s);
            }
        }
        return stack2.removeFirst();
    }
    
    public int peek() {
        if(stack2.isEmpty()){
            while(!stack1.isEmpty()){
            int s =stack1.removeFirst();
            stack2.addFirst(s);
            }
        }
        int ss= stack2.removeFirst();
        stack2.addFirst(ss);
        return ss;
    }
    
    public boolean empty() {
        return stack2.isEmpty()&&stack1.isEmpty();
    }
}

/**
 * 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();
 */

用队列实现栈

队列有两种类型Deque Queue

java 复制代码
class MyStack {
    Deque<Integer> deque1;
    Deque<Integer> deque2;
    public MyStack() {
        deque1=new ArrayDeque<Integer>();
        deque2=new ArrayDeque<Integer>();
    }
    
    public void push(int x) {
        deque2.offer(x); // 先放在辅助队列中
        while (!deque1.isEmpty()){
            deque2.offer(deque1.poll());
        }
        Deque<Integer> queueTemp;
        queueTemp = deque2;
        deque2 = deque1;
        deque1 = queueTemp; // 最后交换queue1和queue2,将元素都放到queue1中
    }
    
    public int pop() {
        return deque1.poll();
    }
    
    public int top() {
        return deque1.peek();
    }
    
    public boolean empty() {
        return deque1.isEmpty();
    }
}

/**
 * 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();
 */
相关推荐
·醉挽清风·27 分钟前
学习笔记—C++—模板初阶
开发语言·c++·笔记·学习
User_芊芊君子28 分钟前
跨平台开发选Java还是C?应用场景与性能深度对比
java·c语言·开发语言
寻梦人1213828 分钟前
关于在Spring Boot + SpringSecurity工程中Sercurity上下文对象无法传递至新线程的问题解决
java·spring boot·后端
一只小松许️1 小时前
Rust泛型与特性
java·开发语言·rust
搬砖工程师Cola3 小时前
<C#>在 C# .NET 6 中,使用IWebHostEnvironment获取Web应用程序的运行信息。
开发语言·c#·.net
八了个戒5 小时前
「数据可视化 D3系列」入门第三章:深入理解 Update-Enter-Exit 模式
开发语言·前端·javascript·数据可视化
失去妙妙屋的米奇6 小时前
matplotlib数据展示
开发语言·图像处理·python·计算机视觉·matplotlib
夏天的阳光吖6 小时前
C++蓝桥杯实训篇(四)
开发语言·c++·蓝桥杯
angushine7 小时前
Gateway获取下游最终响应码
java·开发语言·gateway
爱的叹息7 小时前
关于 JDK 中的 jce.jar 的详解,以及与之功能类似的主流加解密工具的详细对比分析
java·python·jar