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

帶頭節(jié)點的單鏈表的思路及代碼實現(xiàn)

這篇具有很好參考價值的文章主要介紹了帶頭節(jié)點的單鏈表的思路及代碼實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

帶頭節(jié)點的單鏈表的思路及代碼實現(xiàn)(JAVA)

一、什么是的單鏈表

①標(biāo)準(zhǔn)定義

單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。鏈表中的數(shù)據(jù)是以結(jié)點來表示的,每個結(jié)點的構(gòu)成:元素(數(shù)據(jù)元素的映象) +指針(指示后繼元素存儲位置,元素就是存儲數(shù)據(jù)的存儲單元,指針就是連接每個結(jié)點的地址數(shù)據(jù)。)

以上是標(biāo)準(zhǔn)定義不太好讓人對單鏈表有直觀的感受,下面我們通過對單鏈表的構(gòu)成以及存儲數(shù)據(jù)的方式說明,來更加深刻的理解一下什么是單鏈表。

②個人理解

鏈表存儲數(shù)據(jù)的方式:

  1. 鏈表是以節(jié)點的方式來存儲數(shù)據(jù)的

    • 那么節(jié)點又是什么呢?節(jié)點就是鏈表要存儲的每個數(shù)據(jù)塊,只不過這個數(shù)據(jù)塊中不僅包含我們要存儲的data,同時又多了一個next用來指向下一個數(shù)據(jù)節(jié)點所在的位置。
  2. 每個數(shù)據(jù)節(jié)點包含data域,next域:指向下一個數(shù)據(jù)節(jié)點

  3. 鏈表的各個節(jié)點在實際存儲結(jié)構(gòu)上不一定是連續(xù)的

    • 鏈表就是在添加數(shù)據(jù)時不去考慮數(shù)據(jù)所要添加的實際物理位置,只需要通過next域來確定數(shù)據(jù)節(jié)點的邏輯線性結(jié)構(gòu)即可;
  4. 列表分帶頭節(jié)點的鏈表和不帶頭節(jié)點的鏈表,根據(jù)實際需求來確定使用哪種鏈表(本文以單鏈表進(jìn)行舉例說明)

    • 那么頭節(jié)點的作用又是什么呢?其實頭節(jié)點中有效域只有next域,用來指向鏈表中第一個節(jié)點所在的位置。

鏈表的實際結(jié)構(gòu)圖示:

帶頭節(jié)點的單鏈表的思路及代碼實現(xiàn)鏈表的邏輯結(jié)構(gòu)圖示:

帶頭節(jié)點的單鏈表的思路及代碼實現(xiàn)

二、代碼實現(xiàn)

①定義數(shù)據(jù)節(jié)點類

// 定義數(shù)據(jù)節(jié)點類
class DataNode {

    private String data;    // data域,要存儲的數(shù)據(jù)
    private DataNode next;  // next域,用于指向下一個數(shù)據(jù)節(jié)點地址

    // 數(shù)據(jù)節(jié)點構(gòu)造器
    public DataNode(String data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "DataNode{" +
                "data='" + data + '\'' +
                '}';
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public DataNode getNext() {
        return next;
    }

    public void setNext(DataNode next) {
        this.next = next;
    }
    
}

②定義單鏈表類

/**
 * ClassName: SingleLinkedList
 * Package: com.zhao.test
 * Description: 定義單向鏈表類
 *
 * @Author XH-zhao
 * @Create 2023/3/26 11:09
 * @Version 1.0
 */
public class SingleLinkedList {

    // 先初始化一個頭節(jié)點,頭節(jié)點不用于存儲數(shù)據(jù),只用于指向單鏈表的首元素
    private DataNode head = new DataNode("");

