国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【力扣--622】設(shè)計(jì)循環(huán)隊(duì)列

這篇具有很好參考價(jià)值的文章主要介紹了【力扣--622】設(shè)計(jì)循環(huán)隊(duì)列。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??作者 : D. Star.
??專欄 : 數(shù)據(jù)結(jié)構(gòu)
??今日分享 : 丟臉其實(shí)并沒有那么可怕,我們可以從另一個(gè)角度來(lái)想:別人能夠記住我了,而且過了還有多少人能記得我呢?雖然這種出場(chǎng)不太優(yōu)雅??

【力扣--622】設(shè)計(jì)循環(huán)隊(duì)列

??題目鏈接:

【力扣–622】設(shè)計(jì)循環(huán)隊(duì)列

??題目:

設(shè)計(jì)你的循環(huán)隊(duì)列實(shí)現(xiàn)。 循環(huán)隊(duì)列是一種線性數(shù)據(jù)結(jié)構(gòu),其操作表現(xiàn)基于 FIFO(先進(jìn)先出)原則并且隊(duì)尾被連接在隊(duì)首之后以形成一個(gè)循環(huán)。它也被稱為“環(huán)形緩沖器”。

循環(huán)隊(duì)列的一個(gè)好處是我們可以利用這個(gè)隊(duì)列之前用過的空間。在一個(gè)普通隊(duì)列里,一旦一個(gè)隊(duì)列滿了,我們就不能插入下一個(gè)元素,即使在隊(duì)列前面仍有空間。但是使用循環(huán)隊(duì)列,我們能使用這些空間去存儲(chǔ)新的值。

你的實(shí)現(xiàn)應(yīng)該支持如下操作:
MyCircularQueue(k): 構(gòu)造器,設(shè)置隊(duì)列長(zhǎng)度為 k 。
Front: 從隊(duì)首獲取元素。如果隊(duì)列為空,返回 -1 。
Rear: 獲取隊(duì)尾元素。如果隊(duì)列為空,返回 -1 。
enQueue(value): 向循環(huán)隊(duì)列插入一個(gè)元素。如果成功插入則返回真。
deQueue(): 從循環(huán)隊(duì)列中刪除一個(gè)元素。如果成功刪除則返回真。
isEmpty(): 檢查循環(huán)隊(duì)列是否為空。
isFull(): 檢查循環(huán)隊(duì)列是否已滿。

示例:

MyCircularQueue circularQueue = new MyCircularQueue(3); // 設(shè)置長(zhǎng)度為 3
circularQueue.enQueue(1); // 返回 true
circularQueue.enQueue(2); // 返回 true
circularQueue.enQueue(3); // 返回 true
circularQueue.enQueue(4); // 返回 false,隊(duì)列已滿
circularQueue.Rear(); // 返回 3
circularQueue.isFull(); // 返回 true
circularQueue.deQueue(); // 返回 true
circularQueue.enQueue(4); // 返回 true
circularQueue.Rear(); // 返回 4

??解題思路:

通過一個(gè)定長(zhǎng)數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列
入隊(duì):首先要判斷隊(duì)列是否已滿,再進(jìn)行入隊(duì)的操作,入隊(duì)操作需要考慮索引循環(huán)的問題,當(dāng)索引越界,需要讓它變成最小值
出隊(duì):首先要判斷隊(duì)列是否為空,再進(jìn)行出隊(duì)操作,出隊(duì)也需要考慮索引循環(huán)的問題
判空: 隊(duì)頭 == 隊(duì)尾
判滿: 隊(duì)尾 + 1 == 隊(duì)頭

??代碼詳情:

typedef struct {
    int* a;
    int front;
    int rear;
    int k;//數(shù)組大小
} MyCircularQueue;


//構(gòu)造器,設(shè)置隊(duì)列長(zhǎng)度為 k 。
MyCircularQueue* myCircularQueueCreate(int k) {
    MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));
    obj->a = (int*)malloc(sizeof(int)*(k+1));
    obj->front = obj->rear = 0;
    obj->k = k;
    return obj;
}

//檢查循環(huán)隊(duì)列是否已滿。
bool myCircularQueueIsFull(MyCircularQueue* obj) {
    assert(obj);
    return ((obj->rear+1) % (obj->k+1) == obj->front);
}

// 檢查循環(huán)隊(duì)列是否為空。
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
    assert(obj);
    return obj->front == obj->rear;
}

//向循環(huán)隊(duì)列插入一個(gè)元素。如果成功插入則返回真。
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
    if(myCircularQueueIsFull(obj))
    {
        return false;
    }
    else
    {
        //法一:
        // obj->a[obj->rear] = value;
        // obj->rear = (obj->rear+1)%(obj->k+1);

        //法二:
        obj->a[obj->rear++] = value;
        obj->rear %= (obj->k+1);

        return true;  
    }
}

//從循環(huán)隊(duì)列中刪除一個(gè)元素。如果成功刪除則返回真。
bool myCircularQueueDeQueue(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
    {
        return false;
    }
    else
    {
        //出數(shù)據(jù)
        obj->front++;
        obj->front %= (obj->k+1);
        return true;
    }
}

