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

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

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

leetcode622-設(shè)計(jì)循環(huán)隊(duì)列,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu),算法

?本題重點(diǎn):

1. 選擇合適的數(shù)據(jù)結(jié)構(gòu)

2. 針對選擇的數(shù)據(jù)結(jié)構(gòu)判斷“空”和“滿”

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

一、思路

1. 數(shù)組實(shí)現(xiàn)隊(duì)列。定義變量 front 標(biāo)識隊(duì)頭,變量 rear 標(biāo)識隊(duì)尾。

數(shù)組設(shè)計(jì)循環(huán)隊(duì)列的好處:

1. 找隊(duì)尾元素方便;使用鏈表實(shí)現(xiàn)時,需要找尾。

2. 循環(huán)實(shí)現(xiàn)方便,通過控制下標(biāo)即可完成循環(huán)。

2. 初始時,front = rear = 0,每次插入一個元素,rear向后走一位。

3. 判斷“空” 和 “滿”。如果 front 和 rear 下標(biāo)相同,隊(duì)列為空,還是滿?

leetcode622-設(shè)計(jì)循環(huán)隊(duì)列,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu),算法

4. 理解(rear + 1)% (k + 1)== front 。

若隊(duì)列已滿,則rear 的下一個位置為 front。

leetcode622-設(shè)計(jì)循環(huán)隊(duì)列,數(shù)據(jù)結(jié)構(gòu)初階,數(shù)據(jù)結(jié)構(gòu),算法

此外,每一次插入數(shù)據(jù) 或者 刪除數(shù)據(jù) 后,都要進(jìn)行取模操作

防止 front 和 rear 走出實(shí)際數(shù)組的范圍,造成數(shù)組越界。

二、功能模塊實(shí)現(xiàn)?

1.?MyCircularQueue(k): 設(shè)置隊(duì)列長度為 k

typedef struct {
    int* a; // 指向的空間用來存儲元素
    int front;
    int rear;
    int k;
} MyCircularQueue;

?
MyCircularQueue* myCircularQueueCreate(int k) {
    MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));
    obj->front = obj->rear = 0;
    obj->k = k;
    obj->a = (int*)malloc(sizeof(int) * (k + 1));
    // 多創(chuàng)建1個空位,
    // 該位置不用來存儲元素,僅用于判斷隊(duì)列“空”和“滿”
    return obj;
}

2.?isEmpty(): 檢查循環(huán)隊(duì)列是否為空

bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
    if(obj->rear == obj->front)
        return true;
    else
        return false;
}

3.?isFull():?檢查循環(huán)隊(duì)列是否已滿

bool myCircularQueueIsFull(MyCircularQueue* obj) {
    if((obj->rear + 1) % (obj->k + 1) == obj->front)
        return true;
    else
        return false;
}

4.?enQueue(value):?向循環(huán)隊(duì)列插入一個元素。

如果成功插入則返回真。

bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
    if(myCircularQueueIsFull(obj))
        return false;
    else
    {
        obj->a[obj->rear] = value;
        obj->rear++;

        obj->rear %= obj->k + 1;
        return true;
    }
}

5.?deQueue():?從循環(huán)隊(duì)列中刪除一個元素。

如果成功刪除則返回真。

bool myCircularQueueDeQueue(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
        return false;
    else
    {
        obj->front++;
        obj->front %= obj->k + 1;
        return true;
    }
}

?6.?Front:?從隊(duì)首獲取元素。

如果隊(duì)列為空,返回 -1 。

int myCircularQueueFront(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
        return -1;
    else
        return obj->a[obj->front];
}   

7.?Rear:?獲取隊(duì)尾元素。

如果隊(duì)列為空,返回 -1 。?文章來源地址http://www.zghlxwxcb.cn/news/detail-696010.html

int myCircularQueueRear(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
        return -1;
    else
        return obj->a[(obj->rear + (obj->k + 1) - 1) % (obj->k + 1)];
}

8. QueueFree: 銷毀循環(huán)隊(duì)列

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

?

三、所有代碼

typedef struct {
    int* a;
    int front;
    int rear;
    int k;
} MyCircularQueue;


MyCircularQueue* myCircularQueueCreate(int k) {
    MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));
    obj->front = obj->rear = 0;
    obj->k = k;
    obj->a = (int*)malloc(sizeof(int) * (k + 1));
    return obj;
}

bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
    if(obj->rear == obj->front)
        return true;
    else
        return false;
}

bool myCircularQueueIsFull(MyCircularQueue* obj) {
    if((obj->rear + 1) % (obj->k + 1) == obj->front)
        return true;
    else
        return false;
}

bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
    if(myCircularQueueIsFull(obj))
        return false;
    else
    {
        obj->a[obj->rear] = value;
        obj->rear++;

        obj->rear %= obj->k + 1;
        return true;
    }
}

bool myCircularQueueDeQueue(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
        return false;
    else
    {
        obj->front++;
        obj->front %= obj->k + 1;
        return true;
    }
}

int myCircularQueueFront(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
        return -1;
    else
        return obj->a[obj->front];
}   

int myCircularQueueRear(MyCircularQueue* obj) {
    if(myCircularQueueIsEmpty(obj))
        return -1;
    else
        return obj->a[(obj->rear + (obj->k + 1) - 1) % (obj->k + 1)];
}


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

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

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

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