    /**
     * 向單鏈表中增加數(shù)據(jù)節(jié)點
     *
     * @param dataNode 待增加的數(shù)據(jù)節(jié)點
     */
    public void addDataNode(DataNode dataNode) {

        // 由于head節(jié)點不能更改,只用于指向單鏈表的首元素,所以我們需要一個輔助變量接收head的引用
        DataNode temp = head;

        // 找到鏈表的最后,即結(jié)束
        while (temp.getNext() != null) {
            // 如果沒有找到,就把下一個數(shù)據(jù)節(jié)點的引用賦值給temp,使temp指向下一個數(shù)據(jù)節(jié)點
            temp = temp.getNext();
        }

        // 將找到的最后一個一個數(shù)據(jù)節(jié)點的next域指向新加入的節(jié)點地址
        temp.setNext(dataNode);

    }

    /**
     * 顯示鏈表的信息
     */
    public void showList() {
        // 判斷鏈表是否為空
        if (head.getNext() == null){
            System.out.println("鏈表為空");
            return;
        }

        // 由于head節(jié)點不能更改,只用于指向單鏈表的首元素,所以我們需要一個輔助變量接收head的引用
        DataNode temp = head.getNext();

        // 遍歷鏈表并打印鏈表中的數(shù)據(jù)節(jié)點
        while (temp != null) {
            System.out.println(temp);
            temp = temp.getNext();
        }

    }

}

三、實驗測試單鏈表的代碼準(zhǔn)確性

①單鏈表實現(xiàn)以及測試的整體代碼

/**
 * ClassName: SingleLinkedList
 * Package: com.zhao.test
 * Description: 定義單向鏈表類
 *
 * @Author XH-zhao
 * @Create 2023/3/26 11:09
 * @Version 1.0
 */
public class SingleLinkedList {

    // 先初始化一個頭節(jié)點,頭節(jié)點不用于存儲數(shù)據(jù),只用于指向單鏈表的首元素
    private DataNode head = new DataNode("");

    /**
     * 向單鏈表中增加數(shù)據(jù)節(jié)點
     *
     * @param dataNode 待增加的數(shù)據(jù)節(jié)點
     */
    public void addDataNode(DataNode dataNode) {

        // 由于head節(jié)點不能更改,只用于指向單鏈表的首元素,所以我們需要一個輔助變量接收head的引用
        DataNode temp = head;

        // 找到鏈表的最后,即結(jié)束
        while (temp.getNext() != null) {
            // 如果沒有找到,就把下一個數(shù)據(jù)節(jié)點的引用賦值給temp,使temp指向下一個數(shù)據(jù)節(jié)點
            temp = temp.getNext();
        }

        // 將找到的最后一個一個數(shù)據(jù)節(jié)點的next域指向新加入的節(jié)點地址
        temp.setNext(dataNode);

    }

    /**
     * 顯示鏈表的信息
     */
    public void showList() {
        // 判斷鏈表是否為空
        if (head.getNext() == null){
            System.out.println("鏈表為空");
            return;
        }

        // 由于head節(jié)點不能更改,只用于指向單鏈表的首元素,所以我們需要一個輔助變量接收head的引用
        DataNode temp = head.getNext();

        // 遍歷鏈表并打印鏈表中的數(shù)據(jù)節(jié)點
        while (temp != null) {
            System.out.println(temp);
            temp = temp.getNext();
        }

    }

}

// 定義數(shù)據(jù)節(jié)點類
class DataNode {

    private String data;    // data域,要存儲的數(shù)據(jù)
    private DataNode next;  // next域,用于指向下一個數(shù)據(jù)節(jié)點地址

    // 數(shù)據(jù)節(jié)點構(gòu)造器
    public DataNode(String data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "DataNode{" +
                "data='" + data + '\'' +
                '}';
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public DataNode getNext() {
        return next;
    }

    public void setNext(DataNode next) {
        this.next = next;
    }

}

// 單鏈表測試類
class SingleLinkedListTest{

