zoukankan      html  css  js  c++  java
  • 数据结构(二):队列的Java实现

    队列实现的是一种先入先出(FIFO)策略。队列中的INSERT操作称为ENQUEUE,DELETE操作称为DEQUEUE。队列的先入先出特性如同生活中的排队现象一样。因为队列既有队头,又有队尾,所以在实现是需要一个数组和两个分别指向对头和队尾的属性。关于队列属性,现有以下说明:

    1.队头属性指向队头元素所在位置,队尾属性指向队尾元素的下一个位置,即下一个元素即将插入的位置。
    2.为防止队列的队头移动会引起数组前端空间的浪费,一般设置队头和队尾两属性循环移动。
    3.当队尾元素加一取模等于队头元素时,说明此队列存储空间已满。
    4.当队头元素和队尾元素相等时,说明此队列为空。

    以下Java实现了队列,此队列的初始容量初始化时可自动设置,当队列已满时,队列将自动扩容为先前容量的二倍,并自动实现元素复制。

    import java.lang.reflect.Array;
    import java.util.Arrays;
    
    public class ListDemo<T> {
        private T[] array;
        private int head = 0;
        private int tail = 0;
        private int size = 0;
        private Class<T> T;
    
       @SuppressWarnings("unchecked")
       public ListDemo(Class<T> T, int size) {
    	   this.size = size;
    	   this.T = T;
    	   this.array = (T[]) Array.newInstance(T, size);
       }
    
       public void enqueue(T input) {
    	   if (tail == size)
    		   tail = 0;
    	   array[tail] = input;
    	   if (++tail % size == head) {
    		   size *= 2;
    		   array = Arrays.copyOf(array, size);
    	   }
       }
    
       public T dequeue() {
    	   if(head == size)
    		   head = 0;
    	   if(head == tail)
    		   return null;
    	   else
    		   return array[head++];
       }
    
       public boolean empty() {
    	   if (head == tail)
    		   return true;
    	   else
    		   return false;
       }
    
    }
  • 相关阅读:
    Cookies
    一个完整的upstart脚本分析
    squid总结
    python递归读取目录列表
    python删除文件
    ubuntu切割mp3文件
    TP-LINK TL-WN725N V2 / rtl8188eu Linux驱动安装
    ubuntu启动脚本
    su对环境变量做了什么
    sudoers文件配置
  • 原文地址:https://www.cnblogs.com/torresliang/p/4773435.html
Copyright © 2011-2022 走看看