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

【LeetCode】數(shù)據(jù)結(jié)構(gòu)題解(13)[設計循環(huán)鏈表]

這篇具有很好參考價值的文章主要介紹了【LeetCode】數(shù)據(jù)結(jié)構(gòu)題解(13)[設計循環(huán)鏈表]。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【LeetCode】數(shù)據(jù)結(jié)構(gòu)題解(13)[設計循環(huán)鏈表],# 玩轉(zhuǎn)數(shù)據(jù)結(jié)構(gòu)題型,數(shù)據(jù)結(jié)構(gòu),leetcode,鏈表

所屬專欄:玩轉(zhuǎn)數(shù)據(jù)結(jié)構(gòu)題型??
?? >博主首頁:初陽785??
?? >代碼托管:chuyang785??
?? >感謝大家的支持,您的點贊和關注是對我最大的支持?。?!??
?? >博主也會更加的努力,創(chuàng)作出更優(yōu)質(zhì)的博文!!??
?? >關注我,關注我,關注我,重要的事情說三遍?。。。。。。?!??
??????????????????????????????????????????????????

?? 1.題目來源

LeetCode 設計循環(huán)鏈表

??2.題目描述

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

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

【LeetCode】數(shù)據(jù)結(jié)構(gòu)題解(13)[設計循環(huán)鏈表],# 玩轉(zhuǎn)數(shù)據(jù)結(jié)構(gòu)題型,數(shù)據(jù)結(jié)構(gòu),leetcode,鏈表

??3.解題思路

  • ?? 所謂循環(huán)隊列,指的就是開辟的空間可以重復利用,這個有點類似于在一個圈里你追我趕的樣子,所以我們可以定義追的變量front,一個跑的變量rear,當每添加一個數(shù)據(jù)時rear就走一步,每刪除一個數(shù)據(jù)的時候front就走一步,而front與rear之間的距離就是元素的個數(shù),而只要元素個數(shù)小于我們的開辟的空間就說明還可以添加數(shù)據(jù)??。

【LeetCode】數(shù)據(jù)結(jié)構(gòu)題解(13)[設計循環(huán)鏈表],# 玩轉(zhuǎn)數(shù)據(jù)結(jié)構(gòu)題型,數(shù)據(jù)結(jié)構(gòu),leetcode,鏈表
【LeetCode】數(shù)據(jù)結(jié)構(gòu)題解(13)[設計循環(huán)鏈表],# 玩轉(zhuǎn)數(shù)據(jù)結(jié)構(gòu)題型,數(shù)據(jù)結(jié)構(gòu),leetcode,鏈表

  • ??我們分析一下題目給我們的要求是,給定固定長度的環(huán)元素個數(shù),要返回隊首和隊尾的元素,以及判斷是否滿了,是否是空,而當我們觀察上面的圖后會發(fā)現(xiàn),如果我們實現(xiàn)函數(shù)用的時隊列的話,那必須是一個循環(huán)隊列??,而如果要返回隊首元素的話是比較簡單的,但是如果要返回隊尾元素的話就不好找rear的前一個數(shù)據(jù),而且再判斷是否滿以及是否為空的時候不好確定,因為滿和空front都等于rear??。

【LeetCode】數(shù)據(jù)結(jié)構(gòu)題解(13)[設計循環(huán)鏈表],# 玩轉(zhuǎn)數(shù)據(jù)結(jié)構(gòu)題型,數(shù)據(jù)結(jié)構(gòu),leetcode,鏈表
*所以思來想去我們不妨不使用隊列,??我們使用數(shù)組來實現(xiàn)這一操作。而且為了區(qū)分滿和為空,我們想到了一個特別的方法,??就是多開一個空間,這塊空間不存放數(shù)據(jù),??這樣子當front = = rear 的時候就是為空的時候,當rear+1 = = front 的時候就是為滿的時候。??而且這個時候返回隊頭和隊尾的數(shù)據(jù)都是比較簡單的。??但是這有個問題,那就是數(shù)組怎么實循環(huán)?這個時候就要用到取模操作了,當rear走到多開的那個空間的時候,如果還能還能進行添加數(shù)據(jù),那么rear就要回到數(shù)組下標為0處的空間,也就是rear = rear%(k+1),同理front = front%(k+1),這個樣子就實現(xiàn)了數(shù)組循環(huán)。那怎么判斷滿了呢?就是判斷rear的下一個是不是front那就是(rear+1)%(k+1) == front如果相等就是滿了,反之沒有滿。

  • ??同時解釋一下我們oj刷題的時出現(xiàn)的一些一些疑問
