欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java數(shù)據(jù)結(jié)構(gòu)之鏈表的概念及結(jié)構(gòu)

 更新時間:2023年04月03日 16:11:33   作者:徐徐同學  
這篇文章主要介紹了數(shù)據(jù)鏈表的概念及結(jié)構(gòu),鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。想進一步了解的同學,可以參考閱讀本文

1、鏈表的概念

概念:鏈表是一種物理存儲結(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),鏈表操作復雜。但是由于不需按順序存儲,鏈表在插入的時候可以達到O(1)的復雜度,比順序表快得多;但是查找一個節(jié)點或者訪問特定編號的節(jié)點則需要O(n)的時間,而順序表只需O(1)

2、結(jié)點

鏈表由一個個結(jié)點構(gòu)成,每個結(jié)點采用結(jié)構(gòu)體的形式。結(jié)構(gòu)體內(nèi)前面的變量按照需要給予,最后一個變量是這個結(jié)構(gòu)體類型的指針,用來存放下一節(jié)點的首地址‘

鏈表結(jié)點分為兩個域
數(shù)據(jù)域 :存放各種實際的數(shù)據(jù)
指針域 :存放下一結(jié)點的地址

(圖為帶哨兵位頭結(jié)點的鏈表)

3、鏈表的使用場景

線性表在 需要經(jīng)常插入或刪除數(shù)據(jù)元素 的情況下適合采用鏈式存儲結(jié)構(gòu)。

因為對于鏈表來說,插入或刪除數(shù)據(jù)只需要創(chuàng)建一個結(jié)點、輸入數(shù)據(jù)、修改指針把該結(jié)點連接到鏈表中的某一位置即可; 而對于順序表,插入一個數(shù)據(jù)可能需要搬移其他數(shù)據(jù),復雜度高。

4、鏈表分類和常用結(jié)構(gòu)

雖然組合起來一共有8種鏈表可以選擇,但是實際中最常用的主要還是 無頭單向非循環(huán) 鏈表和 帶頭雙向循環(huán) 鏈表。

1、無頭單向非循環(huán)鏈表:俗稱 “單鏈表”。結(jié)構(gòu)簡單,一般不會單獨用來存儲數(shù)據(jù)。實際上更多是作為其他數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu)(如哈希桶、圖的鄰接表、棧的鏈式結(jié)構(gòu)等)

2、帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復雜,一般用來單獨存儲數(shù)據(jù)。實際使用的鏈表,大多都是帶頭雙向循環(huán)鏈表。雖然結(jié)構(gòu)最復雜,但是這種結(jié)構(gòu)會帶來很多優(yōu)勢。

5、與順序表的比較

鏈表: 鏈表是通過結(jié)點把離散的數(shù)據(jù)鏈接成一個表,通過對結(jié)點的插入、刪除操作從而實現(xiàn)對數(shù)據(jù)的存取。

順序表: 順序表是通過開辟一段連續(xù)的內(nèi)存(直接使用 數(shù)組 或者 malloc后realloc擴容)來存儲數(shù)據(jù)。

但是由于 realloc 擴容分為原地擴容和異地擴容,前者代價較低,而后者擴容時不僅需要拷貝數(shù)據(jù),還要釋放舊空間。再者,擴容時一般會擴到原來容量的2倍,擴容次數(shù)多了就容易造成空間的浪費

順序表的每個成員對應鏈表的結(jié)點;成員和結(jié)點的數(shù)據(jù)類型可以是標準的c類型或者是用戶自定義的結(jié)構(gòu)體類型。

比較對象順序表鏈表
存儲空間連續(xù)不連續(xù)
插入或刪除數(shù)據(jù)可能要搬移數(shù)據(jù),復雜度O(n)只需修改指針
push動態(tài)順序表:空間不夠了需要擴容沒有“容量”的概念,push時直接malloc新的結(jié)點
應用需要頻繁訪問需要頻繁插入、刪除數(shù)據(jù)

 到此這篇關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之鏈表的概念及結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)Java 鏈表的概念結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java網(wǎng)絡編程UDP協(xié)議發(fā)送接收數(shù)據(jù)

    Java網(wǎng)絡編程UDP協(xié)議發(fā)送接收數(shù)據(jù)

    這篇文章主要為大家詳細介紹了Java網(wǎng)絡編程UDP協(xié)議發(fā)送接收數(shù)據(jù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • java設計模式之建造者模式學習

    java設計模式之建造者模式學習

    建造者模式(Builder Pattern)主要用于“分步驟構(gòu)建一個復雜的對象”,在這其中“分步驟”是一個穩(wěn)定的算法,下面給出了詳細的示例
    2014-01-01
  • SpringBoot實現(xiàn)動態(tài)控制定時任務支持多參數(shù)功能

    SpringBoot實現(xiàn)動態(tài)控制定時任務支持多參數(shù)功能

    這篇文章主要介紹了SpringBoot實現(xiàn)動態(tài)控制定時任務-支持多參數(shù)功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • 實例詳解Java調(diào)用第三方接口方法

    實例詳解Java調(diào)用第三方接口方法

    很多項目都會封裝規(guī)定好本身項目的接口規(guī)范,所以大多數(shù)需要去調(diào)用對方提供的接口或第三方接口(短信、天氣等),下面這篇文章主要給大家介紹了關(guān)于Java調(diào)用第三方接口方法的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 一文掌握Spring?Boot?日志文件

    一文掌握Spring?Boot?日志文件

    日志是程序的重要組成部分,日志對于我們來說,最主要的用途就是排除和定位問題,這篇文章主要介紹了Spring?Boot?日志文件,需要的朋友可以參考下
    2023-03-03
  • 徹底搞懂Java多線程(四)

    徹底搞懂Java多線程(四)

    這篇文章主要給大家介紹了關(guān)于Java面試題之多線程和高并發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2021-07-07
  • SpringBoot實現(xiàn)單點登錄的實現(xiàn)詳解

    SpringBoot實現(xiàn)單點登錄的實現(xiàn)詳解

    在現(xiàn)代的Web應用程序中,單點登錄(Single?Sign-On)已經(jīng)變得越來越流行,在本文中,我們將使用Spring?Boot構(gòu)建一個基本的單點登錄系統(tǒng),需要的可以參考一下
    2023-05-05
  • Mybatis 中的sql批量修改方法實現(xiàn)

    Mybatis 中的sql批量修改方法實現(xiàn)

    在項目中遇到需要批量更新的功能,原本想的是在Java中用循環(huán)訪問數(shù)據(jù)庫去更新,但是心里總覺得這樣做會不會太頻繁了,太耗費資源了,效率也很低,查了下mybatis的批量操作,原來確實有<foreach>標簽可以做到,下面通過本文給大家介紹下
    2017-01-01
  • Java8函數(shù)式接口的基礎學習教程

    Java8函數(shù)式接口的基礎學習教程

    這篇文章主要給大家介紹了關(guān)于Java8函數(shù)式接口基礎學習的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 解析maven的用法和幾個常用的命令(推薦)

    解析maven的用法和幾個常用的命令(推薦)

    maven最大的作用就是用于對項目中jar包依賴的統(tǒng)一管理。這篇文章主要介紹了maven的用法和幾個常用的命令,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論