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

數(shù)據(jù)結(jié)構(gòu) - 單鏈表

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu) - 單鏈表。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

文章目錄

目錄

文章目錄

一、什么是鏈表?

線性表:

順序表:

二、鏈表的分類和實(shí)現(xiàn)

分類:

實(shí)現(xiàn):

1.創(chuàng)建節(jié)點(diǎn)類

2.創(chuàng)建單鏈表?

1.addTail(尾增)

?

2.刪除節(jié)點(diǎn)值為key的第一個(gè)節(jié)點(diǎn)

?3.插入節(jié)點(diǎn)(在指定位置)

4.獲取鏈表長度?

總結(jié)


前言

大家好,這篇博客給大家講一下什么是鏈表以及單鏈表的實(shí)現(xiàn)過程


一、什么是鏈表?

再講解什么是鏈表時(shí),先給大家講一下大體上的分類線性表和順序表

線性表:

線性表(linear list)是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實(shí)際中廣泛使用的數(shù)據(jù)結(jié) 構(gòu),常見的線性表:鏈表、棧、隊(duì)列... 線性表在邏輯上是線性結(jié)構(gòu),也就說是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的,線性表在物 理上存儲時(shí),通常以數(shù)組和鏈?zhǔn)浇Y(jié)構(gòu)的形式存儲。

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

數(shù)據(jù)結(jié)構(gòu) - 單鏈表,數(shù)據(jù)結(jié)構(gòu)與算法,鏈表,數(shù)據(jù)結(jié)構(gòu)?

可以看到鏈表在內(nèi)存中并不是連續(xù)的,只是在邏輯上是連續(xù)的,鏈表中的節(jié)點(diǎn)見縫插針般的在內(nèi)存中存儲?

順序表:

順序表是用一段物理地址連續(xù)的存儲單元依次存儲數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲。在數(shù)組上完成 數(shù)據(jù)的增刪查改。


二、鏈表的分類和實(shí)現(xiàn)

分類:

鏈表根據(jù)是否包含頭結(jié)點(diǎn)來分可以分為兩類,根據(jù)是否循環(huán)來分也可以分為兩類

其中循環(huán)和非循環(huán)相對來說差別不大,下面我們將圍繞是否包含頭節(jié)點(diǎn)來進(jìn)行談?wù)?/p>

問題1:含頭節(jié)點(diǎn)的鏈表和不含頭節(jié)點(diǎn)的鏈表有什么不同?

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

帶頭結(jié)點(diǎn)的鏈表的第一個(gè)節(jié)點(diǎn)不存數(shù)據(jù),實(shí)現(xiàn)起來相對比較容易

不帶頭結(jié)點(diǎn)的第一個(gè)節(jié)點(diǎn)就是數(shù)據(jù)節(jié)點(diǎn),實(shí)現(xiàn)起來比帶頭結(jié)點(diǎn)的難一些,并且是刷題和面試的重點(diǎn)

下面我將帶大家來實(shí)現(xiàn)最經(jīng)典的單鏈表:不帶頭節(jié)點(diǎn)的非循環(huán)鏈表

實(shí)現(xiàn):

思路分析:

1.創(chuàng)建節(jié)點(diǎn)類Node,用來表示鏈表中的節(jié)點(diǎn)

2.創(chuàng)建單鏈表 SingleList

3.實(shí)現(xiàn)方法 增,刪,查.......

1.創(chuàng)建節(jié)點(diǎn)類

來思考一下節(jié)點(diǎn)類中應(yīng)該存在的信息?

日常工作生活中節(jié)點(diǎn)中記錄的信息是多種多樣的,為了簡單起見我們按最簡單的來,即節(jié)點(diǎn)中只包含

val和指向下一個(gè)節(jié)點(diǎn)的指針next

class Node{
    public int val;
    public Node next;

    public Node(int val){
        this.val = val;
    }
}

2.創(chuàng)建單鏈表?

有了節(jié)點(diǎn)類,我們就可以把一個(gè)個(gè)節(jié)點(diǎn)組合起來,組合成為一個(gè)在邏輯上是連續(xù)的鏈表了

那么在單鏈表中應(yīng)該存在什么呢?

首先應(yīng)該有個(gè)頭結(jié)點(diǎn),要不然無法知道鏈表從哪里開始,也不能將鏈表作為參數(shù)傳遞出去

