栈和队列基础

先进后出

队列

先进先出

卡哥栈和队列基础

用栈实现队列

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();
 */
相关推荐
wa的一声哭了1 天前
内积空间 内积空间二
java·开发语言·python·spring·java-ee·django·maven
SadSunset1 天前
Git常用命令
java·学习
晓13131 天前
后端篇——第二章 Maven高级全面教程
java·maven
普兰店拉马努金1 天前
【高中数学/排列组合】由字母AB构成的一个6位的序列,含有连续子序列ABA的序列有多少个?
java·排列组合
QQ_4376643141 天前
C++ 可变参数模板、折叠表达式、泛型 Lambda 与引用折叠
开发语言·c++
Web极客码1 天前
深入解析WordPress的functions.php文件及其高效使用方法
开发语言·php
cike_y1 天前
Spring使用注解开发
java·后端·spring·jdk1.8
月明长歌1 天前
MySQL 视图:把复杂查询封装成表,并且还能控权限、做解耦
数据库·mysql
m0_502724951 天前
QT列表-QListWidget
开发语言·qt
wa的一声哭了1 天前
内积空间 正交与正交系
java·c++·线性代数·算法·矩阵·eclipse·云计算