栈与队列(Java)

JAVA中栈类是继承了Vector实现的,基本特征是先入后出,并且只能在一侧进出

方法 作用
empty() 栈空返回真,否则返回假
peek() 获取栈顶值,不出栈
pop() 栈顶值出栈
push() 入栈

队列

JAVA中队列是接口,继承了Collection类,先入先出。

方法 作用
add() 入队(若失败则抛出IllegalStateException异常)
offer() 将指定元素插入队列,成功返回true,否则返回false
element() 获取队头的值,但不出队(若队列为空则抛出异常NoSuchElementException)
peek() 获取队头的值,但不出队(若队列为空则返回null
poll() 获取并移除队头(若队列空则返回null)

用栈实现队列

(leetcode.232)

class MyQueue {
    Stack in;
    Stack out;
    public MyQueue() {
        in = new Stack();
        out = new Stack();
    }
    
    public void push(int x) {
        in.push(x);
    }
    
    public int pop() {
        transfer();
        return out.pop();
    }
    
    public int peek() {
        transfer();
        return out.peek();
    }
    
    public boolean empty() {
        return (in.isEmpty() && out.isEmpty());
    }

    public void transfer() {
        if(! out.isEmpty()) return;
        while(! in.isEmpty()) out.push(in.pop());
    }
}

用队列实现栈

(leetcode.225)

class MyStack {
    Queue q1;
    Queue q2;
    public MyStack() {
        q1 = new LinkedList();
        q2 = new LinkedList();
    }
    
    public void push(int x) {
        if(q1.isEmpty()) {
            q1.offer(x);
            while(! q2.isEmpty()) q1.offer(q2.poll());
        } else {
            q2.offer(x);
            while(! q1.isEmpty()) q2.offer(q1.poll());
        }
    }
    
    public int pop() {
        return (q1.isEmpty() ? q2 : q1).poll();
    }
    
    public int top() {
        return (q1.isEmpty() ? q2 : q1).peek();
    }
    
    public boolean empty() {
        return (q1.isEmpty() && q2.isEmpty());
    }
}

你可能感兴趣的:(leetcode,要点,leetcode,算法,职场和发展)