zoukankan      html  css  js  c++  java
  • Java通过链表实现队列

    class LinkedQueue<T> {
        /**
         * 队列大小,由构造函数初始化
         */
        private int maxSize;
    
        /**
         * 队头
         */
        private Node front = null;
    
        /**
         * 队尾
         */
        private Node rear = null;
    
        /**
         * 队列实际元素个数
         */
        private int nItems;
    
        /**
         * 初始化队列,并指定队列长度
         * 
         * @param maxSize
         */
        public LinkedQueue(int maxSize) {
            this.maxSize = maxSize;
            front = null;
            rear = null;
            this.nItems = 0;
        }
    
        /**
         * 讲一个数据放入队列
         * 
         * @param data
         */
        public void enqueue(T data) {
            Node node = new Node(data);
            if (isEmpty()) {
                front = node;
                front.next = null;
                rear = node;
                rear.pre = null;
                nItems++;
                return;
            }
            if (size() == 1) {
                rear = node;
                front.next = rear;
                rear.pre = front;
                nItems++;
                return;
            }
            if (isFull()) {
                System.out.print("超过队列已满,无法入队");
                return;
            }
            node.pre = rear;
            rear.next = node;
            rear = node;
            nItems++;
        }
    
        /**
         * 将数据出队
         * 
         * @return
         */
        public T dequeue() {
            Node temp = null;
            if (isEmpty()) {
                System.out.println("队列已空,无法出队");
                return null;
            }
            if (size() == 1) {
                temp = front;
                front = null;
                rear = null;
                nItems--;
                return temp.data;
            }
            if (size() == 2) {
                temp = front;
                front = rear;
                front.next = null;
                rear.pre = null;
                nItems--;
                return temp.data;
            }
            temp = front;
            front = front.next;
            nItems--;
            return temp.data;
        }
    
        /**
         * 判断队列是否为空
         * 
         * @return
         */
        public boolean isEmpty() {
            return nItems == 0;
        }
    
        /**
         * 判断队列是否已满
         * 
         * @return
         */
        public boolean isFull() {
            return nItems == maxSize;
        }
    
        /**
         * 获取队列的实际数据个数
         * 
         * @return
         */
        public int size() {
            return nItems;
        }
    
        /**
         * 将数据封装成节点
         * 
         * @author John
         *
         */
        private class Node {
            T data;
            Node next;
            Node pre;
    
            public Node(T data) {
                this.data = data;
            }
        }
    }
  • 相关阅读:
    这就是搜索引擎--读书笔记六--索引的查询
    这就是搜索引擎--读书笔记五--索引的建立与更新
    JavaWeb学习总结第四篇--Servlet开发
    算法帝国--读书笔记
    这就是搜索引擎--读书笔记四--索引基础
    这就是搜索引擎--读书笔记三
    Python学习总结之五 -- 入门函数式编程
    ASP.NET-FineUI开发实践-4(二)
    ASP.NET-FineUI开发实践-4
    ASP.NET-FineUI开发实践-3
  • 原文地址:https://www.cnblogs.com/SaraMoring/p/5794383.html
Copyright © 2011-2022 走看看