typedef struct {

} MyCircularQueue;

MyCircularQueue* myCircularQueueCreate(int k) {

}

這個是我們題目出現(xiàn)的函數(shù)接口,我來解釋一下表示什么意思。文章來源地址http://www.zghlxwxcb.cn/news/detail-638688.html

  1. 我們分析過了要定義兩個變量,front和rear同時還有一個固定長度k,而我們通常遇到這種兩個及以上的要使用的成員時,??為了減少傳遞的參數(shù),以及代碼的可讀性,簡潔性,??我們通常會用一個結(jié)構(gòu)體把他們封裝起來,并且這個結(jié)構(gòu)體還是個匿名結(jié)構(gòu)體,匿名結(jié)構(gòu)體的特點就是只能用一次,這里我們只需要使用一次即可,所以匿名合理。
  2. 而另一個函數(shù)接口是用來初始化我們的結(jié)構(gòu)體的,并返回結(jié)構(gòu)體指針。??

??4.代碼展示

typedef struct {
	//a用來開辟數(shù)組
    int* a;
    int front;
    int rear;
    int k;
} MyCircularQueue;

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

bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
	//如果相等數(shù)組為空
    return (obj->front) == (obj->rear);
}

bool myCircularQueueIsFull(MyCircularQueue* obj) {
	//如果rear的下一個是front說明滿了
    return (obj->rear+1)%(obj->k+1) == obj->front;
}

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->rear == 0 ? obj->a[obj->k] : obj->a[obj->rear-1];
}

bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
    if (myCircularQueueIsFull(obj))
        return false;
    
    obj->a[obj->rear] = value;
    obj->rear++;
    //設計循環(huán)數(shù)組
    obj->rear %= (obj->k+1);

    return true;
}

bool myCircularQueueDeQueue(MyCircularQueue* obj) {
    if (myCircularQueueIsEmpty(obj))
        return false;
    
    obj->front++;
    //設計循環(huán)數(shù)組
    obj->front %= (obj->k+1);
    
    return true;
}

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

