日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

循环队列的java结构_Java数据结构——循环队列

發布時間:2023/12/15 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 循环队列的java结构_Java数据结构——循环队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

普通順序隊列存在的問題

在普通順序隊列中,入隊的操作就是先將尾指針rear右移一個單位,然后將元素值賦值給rear單位。出隊時,則是頭指針front后移一個單位。像這樣進行了一定數量的入隊和出隊操作后,可能會出現這樣的情況:

尾指針rear已指到數組的最后有一個元素,即rear==MaxLen-1,此時若再數組的前面部分可能還有很多閑置空間,即這種溢出并非是真的沒有可用的存儲空間,故稱這種溢出現象為“假溢出”。顯然,必須要解決這一塊假溢出的問題,否則順序隊列就沒有太多使用價值。

循環隊列

循環隊列的存儲結構,頭、尾指針都和普通順序隊列相同。不同的只是將隊列視為“環狀結構”,即data[0]為緊接著data[MaxLen-1]的單元,為相鄰的元素,首位成為一個環。結構如下:

隊列為空的條件:rear==front;

隊列為滿的條件:(rear+1)%maxSize==front

實現:

public class MyDlQueue {

private Object data[];

private int rear;

private int front;

private int maxSize = 10;

// 初始化隊列

public MyDlQueue(int maxSize) {

if (maxSize >= 0) {

this.maxSize = maxSize;

rear = front = 0;

data = new Object[maxSize];

} else {

throw new RuntimeException("初始化隊列大小不能小于0");

}

}

// 判空

public boolean empty() {

return rear == front ? true : false;

}

// 判滿

public boolean full() {

//maxsize加1是因為①處的rear指向隊尾的后一個

return ((rear + 1) % (maxSize + 1)) == front ? true : false;

}

// 入隊

public boolean add(Object obj) {

if (full()) {

throw new RuntimeException("隊滿");

} else {

rear = rear % maxSize; //防止數組越界

data[rear] = obj;

rear = (rear + 1) % (maxSize + 1); //①

return true;

}

}

// 出隊

public Object poll() {

if (empty()) {

throw new RuntimeException("隊空");

} else {

Object value = data[front];

data[front] = null;

front = (front + 1) % maxSize;

return value;

}

}

// 獲取隊首元素

public Object peek() {

if (empty()) {

throw new RuntimeException("隊空");

} else {

return data[front];

}

}

// 返回隊列長度

public int length() {

return rear - front;

}

public static void main(String[] args) {

MyDlQueue queue = new MyDlQueue(5);

queue.add(1);

queue.add(2);

queue.add(3);

queue.add(4);

queue.add(5);

System.out.println(queue.length());

System.out.println(queue.empty());

System.out.println(queue.peek());

System.out.println(queue.poll());

queue.add("aaa");

for (Object obj : queue.data) {

System.out.print(obj + " ");

}

}

}

總結

以上是生活随笔為你收集整理的循环队列的java结构_Java数据结构——循环队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。