zoukankan      html  css  js  c++  java
  • 实现队列(单向+双向)

    队列的话,FIFO是其主要特性。

    一、通过简单的链表来实现一个简单的单向队列。

    主要包括两个方法:

    put:加入元素导队列中去;

    take:取出队头元素;

    public interface MyQueue<T> {
        T take();
        void put(T item);
        class Node<T>{
            Node next;
            T item;
            public Node(T item){
                this.item = item;
                this.next = null;
            }
        }
    }

    实现类:

    主要定义一下类元素:队头节点,队尾节点,队列大小。

    put方法逻辑:

    如果队列为空,则新元素就是队头(同时也是队尾);如果队列不为空,则尾插再队尾节点之后,作为新的队尾节点;

    take方法逻辑:

    如果对列为空,(所有节点被take出去)则返回队列无数据。

    package study.queueStudy;
    
    public class MyQueueImpl<T> implements MyQueue<T>{
        public static Node head;
        public static Node tail;
        public static int size;
        public MyQueueImpl(){
            Node init = new Node(null);
            head = tail = init;
            size = 0;
        }
        @Override
        public T take() {
            Node currHead = head;
            if(currHead!=null&&size!=0){
                T result = (T) currHead.item;
                head = currHead.next;
                System.out.print(result+"
    ");
                size--;
                return result;
            }else {
                throw new IllegalArgumentException("队列无数据");
            }
        }
    
        @Override
        public void put(T item) {
            Node newNode = new Node(item);
            Node tailCurr = tail;
            Node headCurr = head;
            if(headCurr.item==null){
                head.item=item;
                tail.item=item;
                size++;
                return;
            }
            tailCurr.next = newNode;
            tail = newNode;
            size++;
        }
        public static void main(String[] args) {
            MyQueueImpl myQueue = new MyQueueImpl();
            myQueue.put(1);
            myQueue.put(2);
            myQueue.put(3);
            myQueue.put(4);
            myQueue.put(5);
            myQueue.put(6);
            myQueue.put(7);
            myQueue.put(8);
            myQueue.take();
            myQueue.take();
            myQueue.take();
            myQueue.take();
            myQueue.take();
            myQueue.take();
            myQueue.take();
        }
    }

    二、实现一个双向队列

    双向队列和单向队列的差别主要在于可以从链表头插入,也可以从链表尾插入。

  • 相关阅读:
    GUIX 创建工程注意事项
    VS 中bool和BOOL的区别
    git 在Windows上的应用
    rt-thread 相关网站地址
    tcp client
    VS2015 下载地址
    软件各种协议比较(GPL、AGPL、LGPL、Apache、Zlib/Libpng、BSD、MIT)
    UILabel标签
    UIbutton
    数据互转
  • 原文地址:https://www.cnblogs.com/hekiraku/p/11990843.html
Copyright © 2011-2022 走看看