• java基础——队列


    前言

    java已经提供了堆和栈的相对应的类,这里只是模拟一下队列。

    队列是一种先进先出的线性表。

    基础

    java5中新增加了java.util.Queue接口,用以支持队列的常见操作

    LinkedList类实现了Queue接口

    使用offer()来加入元素,使用poll()来获取并移出元素

    实现:

    public class ceshi {
    
        public static void main(String[] args) {
            //add()和remove()方法在失败的时候会抛出异常(不推荐)
            Queue<String> queue = new LinkedList<String>();
            //添加元素
            queue.offer("a");
            queue.offer("b");
            queue.offer("c");
            queue.offer("d");
            queue.offer("e");
            for (String q : queue) {
                System.out.println(q);
            }
            System.out.println("===");
            System.out.println("poll=" + queue.poll()); //返回第一个元素,并在队列中删除
            for (String q : queue) {
                System.out.println(q);
            }
            System.out.println("===");
            System.out.println("element=" + queue.element()); //返回第一个元素
            for (String q : queue) {
                System.out.println(q);
            }
            System.out.println("===");
            System.out.println("peek=" + queue.peek()); //返回第一个元素
            for (String q : queue) {
                System.out.println(q);
            }
        }
    }
    
    

    两个队列模拟一个堆栈

    /**
     * 两个队列模拟一个堆栈
     * 队列:先进先出
     * 堆栈:先进后出
     * 解决方法:两个队列始终有一个为空,另一个有全部数据,每次取数据,就取完存入另一个队列。
     */
    interface IStack<T> {
    
        void push(T newElement);
    
        T pop();
    
        T top();
    
        int size();
    }
    
    class StackImpl<T> implements IStack<T> {
    
        private Queue<T> queue1 ;
        private Queue<T> queue2;
        private T topRecord;
        private int size;
    
        public StackImpl() {
            this.queue1 = new LinkedList<>();
            this.queue2 = new LinkedList<>();
            this.size = 1;
        }
    
        @Override
        public void push(T newElement) {
            if (queue2.size() == 0) {
                queue1.offer(newElement);
            } else if (queue1.size() == 0) {
                queue2.offer(newElement);
            }
            topRecord = newElement;
            size++;
        }
    
        @Override
        public T pop() {
            T result = null;
            if (size <= 0) {
                return null;
            }
            if (queue2.size() == 0) {
                if (queue1.size() == 1) {
                    topRecord = null;
                    result= queue1.poll();
                }
                while (queue1.size() > 1) {
                    result = queue1.poll();
                    if (queue1.size() == 2) {
                        topRecord = result;
                    }
                    queue2.offer(result);
                }
                result = queue1.poll();
            } else if (queue1.size() == 0) {
                if (queue2.size() == 1) {
                    topRecord = null;
                    result= queue2.poll();
                }
                while (queue2.size() > 1) {
                    result = queue2.poll();
                    if (queue2.size() == 2) {
                        topRecord = result;
                    }
                    queue1.offer(result);
                }
                result = queue2.poll();
            }
            size--;
            return result;
        }
    
        @Override
        public T top() {
            return topRecord;
        }
    
        @Override
        public int size() {
            return this.size;
        }
    }
    
  • 相关阅读:
    webpack(二)
    webpack(一)
    初探Vue SSR(1)
    Node版本管理控制器n
    Gitlab用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner
    微信小程序分享参数传递
    关于vue-cli3.*搭建项目遇到问题整理
    请求头出现provisional headers are shown 和 vue-cli 3.x配置跨域代理
    HDU6409 没有兄弟的舞会
    HDU6446 Tree and Permutation
  • 原文地址:https://www.cnblogs.com/birdofparadise/p/10012364.html
Copyright © 2020-2023  润新知