    public static void main(String[] args) {

        // 創(chuàng)建四個數(shù)據(jù)節(jié)點
        DataNode dataNode1 = new DataNode("data1");
        DataNode dataNode2 = new DataNode("data2");
        DataNode dataNode3 = new DataNode("data3");
        DataNode dataNode4 = new DataNode("data4");

        // 創(chuàng)建單鏈表對象
        SingleLinkedList linkedList1 = new SingleLinkedList();

        // 將數(shù)據(jù)節(jié)點依次加入鏈表中
        linkedList1.addDataNode(dataNode1);
        linkedList1.addDataNode(dataNode2);
        linkedList1.addDataNode(dataNode3);
        linkedList1.addDataNode(dataNode4);

        // 展示鏈表內(nèi)所有數(shù)據(jù)節(jié)點
        linkedList1.showList();
    }

}

②實驗結(jié)果

DataNode{data='data1'}
DataNode{data='data2'}
DataNode{data='data3'}
DataNode{data='data4'}

進(jìn)程已結(jié)束,退出代碼0

從上述結(jié)果中,我們就實現(xiàn)了帶頭節(jié)點的單鏈表的數(shù)據(jù)存儲設(shè)計。

四、實驗總結(jié)

在上述的實驗測試中我們已經(jīng)完成了單鏈表存儲數(shù)據(jù)的基本思想。可以讓數(shù)據(jù)節(jié)點根據(jù)添加順序依次添加到單鏈表當(dāng)中。到這里我們僅僅實現(xiàn)了如何使用單鏈表的方式存儲數(shù)據(jù)元素。那么如果我們想讓數(shù)據(jù)節(jié)點在存儲時,實現(xiàn)一些我們想要的特殊功能(例如在添加數(shù)據(jù)節(jié)點的同時,按照數(shù)據(jù)節(jié)點中的某一個屬性進(jìn)行排序加入),我們又該如何實現(xiàn)呢?

這里我們更改一下我們的測試程序,我們將數(shù)據(jù)節(jié)點以4-1-2-3順序加入鏈表中,希望呈現(xiàn)出來還是以1-2-3-4排序好的效果。

public static void main(String[] args) {

    // 創(chuàng)建四個數(shù)據(jù)節(jié)點
    DataNode dataNode1 = new DataNode("data1");
    DataNode dataNode2 = new DataNode("data2");
    DataNode dataNode3 = new DataNode("data3");
    DataNode dataNode4 = new DataNode("data4");

    // 創(chuàng)建單鏈表對象
    SingleLinkedList linkedList1 = new SingleLinkedList();

    // 將數(shù)據(jù)節(jié)點以4-1-2-3順序加入鏈表中
    linkedList1.addDataNode(dataNode4);
    linkedList1.addDataNode(dataNode1);
    linkedList1.addDataNode(dataNode2);
    linkedList1.addDataNode(dataNode3);

    // 展示鏈表內(nèi)所有數(shù)據(jù)節(jié)點
    linkedList1.showList();
}
DataNode{data='data4'}
DataNode{data='data1'}
DataNode{data='data2'}
DataNode{data='data3'}

進(jìn)程已結(jié)束,退出代碼0

很顯然,我們的代碼只能按照節(jié)點加入順序來加入節(jié)點。后續(xù)我們將在《JAVA實現(xiàn)節(jié)點加入到單鏈表時按需求排序》一文中實現(xiàn)上述我們想要的效果!

番外:重復(fù)增添數(shù)據(jù)節(jié)點到新鏈表時BUG思考

如果上述實驗中我們按照如下方式去測試代碼

public static void main(String[] args) {

    // 創(chuàng)建四個數(shù)據(jù)節(jié)點
    DataNode dataNode1 = new DataNode("data1");
    DataNode dataNode2 = new DataNode("data2");
    DataNode dataNode3 = new DataNode("data3");
    DataNode dataNode4 = new DataNode("data4");

    // 創(chuàng)建單鏈表對象
    SingleLinkedList linkedList1 = new SingleLinkedList();

    // 將數(shù)據(jù)節(jié)點依次加入鏈表中
    linkedList1.addDataNode(dataNode1);
    linkedList1.addDataNode(dataNode2);
    linkedList1.addDataNode(dataNode3);
    linkedList1.addDataNode(dataNode4);

    // 展示鏈表內(nèi)所有數(shù)據(jù)節(jié)點
    linkedList1.showList();

    // 創(chuàng)建鏈表2
    SingleLinkedList linkedList2 = new SingleLinkedList();

    // 將數(shù)據(jù)節(jié)點打亂順序加入到鏈表2中
    linkedList2.addDataNode(dataNode1);
    linkedList2.addDataNode(dataNode4);
    linkedList2.addDataNode(dataNode3);
    linkedList2.addDataNode(dataNode2);

    // 展示鏈表2內(nèi)所有數(shù)據(jù)節(jié)點
    linkedList2.showList();
}

運行結(jié)果:

DataNode{data='data1'}
DataNode{data='data2'}
DataNode{data='data3'}
DataNode{data='data4'}
// 程序堵塞在這里,無法向下進(jìn)行!

請思考造成上述問題的原因所在?文章來源地址http://www.zghlxwxcb.cn/news/detail-403275.html

到了這里,關(guān)于帶頭節(jié)點的單鏈表的思路及代碼實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】——單鏈表的基本操作(帶頭結(jié)點)