相關(guān)文章

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

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

    ??????? 個人主頁:簡 料 ???? 所屬專欄:C++ ???? 個人社區(qū):越努力越幸運(yùn)社區(qū) ???? 簡? ? ?? 介: 簡料簡料,簡單有料~在校大學(xué)生一枚,專注C/C++/GO的干貨分享,立志成為您的好幫手 ~ C/C++學(xué)習(xí)路線 (點(diǎn)擊解鎖) ?? C語言階段(已結(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é)》 ?? 座右銘:每個優(yōu)秀的人都有一段沉默的時光,那段時光是付出了很多努力卻得不到結(jié)果的日子,我們把它叫做扎根 請你僅使用兩個隊(duì)列實(shí)現(xiàn)一個后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、

    2024年01月20日
    瀏覽(26)
  • 【力扣--622】設(shè)計(jì)循環(huán)隊(duì)列

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

    ??作者 : D. Star. ??專欄 : 數(shù)據(jù)結(jié)構(gòu) ??今日分享 : 丟臉其實(shí)并沒有那么可怕,我們可以從另一個角度來想:別人能夠記住我了,而且過了還有多少人能記得我呢?雖然這種出場不太優(yōu)雅?? 【力扣–622】設(shè)計(jì)循環(huán)隊(duì)列 設(shè)計(jì)你的循環(huán)隊(duì)列實(shí)現(xiàn)。 循環(huán)隊(duì)列是一種線性數(shù)據(jù)結(jié)構(gòu),

    2024年02月06日
    瀏覽(16)
  • 力扣622:設(shè)計(jì)循環(huán)隊(duì)列(中等)

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

    目錄 思考 一,循環(huán)隊(duì)列的初始化myCircularQueueCreate 二,判斷是否為空myCircularQueueIsEmpty 三,判斷隊(duì)列是否滿了bool myCircularQueueIsFull 四,隊(duì)列的插入myCircularQueueEnQueue 五,隊(duì)列的刪除myCircularQueueDeQueue 六,隊(duì)列取頭元素和尾元素myCircularQueueFront? ?//? ?myCircularQueueRear 七,銷毀隊(duì)列

    2024年03月13日
    瀏覽(20)
  • 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ì)首之后以形成一個循環(huán)。它也被稱為“環(huán)形緩沖器”。 循環(huán)隊(duì)列的一個好處是我們可以利用這個隊(duì)列之前用過的空間。在一個普通隊(duì)列里,一旦一個隊(duì)列滿了,

    2024年02月11日
    瀏覽(21)
  • 【刷題】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ì)首之后以形成一個循環(huán)。它也被稱為“環(huán)形緩沖器”。 循環(huán)隊(duì)列的一個好處是我們可以利用這個隊(duì)列之前用過的空間。在一個普通隊(duì)列里,一

    2024年02月05日
    瀏覽(18)
  • 數(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)時,很多人可能會想到普通的隊(duì)列,即先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)

    2024年02月13日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法分析】使用C語言實(shí)現(xiàn)隊(duì)列的兩種(帶頭結(jié)點(diǎn)與不帶頭結(jié)點(diǎn))鏈?zhǔn)酱鎯Γ⑶医o出一種循環(huán)隊(duì)列的設(shè)計(jì)思想

    【數(shù)據(jù)結(jié)構(gòu)與算法分析】使用C語言實(shí)現(xiàn)隊(duì)列的兩種(帶頭結(jié)點(diǎn)與不帶頭結(jié)點(diǎn))鏈?zhǔn)酱鎯?,并且給出一種循環(huán)隊(duì)列的設(shè)計(jì)思想

    ??當(dāng)我們編寫程序時,經(jīng)常需要處理各種數(shù)據(jù)結(jié)構(gòu)。隊(duì)列是一種常見的數(shù)據(jù)結(jié)構(gòu),它有著廣泛的應(yīng)用場景。隊(duì)列的基本操作包括入隊(duì)和出隊(duì),應(yīng)用于模擬等待隊(duì)列、消息隊(duì)列、計(jì)算機(jī)緩存等場合。 ??在實(shí)際編程中,我們可以用不同的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)隊(duì)列。本文主要介紹了

    2024年02月08日
    瀏覽(503)
  • 數(shù)據(jù)結(jié)構(gòu)—循環(huán)隊(duì)列(環(huán)形隊(duì)列)

    數(shù)據(jù)結(jié)構(gòu)—循環(huán)隊(duì)列(環(huán)形隊(duì)列)

    循環(huán)隊(duì)列是一種線性數(shù)據(jù)結(jié)構(gòu),其操作表現(xiàn)基于 FIFO(先進(jìn)先出)原則并且 隊(duì)尾被連接在隊(duì)首之后以形成一個循環(huán) 。它也被稱為“ 環(huán)形緩沖器 ”。 循環(huán)隊(duì)列的一個好處是可以利用這個隊(duì)列之前用過的空間。在一個普通隊(duì)列里,一旦一個隊(duì)列滿了,我們就不能插入下一個元素

    2024年02月11日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu)--隊(duì)列與循環(huán)隊(duì)列

    數(shù)據(jù)結(jié)構(gòu)--隊(duì)列與循環(huán)隊(duì)列

    ? ? ? ? 隊(duì)列是什么,先聯(lián)想一下隊(duì),排隊(duì)先來的人排前面先出,后來的人排后面后出;隊(duì)列的性質(zhì)也一樣,先進(jìn)隊(duì)列的數(shù)據(jù)先出,后進(jìn)隊(duì)列的后出;就像圖一的樣子: ?圖1 ? ? ? ? 如圖1,1號元素是最先進(jìn)的,開始出隊(duì)時,那么他就是最先出的,然后12進(jìn)隊(duì),就應(yīng)該排在最

    2024年02月10日
    瀏覽(15)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包