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

【算法基礎(chǔ)】數(shù)據(jù)結(jié)構(gòu)| 單鏈表+雙鏈表 代碼實(shí)現(xiàn)+圖解+原理

這篇具有很好參考價(jià)值的文章主要介紹了【算法基礎(chǔ)】數(shù)據(jù)結(jié)構(gòu)| 單鏈表+雙鏈表 代碼實(shí)現(xiàn)+圖解+原理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

分別建立兩個(gè)有3個(gè)元素結(jié)點(diǎn)的單鏈表(無頭結(jié)點(diǎn)),然后對(duì)兩個(gè)鏈表進(jìn)行各自排序(顯示,算法,算法,數(shù)據(jù)結(jié)構(gòu),java,c++,鏈表

  • 博主簡介:努力學(xué)習(xí)的預(yù)備程序媛一枚~
  • 博主主頁: @是瑤瑤子啦
  • 所屬專欄: Java島冒險(xiǎn)記【從小白到大佬之路】

前言

因?yàn)楝幀幾诱趥鋺?zhàn)藍(lán)橋杯和校內(nèi)ACM選拔賽,最近在學(xué)習(xí)算法相關(guān)的知識(shí)。我是借助AcWing網(wǎng)站來學(xué)習(xí)的,這篇文章是我學(xué)習(xí)就我學(xué)習(xí)內(nèi)容的一個(gè)筆記,其中的一些對(duì)原理的解釋是我學(xué)習(xí)過程中可能看到彈幕或者評(píng)論的小伙伴,覺得講的很有道理醍醐灌頂,就引用過來了。
這篇是關(guān)于數(shù)據(jù)結(jié)構(gòu),主要是利用數(shù)組模擬各種數(shù)據(jù)結(jié)構(gòu),主要是提高算法效率。
對(duì)于一些比較晦澀難懂\讓人頭禿的地方,我習(xí)慣采用畫圖的方式來理解,所以你將看到我基于算法模板或題目精心繪制的圖解,希望能幫助一起學(xué)算法的同學(xué)噢!
因?yàn)楝幀幾幽壳斑€是小菜雞,可能會(huì)有理解不到位的地方,或者可以理解得更好的地方,還請(qǐng)大家多多指出哦!?

注意!下面每一種數(shù)據(jù)結(jié)構(gòu)的講解方式,采用代碼模板+文字說明&解釋+圖解

1.單鏈表(鄰接表)

作用:多用于鄰接表,存儲(chǔ)

代碼模板

// head存儲(chǔ)鏈表頭,e[]存儲(chǔ)節(jié)點(diǎn)的值,ne[]存儲(chǔ)節(jié)點(diǎn)的next指針,idx表示當(dāng)前用到了哪個(gè)節(jié)點(diǎn),后一個(gè)
int head, e[N], ne[N], idx;
//NULL相當(dāng)于-1,所以head = -1相當(dāng)于head=NULL
// 初始化
void init()
{
    head = -1;
    idx = 0;
}

// 在鏈表頭插入一個(gè)數(shù)a
void insert(int a)
{   
    e[idx] = a, ne[idx] = head, head = idx ++ ;
}
//將x插入到下標(biāo)是k的點(diǎn)之后
void insert(int k, int x)
{
	e[idx] = x;
	ne[idx] = ne[k]
	ne[k] = idx;
	idx ++;
}