// 從隊(duì)首獲取元素。如果隊(duì)列為空,返回 -1 。
int myCircularQueueFront(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
        return -1;
    else
        return obj->a[obj->front];
}

// 獲取隊(duì)尾元素。如果隊(duì)列為空,返回 -1 。
int myCircularQueueRear(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
        return -1;  
    else
    {
        int ret = obj->rear == 0 ? obj->k : obj->rear - 1;
        return obj->a[ret];
    }
}

//
void myCircularQueueFree(MyCircularQueue* obj) {
    free(obj->a);
    free(obj);
}

總結(jié):

一定要理解好判空判滿的邏輯,不然做題很費(fèi)勁的?。?!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-459279.html


感謝家人的閱讀,若有不準(zhǔn)確的地方 歡迎在評(píng)論區(qū)指正!

家人們,點(diǎn)個(gè)再走唄~

到了這里,關(guān)于【力扣--622】設(shè)計(jì)循環(huán)隊(duì)列的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • leetcode622-設(shè)計(jì)循環(huán)隊(duì)列

    leetcode622-設(shè)計(jì)循環(huán)隊(duì)列

    ?本題重點(diǎn): 1. 選擇合適的數(shù)據(jù)結(jié)構(gòu) 2. 針對(duì)選擇的數(shù)據(jù)結(jié)構(gòu)判斷“空”和“滿” 這兩點(diǎn)是不分先后次序的,在思考時(shí)應(yīng)該被綜合起來(lái)。事實(shí)上,無(wú)論我們選擇鏈表還是數(shù)組,最終都能實(shí)現(xiàn)題中描述的“循環(huán)隊(duì)列”的功能,只不過選擇不同結(jié)構(gòu)時(shí),我們面臨和需要解決的問題

    2024年02月10日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu):循環(huán)隊(duì)列的實(shí)現(xiàn)(leetcode622.設(shè)計(jì)循環(huán)隊(duì)列)

    數(shù)據(jù)結(jié)構(gòu):循環(huán)隊(duì)列的實(shí)現(xiàn)(leetcode622.設(shè)計(jì)循環(huán)隊(duì)列)

    ? 目錄 一.循環(huán)隊(duì)列簡(jiǎn)單介紹 二.用靜態(tài)數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列 1.數(shù)組循環(huán)隊(duì)列結(jié)構(gòu)設(shè)計(jì) 2.數(shù)組循環(huán)隊(duì)列的堆區(qū)內(nèi)存申請(qǐng)接口? 3.數(shù)據(jù)出隊(duì)和入隊(duì)的接口實(shí)現(xiàn) 4.其他操作接口 5.數(shù)組循環(huán)隊(duì)列的實(shí)現(xiàn)代碼總覽? 三.靜態(tài)單向循環(huán)鏈表實(shí)現(xiàn)循環(huán)隊(duì)列? 1.鏈表循環(huán)隊(duì)列的結(jié)構(gòu)設(shè)計(jì) 2.創(chuàng)建靜態(tài)

    2024年02月03日
    瀏覽(21)
  • 力扣設(shè)計(jì)循環(huán)隊(duì)列

    力扣設(shè)計(jì)循環(huán)隊(duì)列

    目錄 1.使用了數(shù)組來(lái)表達(dá)循環(huán) 2.循環(huán)隊(duì)列是否為空 3.循環(huán)隊(duì)列是否已滿。 4.初始化 5.向循環(huán)隊(duì)列插入一個(gè)元素。如果成功插入則返回真 ? ? ? ? ? ? ? ? ? ? ? ? ?6.從隊(duì)首獲取元素。如果隊(duì)列為空,返回 -1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??7.獲取隊(duì)尾元素。如果隊(duì)列為

    2024年02月07日
    瀏覽(11)
  • 數(shù)據(jù)結(jié)構(gòu)刷題訓(xùn)練:設(shè)計(jì)循環(huán)隊(duì)列(力扣OJ)

    數(shù)據(jù)結(jié)構(gòu)刷題訓(xùn)練:設(shè)計(jì)循環(huán)隊(duì)列(力扣OJ)

    目錄 文章目錄 前言 1. 題目:設(shè)計(jì)循環(huán)隊(duì)列 2. 思路 3. 分析 ?3.1 定義循環(huán)隊(duì)列 ?3.2 創(chuàng)建隊(duì)列 ?3.3 判空和判滿 ?3.4 入隊(duì) ?3.5 出隊(duì) ?3.6 取隊(duì)頭隊(duì)尾數(shù)據(jù) ?3.7 銷毀隊(duì)列 ?4. 題解 總結(jié) ????????當(dāng)談到隊(duì)列數(shù)據(jù)結(jié)構(gòu)時(shí),很多人可能會(huì)想到普通的隊(duì)列,即先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)

    2024年02月13日
    瀏覽(22)
  • leetcode——設(shè)計(jì)循環(huán)隊(duì)列

    leetcode——設(shè)計(jì)循環(huán)隊(duì)列

    設(shè)計(jì)循環(huán)隊(duì)列 這個(gè)題目在這里小編只分享一個(gè)解題思路,因?yàn)檫€有一個(gè)思路小編還在嘗試,一直過不了,還在這里不斷嘗試,等我試出來(lái)的時(shí)候我在分享給大家,首先我們?cè)谶@里給出的是數(shù)組的形式,后面在分享單鏈表的思路,因?yàn)閿?shù)組在內(nèi)存上是連續(xù)的,這里給出的思路是

    2024年02月05日
    瀏覽(19)
  • 什么?要求設(shè)計(jì)一個(gè)循環(huán)隊(duì)列?

    什么?要求設(shè)計(jì)一個(gè)循環(huán)隊(duì)列?

    ??個(gè)人主頁(yè):?? :???初階牛??? ??推薦專欄: ??????C語(yǔ)言初階 ??????C語(yǔ)言進(jìn)階 ??個(gè)人信條: ??知行合一 ??本篇簡(jiǎn)介::講解用c語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的循環(huán)隊(duì)列. 先聲明一下: 題目來(lái)源:力扣(LeetCode) 題目名稱: 設(shè)計(jì)循環(huán)隊(duì)列 :題目鏈接 難度: 中等 介紹: 設(shè)計(jì)你的

    2024年02月07日
    瀏覽(17)
  • 棧和隊(duì)列(二) 隊(duì)列的實(shí)現(xiàn),用棧實(shí)現(xiàn)隊(duì)列,用隊(duì)列實(shí)現(xiàn)棧,設(shè)計(jì)循環(huán)隊(duì)列

    棧和隊(duì)列(二) 隊(duì)列的實(shí)現(xiàn),用棧實(shí)現(xiàn)隊(duì)列,用隊(duì)列實(shí)現(xiàn)棧,設(shè)計(jì)循環(huán)隊(duì)列

    這里的隊(duì)列我們使用鏈?zhǔn)疥?duì)列,好處就是可以很方便的取出隊(duì)頭的元素。 使用順序隊(duì)列取出隊(duì)頭元素所花費(fèi)的時(shí)間復(fù)雜度為O(N),把后面的元素向前移動(dòng)一個(gè)下標(biāo)所花費(fèi)的時(shí)間。 鏈?zhǔn)疥?duì)列的存儲(chǔ)結(jié)構(gòu): 接口函數(shù)的實(shí)現(xiàn) ` leetcode做題鏈接 主要思想:用兩個(gè)隊(duì)列來(lái)實(shí)現(xiàn)一個(gè)棧

    2024年02月11日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)OJ:設(shè)計(jì)循環(huán)隊(duì)列

    數(shù)據(jù)結(jié)構(gòu)OJ:設(shè)計(jì)循環(huán)隊(duì)列

    本題為L(zhǎng)eetCode上的經(jīng)典題目,題目要求我們?cè)O(shè)計(jì)一種循環(huán)隊(duì)列,滿足FIFO原則且隊(duì)尾被連接在隊(duì)首之后。 題目中介紹循環(huán)隊(duì)列的好處是可以重復(fù)利用空間,所以我們很容易想到在初始化時(shí)即開辟指定大小的空間,之后便不需要再開辟空間,只需后續(xù)銷毀即可。 首先我們要選擇

    2024年04月17日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】設(shè)計(jì)循環(huán)隊(duì)列

    【數(shù)據(jù)結(jié)構(gòu)與算法】設(shè)計(jì)循環(huán)隊(duì)列

    ??????? 個(gè)人主頁(yè):簡(jiǎn) 料 ???? 所屬專欄:C++ ???? 個(gè)人社區(qū):越努力越幸運(yùn)社區(qū) ???? 簡(jiǎn)? ? ?? 介: 簡(jiǎn)料簡(jiǎn)料,簡(jiǎn)單有料~在校大學(xué)生一枚,專注C/C++/GO的干貨分享,立志成為您的好幫手 ~ C/C++學(xué)習(xí)路線 (點(diǎn)擊解鎖) ?? C語(yǔ)言階段(已結(jié)束) ?? 數(shù)據(jù)結(jié)構(gòu)與算法(ing) ?

    2024年01月17日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】用隊(duì)列實(shí)現(xiàn)棧&&用棧實(shí)現(xiàn)隊(duì)列&&設(shè)計(jì)循環(huán)隊(duì)列

    【數(shù)據(jù)結(jié)構(gòu)與算法】用隊(duì)列實(shí)現(xiàn)棧&&用棧實(shí)現(xiàn)隊(duì)列&&設(shè)計(jì)循環(huán)隊(duì)列

    ?? 作者:@ 阿亮joy. ?? 專欄:《數(shù)據(jù)結(jié)構(gòu)與算法要嘯著學(xué)》 ?? 座右銘:每個(gè)優(yōu)秀的人都有一段沉默的時(shí)光,那段時(shí)光是付出了很多努力卻得不到結(jié)果的日子,我們把它叫做扎根 請(qǐng)你僅使用兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、

    2024年01月20日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包