欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

java怎么實(shí)現(xiàn)環(huán)形隊(duì)列

今天小編給大家分享一下java怎么實(shí)現(xiàn)環(huán)形隊(duì)列的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計(jì),大田網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:大田等地區(qū)。大田做網(wǎng)站價(jià)格咨詢:13518219792

1、普通隊(duì)列存在什么問(wèn)題?

隊(duì)列大家都知道,有幾個(gè)重要的屬性:

  • rear:指向隊(duì)列的尾巴,即最后一個(gè)元素所在的位置,初始值為-1
  • front:指向隊(duì)列的頭部的前一個(gè)位置,初始值也為-1
  • capacity:隊(duì)列的容量

空隊(duì)列的rear和front都等于-1,入隊(duì)時(shí),front不動(dòng),rear++,當(dāng) rear == capacity - 1時(shí),隊(duì)列已滿;出隊(duì)時(shí),rear不動(dòng),front++,當(dāng)front == rear時(shí),隊(duì)列為空??雌饋?lái)很完美,但實(shí)際上有問(wèn)題。假如一個(gè)隊(duì)列capacity = 3,入隊(duì)了三個(gè)元素,此時(shí)front = -1; rear = 2,然后再將三個(gè)元素都出隊(duì),此時(shí)front = 2, rear = 2。這時(shí)隊(duì)列明明是空的,但是卻不能再入隊(duì)元素的,因?yàn)闈M足rear = capacity - 1,也就是相當(dāng)于這隊(duì)列是一次性的,用過(guò)之后就不能再用了,即使為空也不能再入隊(duì)了,造成空間的浪費(fèi),所以環(huán)形隊(duì)列就出現(xiàn)了。

2、環(huán)形隊(duì)列實(shí)現(xiàn)思路:

環(huán)形隊(duì)列中的幾個(gè)重要屬性:

  • rear:指向隊(duì)列尾巴的后一個(gè)位置,初始值為0
  • front:指向隊(duì)列的頭部,即第一個(gè)元素所在的位置,初始值為0
  • capacity:隊(duì)列的容量

下面是環(huán)形隊(duì)列的一些算法:

  • 隊(duì)列為空時(shí):      front == rear
  • 隊(duì)列已滿時(shí):      (rear + 1) % capacity == front
  • 獲取隊(duì)列元素個(gè)數(shù):      (rear + capacity - front) % capacity
  • 入隊(duì)操作時(shí):      rear = (rear + 1) % capacity
  • 出隊(duì)操作時(shí):      front = (front + 1) % capacity;

判斷隊(duì)列是否已滿是環(huán)形隊(duì)列中最重要也是最難理解的地方。假如有一個(gè)隊(duì)列capacity = 3,入隊(duì)操作如下:

  • 第一個(gè)元素入隊(duì):      front = 0,因?yàn)?      (rear + 1) % capacity = 1 % 3 != front,所以元素可以入隊(duì),元素入隊(duì)后      rear = 1;
  • 第二個(gè)元素入隊(duì):      front = 0,因?yàn)?      (rear + 1) % capacity = 2 % 3 != front,所以元素可以入隊(duì),元素入隊(duì)后      rear = 2;
  • 第三個(gè)元素入隊(duì):      front = 0,因?yàn)?      (rear + 1) % capacity = 3 % 3 == front,所以元素不能入隊(duì),隊(duì)列已滿;

隊(duì)列容量明明是3,只入隊(duì)了兩個(gè)元素就告訴我隊(duì)列滿了?沒(méi)錯(cuò),這種判斷隊(duì)列是否已滿的算法需要犧牲數(shù)組的一個(gè)空間。

現(xiàn)在進(jìn)行出隊(duì)操作:

  • 第一個(gè)元素出隊(duì):      front = 1,      rear = 2,      (rear + 1) % capacity = 3 % 3 = 0 != front。

可以發(fā)現(xiàn),當(dāng)一個(gè)元素出隊(duì)后,又滿足入隊(duì)條件了,所以數(shù)組空間就可以重復(fù)利用了。

3、代碼實(shí)操:

public class CircleQueue<E> {
    private int capacity;
    private int front;
    private int rear;
    private Object[] arr;

    public CircleQueue(int capacity){
        this.capacity = capacity;
        this.arr = new Object[capacity];
        this.front = 0;
        this.rear = 0;
    }

    public boolean isFull(){
        return (rear + 1) % capacity == front;
    }

    public boolean isEmpty(){
        return rear == front;
    }

    public void addQueue(E e){
        if (isFull()){
            throw new RuntimeException("隊(duì)列已滿,入隊(duì)失敗");
        }
        arr[rear] = e;
        // rear指針后移
        rear = (rear + 1) % capacity;
    }

    public E getQueue(){
        if (isEmpty()){
            throw new RuntimeException("隊(duì)列為空,出隊(duì)失敗");
        }
        E val = (E) arr[front];
        front = (front + 1) % capacity;
        return val;
    }


    public int getSize(){
        return (rear + capacity - front) % capacity;
    }

    // 遍歷
    public void showQueue(){
        if (isEmpty()){
            return;
        }
        for (int i = front; i < front + getSize(); i++) {
            System.out.printf("arr[%d]=%d\n", i%capacity, arr[i%capacity]);
        }
    }

    public static void main(String[] args){
        CircleQueue<Integer> queue = new CircleQueue<>(3);
        queue.addQueue(1);
        queue.addQueue(2);
        queue.showQueue();
        //queue.addQueue(3);
        System.out.println(queue.getSize());
        System.out.println(queue.getQueue());;
        queue.addQueue(3);
        queue.showQueue();
    }
}

以上就是“java怎么實(shí)現(xiàn)環(huán)形隊(duì)列”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前題目:java怎么實(shí)現(xiàn)環(huán)形隊(duì)列
分享路徑:http://aaarwkj.com/article12/pcssdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、自適應(yīng)網(wǎng)站、Google、網(wǎng)站制作、網(wǎng)站維護(hù)、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
亚洲综合色视频免费在线播放| 久久这里只有精品伊人网| 亚洲高清成人综合网站| 亚洲av毛片在线免费播放| 97精品少妇一区二区三区| 亚洲高清中文字幕一区二三区| 亚洲av手机在线观看一区| 日韩在线视频 一区二区三区| 亚洲视频在线视频看视频在线| 搡老熟女老女人一区二区| 中文字幕一区二区三天| 一区二区少妇黄色三区| 亚洲女人下体毛茸茸视频| 少妇高潮毛片免费看高潮| 欧美香蕉视频一区二区| 午夜视频免费看一区二区| 国产黄色av网站在线| 日韩精品人妻一区二区网站| 亚洲专区综合红桃av| 98热这里只有精品视频| 天堂av在线资源观看| 人妻巨乳一区二区三区| 爱爱网爱综合日日干夜夜操 | 91亚洲国产成人久久| 精品人妻一区二区三区在线av | 日韩精品女性三级视频 | 日本一区二区不卡视频在线播放| 亚洲欧美综合区丁香六月| 老湿机午夜在线免费观看| 亚洲特级黄色做啪啪啪| 校园春色亚洲欧美日韩| 视频播放一区二区三区毛片| 亚洲成人av在线直播| 可以直接看内射的视频| 日韩精品国产亚洲欧美| 在线播放国产91精品| 日韩暴露一区二区三区| av资源在线观看少妇丰满| 欧美av一区二区三区四区| 激情欧美精品桃桃激情| 亚洲免费av一区二区|