    【數(shù)據(jù)結(jié)構(gòu)】——單鏈表的基本操作(帶頭結(jié)點)

    ? ? ? ? 單鏈表解決了順序表需要大量連續(xù)存儲單元的缺點,但單鏈表附加指針域, 存儲密度較順序表低(考點?。。?。由于單鏈表的元素離散地分布在存儲空間中,所以單鏈表是 非隨機(jī)存取 的存儲結(jié)構(gòu),即不能直接找到表中某個特定的結(jié)點。當(dāng)查找某個特定結(jié)點時,需要

    2024年02月05日
    瀏覽(100)
  • 帶頭結(jié)點單鏈表【詳細(xì)解析+完整代碼】

    帶頭結(jié)點單鏈表【詳細(xì)解析+完整代碼】

    它是通過一組任意的儲存單元來存儲線性表中的數(shù)據(jù)元素。為建立線性關(guān)系,每個結(jié)點需要一個指針域以及指向下一結(jié)點的指針域。帶頭結(jié)點鏈表頭節(jié)點不存儲數(shù)據(jù)。 結(jié)點結(jié)構(gòu): 帶頭結(jié)點鏈表結(jié)構(gòu): 保證了每個結(jié)點都有前驅(qū)結(jié)點,因此在鏈表上第一個結(jié)點的操作與其他結(jié)點操

    2024年04月15日
    瀏覽(42)
  • 單鏈表的基本操作代碼實現(xiàn)(C語言版)

    目錄 前言: 單鏈表的基本操作 準(zhǔn)備工作(頭文件、各種宏定義以及結(jié)構(gòu)體定義) 一.較簡單操作 1.單鏈表的初始化 2.判斷單鏈表是否為空表 3.單鏈表的銷毀 4.單鏈表的清空 5.求單鏈表的表長 二.較重要操作 1.單鏈表的取值 2.單鏈表元素的查找 3.單鏈表的結(jié)點插入 4.單鏈表的結(jié)

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

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

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

    2024年02月13日
    瀏覽(104)
  • 數(shù)據(jù)結(jié)構(gòu):圖文詳解單鏈表的各種操作(頭插法,尾插法,任意位置插入,刪除節(jié)點,查詢節(jié)點,求鏈表的長度,清空鏈表)

    數(shù)據(jù)結(jié)構(gòu):圖文詳解單鏈表的各種操作(頭插法,尾插法,任意位置插入,刪除節(jié)點,查詢節(jié)點,求鏈表的長度,清空鏈表)

    目錄 ?一.什么是鏈表 二.鏈表的實現(xiàn) 節(jié)點的插入 頭插法 尾插法 指定位置插入 節(jié)點的刪除 刪除第一次出現(xiàn)的節(jié)點 刪除所有節(jié)點 節(jié)點的查找 鏈表的清空 鏈表的長度 前言: 在上一篇文章中,我們認(rèn)識了線性數(shù)據(jù)結(jié)構(gòu)中的順序表,而本篇文章則是介紹線性數(shù)據(jù)結(jié)

    2024年02月05日
    瀏覽(104)
  • 【數(shù)據(jù)結(jié)構(gòu)】C語言實現(xiàn)單鏈表(帶頭結(jié)點)

    Single linked list with leading nodes 關(guān)于不帶頭結(jié)點的單鏈表:不帶頭結(jié)點的單鏈表 結(jié)點定義: 接口定義: 初始化需要申請頭結(jié)點,讓頭指針指向空的頭結(jié)點。 將申請結(jié)點的代碼進(jìn)行封裝: 需要越過頭結(jié)點 找到尾結(jié)點,然后插入到尾結(jié)點的后面。 對比不帶頭結(jié)點的單鏈表的尾插

    2024年02月02日
    瀏覽(1332)
  • 雙向帶頭循環(huán)鏈表的實現(xiàn)

    雙向帶頭循環(huán)鏈表的實現(xiàn)

    當(dāng)我們要學(xué)習(xí)和了解一個事物時,我們要做的第一步便是對這個事物有一個體的的了解。現(xiàn)在我們要學(xué)習(xí)雙向帶頭循環(huán)鏈表的第一步也是這個,我們現(xiàn)在先來了解一下這種鏈表的結(jié)構(gòu)---- 就像該圖所呈現(xiàn)的那樣,雙向循環(huán)鏈表就是長這樣。但是你可 千萬不要將head當(dāng)成head。 ?

    2024年02月05日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)三:線性表之單鏈表(帶頭結(jié)點單向)的設(shè)計與實現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)三:線性表之單鏈表(帶頭結(jié)點單向)的設(shè)計與實現(xiàn)

