亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java隊列實現方法(順序隊列,鏈式隊列,循環隊列)

2024-07-13 10:14:54
字體:
來源:轉載
供稿:網友

雙向順序隊列ArrayDeque和雙向鏈式隊列LinkedList,JDK已經包含,在此略。ArrayDeque包括順序棧和順序隊列,LinkedList包含鏈式棧和鏈式隊列。ArrayDeque和LinkedList都是線程不安全的。PriorityQueue優先隊列也在JDK。

1.順序隊列的實現

package lang;import java.io.Serializable;import java.util.Arrays;/** * @ClassName: ArrayQueue * @Description: 順序隊列 * @date 2014年1月20日 下午3:46:19 * @param <T> */public class ArrayQueue<T> implements Serializable{ /**  * @Fields serialVersionUID : TODO  */ private static final long serialVersionUID = 7333344126529379197L; private int DEFAULT_SIZE = 10; private int capacity;//保存數組的長度 private Object[] elementData;//定義一個數組用于保存順序隊列的元素 private int front = 0;//隊頭 private int rear = 0;//隊尾 //以默認數組長度創建空順序隊列 public ArrayQueue() {  capacity = DEFAULT_SIZE;  elementData = new Object[capacity]; } //以一個初始化元素來創建順序隊列 public ArrayQueue(T element) {  this();  elementData[0] = element;  rear++; }  public ArrayQueue(int initSize) {  elementData = new Object[initSize]; } /**  * 以指定長度的數組來創建順序隊列  * @param element 指定順序隊列中第一個元素  * @param initSize 指定順序隊列底層數組的長度  */ public ArrayQueue(T element, int initSize) {  this.capacity = initSize;  elementData = new Object[capacity];  elementData[0] = element;  rear++; } /**  * @Title: size     * @Description: 獲取順序隊列的大小    * @return  */ public int size() {  return rear - front; } /**  * @Title: offer     * @Description: 入隊    * @param element  */ public void offer(T element) {  ensureCapacity(rear + 1);  elementData[rear++] = element; }  private void ensureCapacity(int minCapacity) {  //如果數組的原有長度小于目前所需的長度  int oldCapacity = elementData.length;  if (minCapacity > oldCapacity) {   int newCapacity = (oldCapacity * 3) / 2 + 1;   if (newCapacity < minCapacity)    newCapacity = minCapacity;   // minCapacity is usually close to size, so this is a win:   elementData = Arrays.copyOf(elementData, newCapacity);  } } /**  * @Title: poll     * @Description: 出隊    * @return  */ public T poll() {  if (isEmpty()) {   throw new IndexOutOfBoundsException("空隊列異常");  }  //保留隊列的front端的元素的值  T oldValue = (T) elementData[front];  //釋放隊列的front端的元素  elementData[front++] = null;  return oldValue; } /**  * @Title: peek     * @Description: 返回隊列頂元素,但不刪除隊列頂元素    * @return  */ public T peek() {  if (isEmpty()) {   throw new IndexOutOfBoundsException("空隊列異常");  }  return (T) elementData[front]; } /**  * @Title: isEmpty     * @Description: 判斷順序隊列是否為空隊列    * @return  */ public boolean isEmpty() {  return rear == front; } /**  * @Title: clear     * @Description: 清空順序隊列  */ public void clear() {  //將底層數組所有元素賦為null  Arrays.fill(elementData, null);  front = 0;  rear = 0; } public String toString() {  if (isEmpty()) {   return "[]";  } else {   StringBuilder sb = new StringBuilder("[");   for (int i = front; i < rear; i++) {    sb.append(elementData[i].toString() + ", ");   }   int len = sb.length();   return sb.delete(len - 2, len).append("]").toString();  } }}

2. 鏈式隊列的實現

package lang;import java.io.Serializable;/** * @ClassName: LinkQueue * @Description: 鏈式隊列 * @date 2014年1月21日 下午3:24:38 * @param <T> */public class LinkQueue<T> implements Serializable{ /**  * @Fields serialVersionUID : TODO  */ private static final long serialVersionUID = -6726728595616312615L; //定義一個內部類Node,Node實例代表鏈隊列的節點。 private class Node {    private T data;//保存節點的數據    private Node next;//指向下個節點的引用  //無參數的構造器  public Node() {  }  //初始化全部屬性的構造器  public Node(T data, Node next) {   this.data = data;   this.next = next;  } }  private Node front;//保存該鏈隊列的頭節點  private Node rear;//保存該鏈隊列的尾節點 private int size;//保存該鏈隊列中已包含的節點數 /**  * <p>Title: LinkQueue </p>     * <p>Description: 創建空鏈隊列 </p>   */ public LinkQueue() {  //空鏈隊列,front和rear都是null  front = null;  rear = null; } /**  * <p>Title: LinkQueue </p>    * <p>Description: 以指定數據元素來創建鏈隊列,該鏈隊列只有一個元素</p>   */ public LinkQueue(T element) {  front = new Node(element, null);  //只有一個節點,front、rear都指向該節點  rear = front;  size++; } /**  * @Title: size     * @Description: 獲取順序隊列的大小    * @return  */ public int size() {  return size; } /**  * @Title: offer     * @Description: 入隊    * @param element  */ public void offer(T element) {  //如果該鏈隊列還是空鏈隊列  if (front == null) {   front = new Node(element, null);      rear = front;//只有一個節點,front、rear都指向該節點  } else {      Node newNode = new Node(element, null);//創建新節點      rear.next = newNode;//讓尾節點的next指向新增的節點      rear = newNode;//以新節點作為新的尾節點  }  size++; } /**  * @Title: poll     * @Description: 出隊    * @return  */ public T poll() {  Node oldFront = front;  front = front.next;  oldFront.next = null;  size--;  return oldFront.data; } /**  * @Title: peek     * @Description: 返回隊列頂元素,但不刪除隊列頂元素    * @return  */ public T peek() {  return rear.data; } /**  * @Title: isEmpty     * @Description: 判斷順序隊列是否為空隊列    * @return  */ public boolean isEmpty() {  return size == 0; } /**  * @Title: clear     * @Description: 清空順序隊列  */ public void clear() {  //將front、rear兩個節點賦為null  front = null;  rear = null;  size = 0; } public String toString() {  //鏈隊列為空鏈隊列時  if (isEmpty()) {   return "[]";  } else {   StringBuilder sb = new StringBuilder("[");   for (Node current = front; current != null; current = current.next) {    sb.append(current.data.toString() + ", ");   }   int len = sb.length();   return sb.delete(len - 2, len).append("]").toString();  } } public static void main(String[] args) {  LinkQueue<String> queue = new LinkQueue<String>("aaaa");  //添加兩個元素  queue.offer("bbbb");  queue.offer("cccc");  System.out.println(queue);  //刪除一個元素后  queue.poll();  System.out.println("刪除一個元素后的隊列:" + queue);  //再次添加一個元素  queue.offer("dddd");  System.out.println("再次添加元素后的隊列:" + queue);  //刪除一個元素后,隊列可以再多加一個元素  queue.poll();  //再次加入一個元素  queue.offer("eeee");  System.out.println(queue); }}

3. 循環隊列的實現

package lang;import java.io.Serializable;import java.util.Arrays;/** * @ClassName: LoopQueue * @Description: 循環隊列 * @date 2014年1月20日 下午3:47:14 */public class LoopQueue<T> implements Serializable{ /**  * @Fields serialVersionUID : TODO  */ private static final long serialVersionUID = -3670496550272478781L; private int DEFAULT_SIZE = 10; private int capacity;//保存數組的長度 private Object[] elementData;//定義一個數組用于保存循環隊列的元素 private int front = 0;//隊頭 private int rear = 0;//隊尾 //以默認數組長度創建空循環隊列 public LoopQueue() {  capacity = DEFAULT_SIZE;  elementData = new Object[capacity]; } //以一個初始化元素來創建循環隊列 public LoopQueue(T element) {  this();  elementData[0] = element;  rear++; } /**  * 以指定長度的數組來創建循環隊列  * @param element 指定循環隊列中第一個元素  * @param initSize 指定循環隊列底層數組的長度  */ public LoopQueue(T element, int initSize) {  this.capacity = initSize;  elementData = new Object[capacity];  elementData[0] = element;  rear++; } //獲取循環隊列的大小 public int size() {  if (isEmpty()) {   return 0;  }  return rear > front ? rear - front : capacity - (front - rear); } //插入隊列 public void add(T element) {  if (rear == front && elementData[front] != null) {   throw new IndexOutOfBoundsException("隊列已滿的異常");  }  elementData[rear++] = element;  //如果rear已經到頭,那就轉頭  rear = rear == capacity ? 0 : rear; } //移除隊列 public T remove() {  if (isEmpty()) {   throw new IndexOutOfBoundsException("空隊列異常");  }  //保留隊列的rear端的元素的值  T oldValue = (T) elementData[front];  //釋放隊列的rear端的元素  elementData[front++] = null;  //如果front已經到頭,那就轉頭  front = front == capacity ? 0 : front;  return oldValue; } //返回隊列頂元素,但不刪除隊列頂元素 public T element() {  if (isEmpty()) {   throw new IndexOutOfBoundsException("空隊列異常");  }  return (T) elementData[front]; } //判斷循環隊列是否為空隊列 public boolean isEmpty() {  //rear==front且rear處的元素為null  return rear == front && elementData[rear] == null; } //清空循環隊列 public void clear() {  //將底層數組所有元素賦為null  Arrays.fill(elementData, null);  front = 0;  rear = 0; } public String toString() {  if (isEmpty()) {   return "[]";  } else {   //如果front < rear,有效元素就是front到rear之間的元素   if (front < rear) {    StringBuilder sb = new StringBuilder("[");    for (int i = front; i < rear; i++) {     sb.append(elementData[i].toString() + ", ");    }    int len = sb.length();    return sb.delete(len - 2, len).append("]").toString();   }   //如果front >= rear,有效元素為front->capacity之間、0->front之間的   else {    StringBuilder sb = new StringBuilder("[");    for (int i = front; i < capacity; i++) {     sb.append(elementData[i].toString() + ", ");    }    for (int i = 0; i < rear; i++) {     sb.append(elementData[i].toString() + ", ");    }    int len = sb.length();    return sb.delete(len - 2, len).append("]").toString();   }  } } public static void main(String[] args) {  LoopQueue<String> queue = new LoopQueue<String>("aaaa", 3);  //添加兩個元素  queue.add("bbbb");  queue.add("cccc");  //此時隊列已滿  System.out.println(queue);  //刪除一個元素后,隊列可以再多加一個元素  queue.remove();  System.out.println("刪除一個元素后的隊列:" + queue);  //再次添加一個元素,此時隊列又滿  queue.add("dddd");  System.out.println(queue);  System.out.println("隊列滿時的長度:" + queue.size());  //刪除一個元素后,隊列可以再多加一個元素  queue.remove();  //再次加入一個元素,此時隊列又滿  queue.add("eeee");  System.out.println(queue); }}

以上這篇java隊列實現方法(順序隊列,鏈式隊列,循環隊列)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲精品综合一区91| 奇米成人av国产一区二区三区| 欧美日韩一区二区精品| 夜夜嗨av色一区二区不卡| 久久亚洲一区二区三区四区五区高| 久久久久国产一区二区三区| 成人av在线网址| 欧美午夜精品久久久久久浪潮| 久久久免费在线观看| 午夜精品国产精品大乳美女| 91久久久久久久一区二区| 久久福利视频导航| 综合欧美国产视频二区| 亚洲成年人在线播放| 91国在线精品国内播放| 欧美性猛交xxxx富婆弯腰| 激情久久av一区av二区av三区| 国产精品91免费在线| 欧美猛交免费看| 91中文字幕一区| 亚洲xxxxx| 欧美亚洲国产日本| 亚洲视频国产视频| 久久久99久久精品女同性| 欧美国产日韩一区| 国产精品精品视频一区二区三区| 中文字幕精品久久| 国产偷国产偷亚洲清高网站| 色偷偷av一区二区三区乱| 久久久精品国产网站| 国内精品久久久久伊人av| 色悠久久久久综合先锋影音下载| 亚洲丝袜在线视频| 97婷婷大伊香蕉精品视频| 国产激情综合五月久久| 亚洲福利视频网| 久久久国产影院| 国产精品中文久久久久久久| 国产综合久久久久| 久久久久久999| 日韩av在线免费| 国产精品久久久久久久av大片| 国产成人一区二区在线| 国产精品久久久久久影视| 亚洲毛片在线看| 26uuu久久噜噜噜噜| 日韩欧美福利视频| 国产91久久婷婷一区二区| 精品国产乱码久久久久酒店| 欧美激情在线观看视频| www.xxxx欧美| 国产精品久久久av| 国语自产偷拍精品视频偷| 日韩av男人的天堂| 综合国产在线观看| 亚洲国产精品va在线看黑人| 中文字幕日韩高清| 精品福利免费观看| 欧美激情久久久久久| 欧美另类极品videosbest最新版本| 国产精品久久久久9999| 国产99视频精品免视看7| 亚洲福利在线播放| 91在线视频导航| 疯狂做受xxxx高潮欧美日本| 亚洲大胆人体视频| 91精品国产综合久久男男| 欧美老少做受xxxx高潮| 欧美日韩国产综合新一区| 久久精品精品电影网| 亚洲第一色在线| 欧美亚洲另类制服自拍| 国产不卡视频在线| 久久亚洲精品国产亚洲老地址| 日韩亚洲欧美中文高清在线| 欧美日韩一区二区三区在线免费观看| 亚洲免费一级电影| 成人性生交大片免费看视频直播| 日韩欧中文字幕| 亚洲视频第一页| 欧美老肥婆性猛交视频| 欧美日韩国产中文精品字幕自在自线| 精品久久国产精品| 亚洲精品mp4| 亚洲性线免费观看视频成熟| 亚洲美女视频网| 色狠狠av一区二区三区香蕉蜜桃| 亚洲色图18p| 久久影视免费观看| 国产亚洲人成a一在线v站| 欧美成人黄色小视频| 69久久夜色精品国产7777| 亚洲国产精品系列| 亚洲精品永久免费精品| 亚洲人成自拍网站| 日韩在线观看免费| 国产一区欧美二区三区| 国产精品久久二区| 欧美一级黑人aaaaaaa做受| 精品久久久久久久久国产字幕| 草民午夜欧美限制a级福利片| 亚洲精品ady| 亚洲欧美日韩精品| 国产精品96久久久久久又黄又硬| 欧美日韩美女在线| 亚洲91精品在线观看| 亚洲国语精品自产拍在线观看| 97超碰蝌蚪网人人做人人爽| 国产一区二区成人| 国产女人精品视频| 国产精品88a∨| 国产日韩欧美91| 欧美xxxx18国产| 色偷偷噜噜噜亚洲男人的天堂| 亚洲区一区二区| 日韩三级成人av网| 久久综合88中文色鬼| 一区二区三区回区在观看免费视频| 97碰碰碰免费色视频| 中文字幕日韩在线观看| 黑人欧美xxxx| 亚洲欧美中文字幕在线一区| 亚洲精品电影网在线观看| 日韩电影免费观看在线观看| 国产精品丝袜视频| 精品视频偷偷看在线观看| 日本道色综合久久影院| 亚洲社区在线观看| 不卡在线观看电视剧完整版| 92裸体在线视频网站| 国外日韩电影在线观看| 日韩免费不卡av| 国产精品91在线观看| 国产91在线播放九色快色| 国产日韩欧美日韩大片| 精品久久久久久久久久ntr影视| 国产不卡视频在线| 欧美激情精品久久久| 欧美国产日韩中文字幕在线| 久久久精品久久久久| 久久理论片午夜琪琪电影网| 欧美日韩在线视频观看| 久久夜色精品国产| 亚洲精品久久久久中文字幕欢迎你| 在线精品播放av| 国产精品久久色| 亚洲欧洲第一视频| 欧美一区视频在线| 自拍偷拍亚洲欧美| 57pao精品| 亚洲jizzjizz日本少妇| 成人淫片在线看| 欧美黑人狂野猛交老妇| 成人av番号网| 色综合久久悠悠| 久久久久久国产精品| 亚洲在线视频福利| 青青草一区二区| 91免费的视频在线播放| 青草热久免费精品视频| 久久九九有精品国产23| 欧美俄罗斯性视频| 亚洲高清久久久久久| 日韩中文字幕在线看|