其次應(yīng)該有構(gòu)造方法,不然寫這么個(gè)鏈表就會(huì)毫無意義

還有就是一些方法,基礎(chǔ)代碼給出,下面我們來一個(gè)一個(gè)實(shí)現(xiàn)方法

public class SingleListDemo {
    private Node head;

    public SingleListDemo(){
    }

}


class Node{
    public int val;
    public Node next;

    public Node(int val){
        this.val = val;
    }
}
1.addTail(尾增)
?
public void addTail(int val) {
    Node newNode = new Node(val);

    if (head == null) {
        head = newNode;
        return;
    }

    Node cur = head;
    while (cur.next != null) {
        cur = cur.next;
    }

    cur.next = newNode;
}

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

在這里我們可以延伸出在頭部插入節(jié)點(diǎn)的情況,即將新的節(jié)點(diǎn)的next指針指向頭結(jié)點(diǎn),將頭結(jié)點(diǎn)的指向更改為新的節(jié)點(diǎn)即可?

2.刪除節(jié)點(diǎn)值為key的第一個(gè)節(jié)點(diǎn)
// 刪除節(jié)點(diǎn)的Data值為key的第一個(gè)節(jié)點(diǎn)
public void DeleteKey(int key) {
    // 判斷鏈表是否為空
    if (head == null) {
        System.out.println("鏈表為空");
        return;
    }
    // 判斷第一個(gè)節(jié)點(diǎn)是否是要?jiǎng)h除的節(jié)點(diǎn)
    if (head.val == key) {
        HeadDelete();
        return;
    }
    Node cur = head;
    while (cur.next != null) {
        if (cur.next.val == key) {
            cur.next = cur.next.next;
            return;
        }
        cur = cur.next;
    }
}

?拓展: 刪除值為key的所有節(jié)點(diǎn),要求時(shí)間復(fù)雜度不超過O(n)

// 法一 循環(huán)遍歷
public void Delete(int Data) {
    if (head == null) {
        return;
    }
    while (head.val == Data) {
        head = head.next;
        if (head == null) {
            return;
        }
    }
    Node cur = head;// 定義臨時(shí)節(jié)點(diǎn)代替頭結(jié)點(diǎn)遍歷鏈表并刪除元素
    while (true) {
        if (cur.next == null) {
            return;
        }

        if (cur.next.val == Data) {
            System.out.println("刪除成功!");
            cur.next = cur.next.next;
            continue;
        }
        cur = cur.next;
    }

}

// 法二 - 雙指針
public void Delete2(int Data) {
    if (head == null) {
        return;
    }
    Node pre = head;
    Node cur = head.next;

    while (cur != null) {
        if (cur.val == Data) {
            pre.next = cur.next;
        } else {
            pre = cur;
        }
        cur = cur.next;
    }
    if (head.val == Data) {
        head = head.next;
    }
}
?3.插入節(jié)點(diǎn)(在指定位置)
// 在指定位置插入節(jié)點(diǎn),第一個(gè)節(jié)點(diǎn)為0號下標(biāo)
public void InsertAny(int index, int val) {
    // 判斷鏈表下標(biāo)是否合法
    if (index < 0 && index > getSize()) {
        System.out.println("下標(biāo)不合法!");
        return;
    }
    if (index == 0) {
        HeadAdd(val);
        return;
    }
    Node node = new Node(val);
    Node cur = head;
    // 遍歷鏈表找到下標(biāo)為index-1的元素
    while (index > 1) {//index-1
        index--;
        cur = cur.next;
    }
    node.next = cur.next;
    cur.next = node;
}
4.獲取鏈表長度?
public int getSize() {
    Node node = head;
    int size = 0;
    while (node != null) {
        node = node.next;
        size++;
    }
    return size;
}?

以上就是一些比較重要的方法了,下期見。?


總結(jié)