    ? ? ? ? 線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)正是所謂的單鏈表,何謂單鏈表?通過地址將每一個數(shù)據(jù)元素串起來,進(jìn)行使用,這可以彌補順序表在進(jìn)行任意位置的插入和刪除需要進(jìn)行大量的數(shù)據(jù)元素移動的缺點,只需要修改指針的指向即可;單鏈表的種類又可劃分為很多種,本篇博客詳

    2024年02月19日
    瀏覽(107)
  • 算法: 移除單鏈表的倒數(shù)第N個節(jié)點 19. Remove Nth Node From End of List

    算法: 移除單鏈表的倒數(shù)第N個節(jié)點 19. Remove Nth Node From End of List

    Given the head of a linked list, remove the nth node from the end of the list and return its head. Example 1: Example 2: Example 3: Constraints: The number of nodes in the list is sz. 1 = sz = 30 0 = Node.val = 100 1 = n = sz Follow up: Could you do this in one pass? 該方法采用了兩次遍歷鏈表的方法。首先,它計算鏈表的總長度,然后通

    2024年02月13日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)】雙向帶頭循環(huán)鏈表的實現(xiàn)

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

    前言:在前面我們學(xué)習(xí)了順序表、單向鏈表,今天我們在單鏈表的基礎(chǔ)上進(jìn)一步來模擬實現(xiàn)一個帶頭雙向鏈表。 ?? 博主CSDN主頁:衛(wèi)衛(wèi)衛(wèi)的個人主頁 ?? ?? 專欄分類:數(shù)據(jù)結(jié)構(gòu) ?? ??代碼倉庫:衛(wèi)衛(wèi)周大胖的學(xué)習(xí)日記?? ??關(guān)注博主和博主一起學(xué)習(xí)!一起努力! 帶頭雙向循環(huán)鏈

    2024年01月15日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包