您好,登錄后才能下訂單哦!
今天小編給大家分享一下Java數(shù)據(jù)結(jié)構(gòu)之鏈表的概念及結(jié)構(gòu)是什么的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
概念:鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的
1、鏈表由一系列結(jié)點(鏈表中每一個元素稱為結(jié)點)組成。
2、結(jié)點可以在運行時動態(tài)(malloc)生成。
3、每個結(jié)點包括兩個部分:一個是存儲數(shù)據(jù)元素的數(shù)據(jù)域,另一個是存儲下一個結(jié)點地址的指針域(詳見1.2 節(jié)點部分)。
4、相比于線性表順序結(jié)構(gòu),鏈表操作復(fù)雜。但是由于不需按順序存儲,鏈表在插入的時候可以達(dá)到O(1)的復(fù)雜度,比順序表快得多;但是查找一個節(jié)點或者訪問特定編號的節(jié)點則需要O(n)的時間,而順序表只需O(1)
鏈表由一個個結(jié)點構(gòu)成,每個結(jié)點采用結(jié)構(gòu)體的形式。結(jié)構(gòu)體內(nèi)前面的變量按照需要給予,最后一個變量是這個結(jié)構(gòu)體類型的指針,用來存放下一節(jié)點的首地址‘
鏈表結(jié)點分為兩個域
數(shù)據(jù)域 :存放各種實際的數(shù)據(jù)
指針域 :存放下一結(jié)點的地址
(圖為帶哨兵位頭結(jié)點的鏈表)
線性表在 需要經(jīng)常插入或刪除數(shù)據(jù)元素 的情況下適合采用鏈?zhǔn)酱鎯Y(jié)構(gòu)。
因為對于鏈表來說,插入或刪除數(shù)據(jù)只需要創(chuàng)建一個結(jié)點、輸入數(shù)據(jù)、修改指針把該結(jié)點連接到鏈表中的某一位置即可; 而對于順序表,插入一個數(shù)據(jù)可能需要搬移其他數(shù)據(jù),復(fù)雜度高。
雖然組合起來一共有8種鏈表可以選擇,但是實際中最常用的主要還是 無頭單向非循環(huán) 鏈表和 帶頭雙向循環(huán) 鏈表。
1、無頭單向非循環(huán)鏈表:俗稱 “單鏈表”。結(jié)構(gòu)簡單,一般不會單獨用來存儲數(shù)據(jù)。實際上更多是作為其他數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu)(如哈希桶、圖的鄰接表、棧的鏈?zhǔn)浇Y(jié)構(gòu)等)
2、帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復(fù)雜,一般用來單獨存儲數(shù)據(jù)。實際使用的鏈表,大多都是帶頭雙向循環(huán)鏈表。雖然結(jié)構(gòu)最復(fù)雜,但是這種結(jié)構(gòu)會帶來很多優(yōu)勢。
鏈表: 鏈表是通過結(jié)點把離散的數(shù)據(jù)鏈接成一個表,通過對結(jié)點的插入、刪除操作從而實現(xiàn)對數(shù)據(jù)的存取。
順序表: 順序表是通過開辟一段連續(xù)的內(nèi)存(直接使用 數(shù)組 或者 malloc后realloc擴(kuò)容)來存儲數(shù)據(jù)。
但是由于 realloc 擴(kuò)容分為原地擴(kuò)容和異地擴(kuò)容,前者代價較低,而后者擴(kuò)容時不僅需要拷貝數(shù)據(jù),還要釋放舊空間。再者,擴(kuò)容時一般會擴(kuò)到原來容量的2倍,擴(kuò)容次數(shù)多了就容易造成空間的浪費
順序表的每個成員對應(yīng)鏈表的結(jié)點;成員和結(jié)點的數(shù)據(jù)類型可以是標(biāo)準(zhǔn)的c類型或者是用戶自定義的結(jié)構(gòu)體類型。
比較對象 | 順序表 | 鏈表 |
---|---|---|
存儲空間 | 連續(xù) | 不連續(xù) |
插入或刪除數(shù)據(jù) | 可能要搬移數(shù)據(jù),復(fù)雜度O(n) | 只需修改指針 |
push | 動態(tài)順序表:空間不夠了需要擴(kuò)容 | 沒有“容量”的概念,push時直接malloc新的結(jié)點 |
應(yīng)用 | 需要頻繁訪問 | 需要頻繁插入、刪除數(shù)據(jù) |
以上就是“Java數(shù)據(jù)結(jié)構(gòu)之鏈表的概念及結(jié)構(gòu)是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。