大家多多刷題吧,鏈表可是面試中筆試題的重點(diǎn)!文章來源地址http://www.zghlxwxcb.cn/news/detail-703406.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu) - 單鏈表的文章就介紹完了。如果您還想了解更多內(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)】-- 單鏈表 vs 雙向鏈表

    【數(shù)據(jù)結(jié)構(gòu)】-- 單鏈表 vs 雙向鏈表

    ?? 個(gè)人主頁: 白子寰 ?? 分類專欄: python從入門到精通,魔法指針,進(jìn)階C++,C語言,C語言題集,C語言實(shí)現(xiàn)游戲 ?? 希望得到您的訂閱和支持~ ?? 堅(jiān)持創(chuàng)作博文(平均質(zhì)量分82+),分享更多關(guān)于深度學(xué)習(xí)、C/C++,python領(lǐng)域的優(yōu)質(zhì)內(nèi)容?。ㄏM玫侥年P(guān)注~)? 目錄 ?單鏈表和

    2024年04月17日
    瀏覽(95)
  • 數(shù)據(jù)結(jié)構(gòu)入門 — 鏈表詳解_單鏈表

    數(shù)據(jù)結(jié)構(gòu)入門 — 鏈表詳解_單鏈表

    數(shù)據(jù)結(jié)構(gòu)入門 — 單鏈表詳解 * 博客主頁鏈接:https://blog.csdn.net/m0_74014525 關(guān)注博主,后期持續(xù)更新系列文章 文章末尾有源碼 *****感謝觀看,希望對你有所幫助***** 第一篇:數(shù)據(jù)結(jié)構(gòu)入門 — 鏈表詳解_單鏈表 第二篇:數(shù)據(jù)結(jié)構(gòu)入門 — 鏈表詳解_雙向鏈表 第三篇:數(shù)據(jù)結(jié)構(gòu)入門

    2024年02月11日
    瀏覽(84)
  • <數(shù)據(jù)結(jié)構(gòu)> 鏈表 - 單鏈表(c語言實(shí)現(xiàn))

    <數(shù)據(jù)結(jié)構(gòu)> 鏈表 - 單鏈表(c語言實(shí)現(xiàn))

    哨兵位結(jié)點(diǎn)也叫啞節(jié)點(diǎn)。哨兵位結(jié)點(diǎn) 也是頭結(jié)點(diǎn) 。該節(jié)點(diǎn) 不存儲有效數(shù)據(jù),只是為了方便操作 (如尾插時(shí)用帶哨兵位的頭結(jié)點(diǎn)很爽,不需要判空)。 有哨兵位結(jié)點(diǎn)的鏈表,第一個(gè)元素應(yīng)該是鏈表第二個(gè)節(jié)點(diǎn)(head - next,head為哨兵位結(jié)點(diǎn))對應(yīng)的元素。 有哨兵位結(jié)點(diǎn)的鏈表

    2023年04月11日
    瀏覽(716)
  • 【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題)

    【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題)

    正如標(biāo)題所說,本文會(huì)圖文詳細(xì)解析三道單鏈表OJ題,分別為: ?反轉(zhuǎn)鏈表 (簡單) ?鏈表的中間節(jié)點(diǎn) (簡單) ?鏈表的回文結(jié)構(gòu) (較難) 把他們放在一起講的原因是: ?反轉(zhuǎn)鏈表 和 ?鏈表的中間節(jié)點(diǎn) 是 ?鏈表的回文結(jié)構(gòu) 的基礎(chǔ) 為什么這樣說?請往下看: 目錄 1. 反轉(zhuǎn)鏈

    2024年02月13日
    瀏覽(104)
  • 【數(shù)據(jù)結(jié)構(gòu)】 鏈表簡介與單鏈表的實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】 鏈表簡介與單鏈表的實(shí)現(xiàn)

    在【數(shù)據(jù)結(jié)構(gòu)】 ArrayList簡介與實(shí)戰(zhàn)中我們已經(jīng)熟悉了ArrayList的使用,并且進(jìn)行了簡單模擬實(shí)現(xiàn)。通過源碼知道,ArrayList底層使用數(shù)組來存儲元素 由于其底層是一段連續(xù)空間, 當(dāng)在ArrayList任意位置插入或者刪除元素時(shí),就需要將后序元素整體往前或者往后搬移,時(shí)間復(fù)雜度為

    2024年02月12日
    瀏覽(1202)
  • 【數(shù)據(jù)結(jié)構(gòu)】認(rèn)識鏈表和模擬實(shí)現(xiàn)單鏈表

    【數(shù)據(jù)結(jié)構(gòu)】認(rèn)識鏈表和模擬實(shí)現(xiàn)單鏈表

    即使騎的小電驢,也要奮力前進(jìn) 目錄 1.鏈表 1.1 鏈表的概念? 1.2 鏈表的邏輯結(jié)構(gòu)圖和物理結(jié)構(gòu)圖 1.2.1 鏈表的邏輯結(jié)構(gòu)圖? 1.2.2 鏈表的物理結(jié)構(gòu)圖? 1.3鏈表結(jié)構(gòu)的分類 1.3.1 鏈表通過什么進(jìn)行結(jié)構(gòu)的分類? 1.3.2?不同鏈表結(jié)構(gòu)的邏輯圖 2.模擬實(shí)現(xiàn)一個(gè)單向鏈表? 2.1 MyLinkedList類的

    2024年02月14日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表(單鏈表與雙鏈表實(shí)現(xiàn)+原理+源碼)

    【數(shù)據(jù)結(jié)構(gòu)】鏈表(單鏈表與雙鏈表實(shí)現(xiàn)+原理+源碼)

    博主介紹:?全網(wǎng)粉絲喜愛+、前后端領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、本質(zhì)互聯(lián)網(wǎng)精神、堅(jiān)持優(yōu)質(zhì)作品共享、掘金/騰訊云/阿里云等平臺優(yōu)質(zhì)作者、擅長前后端項(xiàng)目開發(fā)和畢業(yè)項(xiàng)目實(shí)戰(zhàn)?有需要可以聯(lián)系作者我哦! ??附上相關(guān)C語言版源碼講解?? ???? 精彩專欄推薦訂閱???? 不然下次找

    2024年01月24日
    瀏覽(638)
  • 【數(shù)據(jù)結(jié)構(gòu)】--單鏈表力扣面試題②反轉(zhuǎn)鏈表

    【數(shù)據(jù)結(jié)構(gòu)】--單鏈表力扣面試題②反轉(zhuǎn)鏈表

    目錄 題目鏈接:反轉(zhuǎn)鏈表? ?法一:直接反轉(zhuǎn)法 法二:頭插法 題目分析: 創(chuàng)建一個(gè)新鏈表,然后值是逆置的行嗎?不行。因?yàn)轭}目要求的是在 原鏈表上逆置,改變原鏈表的指向,并不是值的拷貝后的逆轉(zhuǎn) 。 那其實(shí)總共有三種方法 。 法一,直接原地翻轉(zhuǎn)。法二,頭插法。

    2024年02月06日
    瀏覽(20)
  • [C語言][數(shù)據(jù)結(jié)構(gòu)][鏈表] 單鏈表的從零實(shí)現(xiàn)!

    [C語言][數(shù)據(jù)結(jié)構(gòu)][鏈表] 單鏈表的從零實(shí)現(xiàn)!

    目錄 零.必備知識 1.一級指針 二級指針 2. 節(jié)點(diǎn)的成員列表 ? ? a.數(shù)據(jù) ? ? b.指向下一個(gè)節(jié)點(diǎn)的指針. 3. 動(dòng)態(tài)內(nèi)存空間的開辟 (malloc-calloc-realloc) 一.單鏈表的實(shí)現(xiàn)與銷毀? ? ? ? ? 1.1 節(jié)點(diǎn)的定義 ? ? ? ? 1.2 單鏈表的尾插 ? ? ? ? 1.3 單鏈表的頭插 ? ? ? ? 1.4 單鏈表的尾刪 ?

    2024年04月11日
    瀏覽(94)
  • 鏈表的總體涵蓋以及無哨兵位單鏈表實(shí)現(xiàn)——【數(shù)據(jù)結(jié)構(gòu)】

    鏈表的總體涵蓋以及無哨兵位單鏈表實(shí)現(xiàn)——【數(shù)據(jù)結(jié)構(gòu)】

    ???W…Y:個(gè)人主頁 在學(xué)習(xí)之前看一下美麗的夕陽,也是很不錯(cuò)的。 如果覺得博主的美景不錯(cuò),博客也不錯(cuò)的話,關(guān)注一下博主吧?? 在上一期中,我們說完了順序表,并且提出順序表中的問題 1. 中間/頭部的插入刪除,時(shí)間復(fù)雜度為O(N) 2. 增容需要申請新空間,拷貝數(shù)據(jù),釋

    2024年02月14日
    瀏覽(163)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包