到了這里,關于【LeetCode】數(shù)據(jù)結(jié)構(gòu)題解(13)[設計循環(huán)鏈表]的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 【LeetCode】數(shù)據(jù)結(jié)構(gòu)題解(9)[復制帶隨機指針的鏈表]

    【LeetCode】數(shù)據(jù)結(jié)構(gòu)題解(9)[復制帶隨機指針的鏈表]

    所屬專欄:玩轉(zhuǎn)數(shù)據(jù)結(jié)構(gòu)題型?? ?? 博主首頁:初陽785?? ?? 代碼托管:chuyang785?? ?? 感謝大家的支持,您的點贊和關注是對我最大的支持?。?!?? ?? 博主也會更加的努力,創(chuàng)作出更優(yōu)質(zhì)的博文??!?? ?? 關注我,關注我,關注我,重要的事情說三遍?。。。?!

    2024年02月11日
    瀏覽(97)
  • 數(shù)據(jù)結(jié)構(gòu)課程設計題目——鏈表綜合算法設計、帶頭雙向循環(huán)鏈表、插入、顯示、刪除、修改、排序

    數(shù)據(jù)結(jié)構(gòu)課程設計題目——鏈表綜合算法設計、帶頭雙向循環(huán)鏈表、插入、顯示、刪除、修改、排序

    ??課程設計題目1–鏈表綜合算法設計 ??一、設計內(nèi)容 ??已知簡單的人事信息系統(tǒng)中職工記錄包含職工編號(no)、職工姓名(name)、部門名稱(depname)、職稱(title)和工資數(shù)(salary)等信息(可以增加其他信息),設計并完成一個簡單的人事信息管理系統(tǒng),要求完成但不

    2024年02月08日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】帶頭雙向循環(huán)鏈表

    【數(shù)據(jù)結(jié)構(gòu)】帶頭雙向循環(huán)鏈表

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

    2024年01月16日
    瀏覽(33)
  • 數(shù)據(jù)結(jié)構(gòu)---帶頭雙向循環(huán)鏈表

    數(shù)據(jù)結(jié)構(gòu)---帶頭雙向循環(huán)鏈表

    什么是雙向帶頭循環(huán)鏈表? 上面簡單的一個非空 帶頭循環(huán)雙向鏈表邏輯圖 如何定義一個雙向鏈表? 根據(jù)圖和代碼可以看雙向鏈表就是單鏈表的每個結(jié)點中,在設置一個指向前驅(qū)節(jié)點的指針 簡單認識之后,對他進行初始化(申請一個頭節(jié)點,讓前驅(qū)和后驅(qū)指針都指向自己) 代碼

    2024年02月07日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)-帶頭雙向循環(huán)鏈表

    數(shù)據(jù)結(jié)構(gòu)-帶頭雙向循環(huán)鏈表

    前言: 鏈表有很多種,上一章結(jié),我復盤了單鏈表,這一章節(jié),主要針對雙鏈表的知識點進行,整理復盤,如果將鏈表分類的話,有很多種,我就學習的方向考察的重點,主要針對這兩種鏈表進行整理。 帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復雜,一般用在單獨存儲數(shù)據(jù)。實際中使用

    2023年04月09日
    瀏覽(28)
  • 帶頭雙向循環(huán)鏈表--數(shù)據(jù)結(jié)構(gòu)

    帶頭雙向循環(huán)鏈表--數(shù)據(jù)結(jié)構(gòu)

    ????????????????????????Take your time ! ???????????????????????? ??個人主頁:??????大魔王?????? ??所屬專欄:??魔王的修煉之路–數(shù)據(jù)結(jié)構(gòu)?? 如果你覺得這篇文章對你有幫助,請在文章結(jié)尾處留下你的 點贊 ??和 關注 ??,支持一

    2024年02月01日
    瀏覽(40)
  • 數(shù)據(jù)結(jié)構(gòu)——帶頭雙向循環(huán)鏈表

    數(shù)據(jù)結(jié)構(gòu)——帶頭雙向循環(huán)鏈表

    在創(chuàng)建帶頭雙向循環(huán)鏈表的節(jié)點中比之前單鏈表節(jié)點的創(chuàng)建多了一個struct ListNode* prev;結(jié)構(gòu)體指針,目的在與存儲前一個節(jié)點的地址,便于將整個鏈表連在一起。 動態(tài)申請內(nèi)存結(jié)點,函數(shù)返回的是一個指針類型,用malloc開辟一個LTNode大小的空間,并用node指向這個空間,再判斷

    2024年02月09日
    瀏覽(24)
  • 數(shù)據(jù)結(jié)構(gòu)篇三:雙向循環(huán)鏈表

    數(shù)據(jù)結(jié)構(gòu)篇三:雙向循環(huán)鏈表

    ??前面我們學習了單鏈表的實現(xiàn),我們發(fā)現(xiàn)它在進行從后往前查找的時候有很大的不便,為了解決這個問題,雙向鏈表油然而生。它可以很好的解決單鏈表無法從后往前查找的困難。 ??如圖所示,它是有兩個指針域,一個指向后一個結(jié)點,一個指向前一個結(jié)點。它存儲了

    2024年02月02日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)之帶頭雙向循環(huán)鏈表

    數(shù)據(jù)結(jié)構(gòu)之帶頭雙向循環(huán)鏈表

    目錄 鏈表的分類 帶頭雙向循環(huán)鏈表的實現(xiàn) 帶頭雙向循環(huán)鏈表的結(jié)構(gòu) 帶頭雙向循環(huán)鏈表的結(jié)構(gòu)示意圖 空鏈表結(jié)構(gòu)示意圖 單結(jié)點鏈表結(jié)構(gòu)示意圖 ?多結(jié)點鏈表結(jié)構(gòu)示意圖 鏈表創(chuàng)建結(jié)點 雙向鏈表初始化 銷毀雙向鏈表 打印雙向鏈表 ?雙向鏈表尾插 尾插函數(shù)測試 雙向鏈表頭插

    2024年02月08日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)_帶頭雙向循環(huán)鏈表

    相較于之前的順序表和單向鏈表,雙向鏈表的邏輯結(jié)構(gòu)稍微復雜一些,但是在實現(xiàn)各種接口的時候是很簡單的。因為不用找尾,寫起來會舒服一點。(也可能是因為最近一直在寫這個的原因) 在實現(xiàn)接口的時候,除了沒有找尾,其他的操作和單向鏈表是差不多的,這里就不多

    2024年04月14日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包