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();
        }
    }

    二、实现一个双向队列

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

  • 相关阅读:
    20191010-2 每周例行报告
    2018092609-2 选题 Scrum立会报告+燃尽图 01
    20190919-1 每周例行报告
    20190919-4 单元测试,结对
    20190919-6 四则运算试题生成,结对
    20190919-5 代码规范,结对
    PSP总结报告
    20181204-1 每周例行报告
    每个成员明确公开地表示对成员帮助的感谢 (并且写在各自的博客里)
    作业要求 20181127-2 每周例行报告
  • 原文地址:https://www.cnblogs.com/hekiraku/p/11990843.html
Copyright © 2011-2022 走看看