zoukankan      html  css  js  c++  java
  • java代码简单实现队列

    1. 基于链表简单实现

     1 import lombok.AllArgsConstructor;
     2 import lombok.Data;
     3 import lombok.NoArgsConstructor;
     4 
     5 /**
     6  * @author <a href="mailto:yanwu0527@163.com">baofeng Xu</a>
     7  * @date 2019/12/10
     8  * <p>
     9  * describe:
    10  */
    11 public class LinkedQueue<T> {
    12     private static final Integer DEFAULT_SIZE = 10;
    13     /*** 队头 */
    14     private Node front;
    15     /*** 队尾 */
    16     private Node rear;
    17     /*** 长度 */
    18     private Integer size;
    19     /*** 当前所在位置 */
    20     private Integer index;
    21 
    22     public LinkedQueue() {
    23         this(DEFAULT_SIZE);
    24     }
    25 
    26     /**
    27      * 初始化队列
    28      *
    29      * @param len
    30      */
    31     public LinkedQueue(Integer len) {
    32         if (len <= 0) {
    33             throw new IndexOutOfBoundsException();
    34         }
    35         size = len;
    36         index = -1;
    37     }
    38 
    39     /**
    40      * 入队
    41      *
    42      * @param t
    43      * @return
    44      */
    45     public boolean enqueue(T t) {
    46         if (index >= size - 1) {
    47             // ----- 超出队列容量
    48             return false;
    49         }
    50         Node newNode = new Node(t, null);
    51         if (index == -1) {
    52             // ----- 当队列中只有一个元素时,队头和队尾为同一个元素
    53             front = rear = newNode;
    54         } else {
    55             // ----- 将新元素置为原有队尾的next,并将新元素置为新的队尾
    56             rear.next = newNode;
    57             rear = newNode;
    58         }
    59         index++;
    60         return true;
    61     }
    62 
    63     /**
    64      * 出队
    65      *
    66      * @return
    67      */
    68     public Node dequeue() {
    69         if (front == null) {
    70             return null;
    71         }
    72         // ----- 将队头返回,并将队头的next置为新的队头
    73         Node result = front;
    74         front = front.next;
    75         index--;
    76         return result;
    77     }
    78 
    79     @Data
    80     @NoArgsConstructor
    81     @AllArgsConstructor
    82     private class Node {
    83         private T data;
    84         private Node next;
    85     }
    86 
    87     public static void main(String[] args) {
    88         LinkedQueue<Integer> queue = new LinkedQueue<>();
    89         for (int i = 0; i < DEFAULT_SIZE + 1; i++) {
    90             System.out.println("enqueue: " + queue.enqueue(i) + ", item: " + i);
    91         }
    92         for (int i = 0; i < DEFAULT_SIZE + 1; i++) {
    93             System.out.println("dequeue: " + queue.dequeue());
    94         }
    95     }
    96 }

    2. 基于数组实现队列

  • 相关阅读:
    图解 Cisco IOS 命名规范
    2008北京奥运会足球赛程(男足)
    使用VPC在dynamips环境中模拟PC
    转:MSN反监听及其信息加密技巧!
    活动目录中用户和联系人有变化,但是outlook中的全局地址薄没有反映当前变化
    IE7 的安全警告
    exchange 路由组,管理组,存储组
    中式与西式网页设计的差别http://www.backboneitgroup.com/chinasearchdifferences.htm
    非常清晰的Cisco PIX Syslog 配置说明
    采用Cisco 2600系列替换Cisco 2500系列
  • 原文地址:https://www.cnblogs.com/yanwu0527/p/12019547.html
Copyright © 2011-2022 走看看