美文网首页
7.队列(Queue)与栈(Stack)

7.队列(Queue)与栈(Stack)

作者: a_tomcat | 来源:发表于2017-12-07 23:04 被阅读0次

概念

Queue:队列是一种先进先出的数据结构,类似排队。
Stack: 栈是一种先进后出或者说后进先出的数据结构,类似垃圾桶。

        Deque<Integer> stack = new LinkedList<>();
        //主要函数
        stack.size();
        stack.isEmpty();
        stack.push(6);//入栈
        stack.peek();//查看首元素,元素不出队列
        stack.pop();//出栈

        Queue<Integer> queue = new LinkedList<>();
        //主要函数
        queue.size();
        queue.isEmpty();
        queue.offer(6);//入队列
        queue.peek();//查看首元素,元素不出队列
        queue.poll();//出队列

题目1

使用两个Stack实现一个Queue数据结构。

/**
 * 使用两个stack 实现一个queue
 * Created by tomcat on 2017/12/2.
 */
public class QueueByTwoStacks {

    private Deque<Integer> in = new LinkedList<>();
    private Deque<Integer> out = new LinkedList<>();

    public Integer poll() {
        shuffle();
        return out.isEmpty() ? null : out.pop();
    }

    public Integer peek() {
        shuffle();
        return out.isEmpty() ? null : out.peek();
    }

    public void offer(int element) {
        in.push(element);
    }

    public int size() {
        return in.size() + out.size();
    }

    public boolean isEmpty() {
        return in.isEmpty() && out.isEmpty();
    }

    private void shuffle() {
        if (out.isEmpty()) {
            while (!in.isEmpty()) {
                Integer pop = in.pop();
                out.push(pop);
            }
        }
    }
}

题目2

实现一个Stack数据结构,并实现一个min()函数可以获取Stack中最小的元素,要求时间复杂度是O(1).

/**
 * 实现一个Stack数据结构,并实现一个min()函数可以获取Stack中最小的元素,要求时间复杂度是O(1).
 * Created by tomcat on 2017/12/2.
 */
public class StackWithMin {

    @Test
    public void test() throws Exception {
        StackWithMin stack = new StackWithMin();
        stack.push(5);
        stack.top();
        stack.min();
        stack.pop();
        stack.min();
        stack.top();
    }

    private Deque<Integer> in = new LinkedList<>();
    private Deque<Integer> min = new LinkedList<>();

    public int pop() {
        if(in.isEmpty()){
            return -1;
        }
        Integer pop = in.pop();
        if(pop == min.peek()){
            min.pop();
        }
        return pop;
    }

    public int top() {
        return in.isEmpty() ? -1 : in.peek();
    }

    public void push(int element) {
        in.push(element);
        if(min.isEmpty()){
            min.push(element);
        }else if(element <= min.peek()){
            min.push(element);
        }
    }

    public int min(){
        if(min.isEmpty())return -1;
        return min.peek();
    }

    public int size() {
        return in.size();
    }

    public boolean isEmpty() {
        return in.isEmpty();
    }

}

相关文章

网友评论

      本文标题:7.队列(Queue)与栈(Stack)

      本文链接:https://www.haomeiwen.com/subject/pqtsixtx.html