栈和队列基础

先进后出

队列

先进先出

卡哥栈和队列基础

用栈实现队列

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();
 */
相关推荐
集成显卡1 天前
Rust实战七 |基于带 colored 颜色文字控制台的批量文件删除工具
开发语言·后端·rust
刀法如飞1 天前
AI时代:DDD领域驱动建模与Ontology语义建模的区别
java·设计模式·架构
jeffer_liu1 天前
Spring AI 生产级实战:工具调用
java·人工智能·后端·spring·ai编程
比昨天多敲两行1 天前
linux 线程概念与控制
java·开发语言·jvm
huaweichenai1 天前
php 根据每个类型的抽签范围实现抽签功能
开发语言·php
8Qi81 天前
LeetCode 75:颜色分类(荷兰国旗问题)—— Java 题解 ✅
java·算法·leetcode·指针·排序
zzhongcy1 天前
@Transactional 同类内部调用失效 + 两种自代理解决方案
java
AutumnWind04201 天前
【Intelij IDEA使用手册】
java·ide·intellij-idea
codeejun1 天前
每日一Go-73、云原生成本优化 —— 资源限制 & 指标驱动扩容
开发语言·云原生·golang