美文网首页
用队列实现栈,用栈实现队列

用队列实现栈,用栈实现队列

作者: j4fan | 来源:发表于2018-08-07 16:38 被阅读57次

先挖个坑,回头再补上

1 用队列创建栈

import java.util.Stack;

public class QueueBuilderByStack {

    public static void main(String[] args) {
        QueueBuilderByStack queueBuilderByStack = new QueueBuilderByStack();
        queueBuilderByStack.offer("A");
        queueBuilderByStack.offer("B");
        queueBuilderByStack.offer("C");
        System.out.println(queueBuilderByStack.toString());
        for (int i = 0; i < 2; i++) {
            System.out.println(queueBuilderByStack.poll());
        }
        queueBuilderByStack.offer("D");
        queueBuilderByStack.offer("E");
        System.out.println(queueBuilderByStack.poll());
        System.out.println(queueBuilderByStack.poll());
    }


    private static Stack in = new Stack();

    private static Stack out = new Stack();


    public Object[] toArray() {
        Object[] array = new Object[in.size() + out.size()];
        System.arraycopy(in.toArray(), 0, array, 0, in.size());
        System.arraycopy(out.toArray(), 0, array, in.size() - 1, out.size());
        return array;
    }


    public boolean add(Object o) {
        in.add(o);
        return true;
    }


    public Object poll() {
        if (out.isEmpty()) {
            if (in.isEmpty()) {
                return null;
            } else {
                while (!in.isEmpty()) {
                    out.push(in.pop());
                }
            }
        }
        return out.pop();
    }


    public Object peek() {
        if (out.isEmpty()) {
            if (in.isEmpty()) {
                return null;
            } else {
                while (!in.isEmpty()) {
                    out.push(in.pop());
                }
            }
        }
        return out.peek();
    }
    
    public boolean offer(Object o) {
        in.push(o);
        return true;
    }

    public boolean remove(Object o) {
        if (in.contains(o)) {
            in.remove(o);
        } else if (out.contains(o)) {
            out.remove(o);
        }
        return true;
    }
}

2.用栈创建队列

import java.util.PriorityQueue;
import java.util.Queue;

public class StackBuilderByQueue<E> {

    private static Queue q1 = new PriorityQueue();
    private static Queue q2 = new PriorityQueue();

    public static void main(String[] args) {
        StackBuilderByQueue stackBuilderByQueue = new StackBuilderByQueue();
        stackBuilderByQueue.push("A");
        stackBuilderByQueue.push("B");
        stackBuilderByQueue.push("C");
        System.out.println(stackBuilderByQueue.toString());
        System.out.println(stackBuilderByQueue.poll());
        System.out.println(stackBuilderByQueue.toString());
        stackBuilderByQueue.push("D");
        System.out.println(stackBuilderByQueue.toString());
        System.out.println(stackBuilderByQueue.poll());
        System.out.println(stackBuilderByQueue.toString());
    }

    @Override
    public String toString() {
        return "in:" + String.join(",", q1) +
                " out:" + String.join(",", q2);
    }

    public E push(E item) {
        if (q1.isEmpty() && q2.isEmpty()) {
            q1.offer(item);
        } else if (q1.isEmpty()) {
            q2.offer(item);
        } else if (q2.isEmpty()) {
            q1.offer(item);
        }
        return item;
    }

    public E poll() {
        if (q1.isEmpty() && q2.isEmpty()) {
            return null;
        } else if (q1.isEmpty()) {
            while (q2.size() != 1) {
                q1.offer(q2.poll());
            }
            return (E) q2.poll();
        } else if (q2.isEmpty()) {
            while (q1.size() != 1) {
                q2.offer(q1.poll());
            }
            return (E) q1.poll();
        }
        return null;
    }

}

相关文章

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • leecode刷题(26)-- 用栈实现队列

    leecode刷题(26)-- 用栈实现队列 用栈实现队列 使用栈实现队列的下列操作: push(x) -- 将一...

  • C语言第七次作业:链表

    707. 设计链表 空指针 空节点 225. 用队列实现栈 链式存储栈 双队列实现栈 232. 用栈实现队列 链式...

  • 队列之-队列实现栈

    一、队列实现栈核心算法概述 之前已经描述过了用栈实现队列的功能,见栈系列之-实现队列,那么同样队列也可以用来实现栈...

  • 38_两个有趣的问题

    关键词:通过栈实现队列、通过队列实现栈 0. 通过栈实现队列 用栈实现队列等价于用后进先出的特性实现先进先出的特性...

  • 栈&队列

    一、栈&队列总结 栈/队列的应用接雨水验证栈序列滑动窗口的最大值 栈/队列的特殊实现用两个栈实现队列用两个队列实现...

  • 面试题9: 用两个栈实现队列

    9-1 用两个栈实现队列 9-2 用两个队列实现栈

  • LeetCode 每日一题 [12] 用队列实现栈

    LeetCode 用队列实现栈 [简单] 使用队列实现栈的下列操作: push(x) -- 元素 x 入栈pop(...

  • Python学习教程:用队列实现栈

    接着上一期跟大家说的用栈实现队列,这期的Python学习教程跟大家讲用队列实现栈 题目:使用队列实现栈的下列操作:...

  • 用两个栈实现队列,用两个队列实现堆栈

    参考:剑指Offer面试题7(Java版):用两个栈实现队列与用两个队列实现栈 用两个栈实现队列stack1作为入...

网友评论

      本文标题:用队列实现栈,用栈实现队列

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