// 將頭結(jié)點(diǎn)刪除,需要保證頭結(jié)點(diǎn)存在
void remove()
{
    head = ne[head];
}
  • 存儲(chǔ)節(jié)點(diǎn)數(shù)組的e[N]和存儲(chǔ)該節(jié)點(diǎn)的next指針數(shù)組ne[N]通過下標(biāo)關(guān)聯(lián)
  • idx只是記錄當(dāng)前的操作的位置,一般實(shí)現(xiàn)的鏈表idx是亂序的(前后的節(jié)點(diǎn)的數(shù)組下標(biāo)不需要連續(xù),需要通過當(dāng)前的ne[i]找到下一個(gè)idx。這也是兩者的聯(lián)系。
  • head一開始=-1,這個(gè)-1相當(dāng)于物理地址的NULL,表示鏈表為空,即head指向一個(gè)頭節(jié)點(diǎn),而使用頭插法,又巧妙的使這個(gè)空節(jié)點(diǎn)成為尾節(jié)點(diǎn)。聯(lián)想結(jié)構(gòu)體實(shí)現(xiàn)的單鏈表,最后一個(gè)節(jié)點(diǎn)的指針域是NULL所以,數(shù)組實(shí)現(xiàn)單鏈表的最后一個(gè)節(jié)點(diǎn),假設(shè)是i,那么ne[i]=-1
  • 這里模擬的是沒有頭節(jié)點(diǎn),head指針直接指向首元節(jié)點(diǎn)的單鏈表
  • 雖然數(shù)組模擬的鏈表沒有用結(jié)構(gòu)體/類模擬的好理解,但是本質(zhì)都是一樣的,我們可以類比一下,對(duì)于一個(gè)節(jié)點(diǎn)Node。
  • 所以其實(shí)畫圖的時(shí)候,也沒必要分的那么清楚,其實(shí)在我學(xué)習(xí)數(shù)組模擬鏈表之前,我一直認(rèn)為數(shù)組&鏈表屬于物理結(jié)構(gòu),現(xiàn)在才發(fā)現(xiàn),其實(shí)鏈表是一種邏輯結(jié)構(gòu)!
比較點(diǎn) 結(jié)構(gòu)體/類模擬Node 數(shù)組模擬Node
節(jié)點(diǎn)本身指針 物理地址,node 通過在數(shù)組下標(biāo),表示自身指針
數(shù)值域 就在結(jié)構(gòu)體中定義node.val val[node],通過數(shù)組來存儲(chǔ)數(shù)值域
指針域 結(jié)構(gòu)體中定義,node. next next[node],通過數(shù)組來存儲(chǔ)

圖解
分別建立兩個(gè)有3個(gè)元素結(jié)點(diǎn)的單鏈表(無頭結(jié)點(diǎn)),然后對(duì)兩個(gè)鏈表進(jìn)行各自排序(顯示,算法,算法,數(shù)據(jù)結(jié)構(gòu),java,c++,鏈表
插入操作(頭插法)
分別建立兩個(gè)有3個(gè)元素結(jié)點(diǎn)的單鏈表(無頭結(jié)點(diǎn)),然后對(duì)兩個(gè)鏈表進(jìn)行各自排序(顯示,算法,算法,數(shù)據(jù)結(jié)構(gòu),java,c++,鏈表

2.雙鏈表

學(xué)習(xí)了數(shù)組模擬單鏈表,其實(shí)雙鏈表就很好理解了。其實(shí)就是多了一個(gè)指針域。

  • 單鏈表:ne[i]存儲(chǔ)指針為i的節(jié)點(diǎn)的next指針
  • 雙鏈表
    • l[i],指針為i的節(jié)點(diǎn)的前驅(qū)(指向前一個(gè)節(jié)點(diǎn))
    • r[i],指針為i的節(jié)點(diǎn)的后驅(qū)(指向后一個(gè)節(jié)點(diǎn))
//e[index],表示節(jié)點(diǎn)的值,l[index]表示節(jié)點(diǎn)的左指針,r[index]表示節(jié)點(diǎn)的右指針,idx表示當(dāng)前用到哪個(gè)節(jié)點(diǎn)的”地址“

int e[N],l[N],r[N],idx;

//初始化
void init(){
  //0是左端點(diǎn),1是右端點(diǎn)
  r[0] = 1,l[1] = 0;
  idx = 2;
}
//在節(jié)點(diǎn)a的右邊插入一個(gè)數(shù)x
void insert(int a,int x){
  //1、讓待插入節(jié)點(diǎn)占位
  e[idx] = x;
  //2、處理待插入點(diǎn)左右兩側(cè)
  l[idx] = a,r[idx] = r[a];//注意,這里必須是r[a],因?yàn)閍的下一個(gè)節(jié)點(diǎn)不一定和a順序存儲(chǔ)
  //3、處理前一個(gè)節(jié)點(diǎn)和后一個(gè)節(jié)點(diǎn)
  l[r[a]] = idx,r[a] = idx++;
}

分別建立兩個(gè)有3個(gè)元素結(jié)點(diǎn)的單鏈表(無頭結(jié)點(diǎn)),然后對(duì)兩個(gè)鏈表進(jìn)行各自排序(顯示,算法,算法,數(shù)據(jù)結(jié)構(gòu),java,c++,鏈表

分別建立兩個(gè)有3個(gè)元素結(jié)點(diǎn)的單鏈表(無頭結(jié)點(diǎn)),然后對(duì)兩個(gè)鏈表進(jìn)行各自排序(顯示,算法,算法,數(shù)據(jù)結(jié)構(gòu),java,c++,鏈表
Java島冒險(xiǎn)記【從小白到大佬之路】

LeetCode每日一題–進(jìn)擊大廠文章來源地址http://www.zghlxwxcb.cn/news/detail-790954.html

到了這里,關(guān)于【算法基礎(chǔ)】數(shù)據(jù)結(jié)構(gòu)| 單鏈表+雙鏈表 代碼實(shí)現(xiàn)+圖解+原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • 數(shù)據(jù)結(jié)構(gòu)--線性表(順序表、單鏈表、雙鏈表、循環(huán)鏈表、靜態(tài)鏈表)

    前言 ?學(xué)習(xí)所記錄,如果能對(duì)你有幫助,那就泰褲辣。 目錄 1.線性表概念 定義 基本操作 2.順序表 定義 順序表的實(shí)現(xiàn)--靜態(tài)分配 動(dòng)態(tài)分配 順序表的特點(diǎn) 順序表的插入和刪除 順序表的查找 按位查找 ?按值查找 3.單鏈表 定義 單鏈表的初始化 不帶頭節(jié)點(diǎn)的單鏈表 帶頭節(jié)點(diǎn)的單

    2024年02月11日
    瀏覽(103)
  • 【算法基礎(chǔ)】(二)數(shù)據(jù)結(jié)構(gòu) --- 單鏈表

    【算法基礎(chǔ)】(二)數(shù)據(jù)結(jié)構(gòu) --- 單鏈表

    ?個(gè)人主頁:bit me ?當(dāng)前專欄:算法基礎(chǔ) ??專欄簡介:該專欄主要更新一些基礎(chǔ)算法題,有參加藍(lán)橋杯等算法題競(jìng)賽或者正在刷題的鐵汁們可以關(guān)注一下,互相監(jiān)督打卡學(xué)習(xí) ?? ?? ?? 實(shí)現(xiàn)一個(gè)單鏈表,鏈表初始為空,支持三種操作: 向鏈表頭插入一個(gè)數(shù); 刪除第 k 個(gè)插

    2023年04月17日
    瀏覽(54)
  • 雙鏈表——“數(shù)據(jù)結(jié)構(gòu)與算法”

    雙鏈表——“數(shù)據(jù)結(jié)構(gòu)與算法”

    各位CSDN的uu們你們好呀,今天,小雅蘭又回來了,到了好久沒有更新的數(shù)據(jù)結(jié)構(gòu)與算法專欄,最近確實(shí)發(fā)現(xiàn)自己有很多不足,需要學(xué)習(xí)的內(nèi)容也有很多,所以之后更新文章可能不會(huì)像之前那種一天一篇或者一天兩篇啦,話不多說,下面,讓我們進(jìn)入雙鏈表的世界吧 ?之前小雅

    2024年02月04日
    瀏覽(23)
  • 第一百零六天學(xué)習(xí)記錄:數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ):單鏈表(王卓教學(xué)視頻)

    第一百零六天學(xué)習(xí)記錄:數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ):單鏈表(王卓教學(xué)視頻)

    結(jié)點(diǎn)在存儲(chǔ)器中的位置是任意的,即邏輯上相鄰的數(shù)據(jù)元素在物理上不一定相鄰 線性表的鏈?zhǔn)奖硎居址Q為非順序映像或鏈?zhǔn)接诚瘛?用一組物理位置任意的存儲(chǔ)單元來存放線性表的數(shù)據(jù)元素。 這組存儲(chǔ)單元既可以是連續(xù)的,也可以是不連續(xù)的,甚至是零散分布在內(nèi)存中的任意

    2024年02月16日
    瀏覽(27)
  • 【數(shù)據(jù)結(jié)構(gòu)】數(shù)組、雙鏈表代碼實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】數(shù)組、雙鏈表代碼實(shí)現(xiàn)

    ??????歡迎來到我的博客,你將找到有關(guān)如何使用技術(shù)解決問題的文章,也會(huì)找到某個(gè)技術(shù)的學(xué)習(xí)路線。無論你是何種職業(yè),我都希望我的博客對(duì)你有所幫助。最后不要忘記訂閱我的博客以獲取最新文章,也歡迎在文章下方留下你的評(píng)論和反饋。我期待著與你分享知識(shí)、互

    2024年02月19日
    瀏覽(22)
  • java數(shù)據(jù)結(jié)構(gòu)與算法:雙鏈表 LinkedList
  • 【一起學(xué)數(shù)據(jù)結(jié)構(gòu)與算法】Java實(shí)現(xiàn)雙鏈表

    【一起學(xué)數(shù)據(jù)結(jié)構(gòu)與算法】Java實(shí)現(xiàn)雙鏈表

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個(gè)結(jié)點(diǎn)開始,都可以很方便地訪問它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。一般我們都構(gòu)造雙向循環(huán)鏈表。 打印雙鏈表非常簡單,只需要單獨(dú)創(chuàng)一個(gè)結(jié)點(diǎn)

    2024年02月22日
    瀏覽(33)
  • 單鏈表——“數(shù)據(jù)結(jié)構(gòu)與算法”

    單鏈表——“數(shù)據(jù)結(jié)構(gòu)與算法”

    各位CSDN的uu們你們好呀,今天,小雅蘭的內(nèi)容終于是我們心心念念的單鏈表啦,這一塊呢,是一個(gè)很重要的部分,也是一個(gè)對(duì)目前的我來說,比較困難的部分,下面,就讓我們進(jìn)入單鏈表的世界吧 之前小雅蘭寫過順序表的內(nèi)容: 順序表(更新版)——“數(shù)據(jù)結(jié)構(gòu)與算法”_認(rèn)

    2023年04月26日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】單鏈表完整代碼實(shí)現(xiàn)

    前置文章:順序表的代碼實(shí)現(xiàn) 每個(gè)結(jié)點(diǎn)除了存放數(shù)據(jù)元素外,還要存儲(chǔ)指向下一個(gè)結(jié)點(diǎn)的指針。 不要求大片連續(xù)空間 改變?nèi)萘糠奖?不可隨機(jī)存取 要耗費(fèi)一定空間存放指針 代碼結(jié)構(gòu): 定義單鏈表結(jié)構(gòu) 初始化單鏈表 單鏈表的取值方法 單鏈表的查找方法 單鏈表的插入方法 單

    2024年02月07日
    瀏覽(23)
  • java數(shù)據(jù)結(jié)構(gòu)與算法:單鏈表 SinglyLinkedList

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包