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

深入淺出:單鏈表的實現(xiàn)和應用

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

?深入淺出:單鏈表的實現(xiàn)和應用

??博客主頁:青竹霧色間.

??博客制作不易歡迎各位??點贊+?收藏+?關注

深入淺出:單鏈表的實現(xiàn)和應用

??人生如寄,多憂何為??

目錄

前言

單鏈表的基本概念

節(jié)點

頭節(jié)點

尾節(jié)點

單鏈表的基本操作

創(chuàng)建單鏈表

頭插法:

尾插法:

插入(增)操作

?刪除(刪)操作:

查找(查)操作:

修改(改)操作:

遍歷鏈表

單鏈表的應用場景


前言

在本篇博客中,我們將深入探索一種常見的數(shù)據(jù)結構——單鏈表。單鏈表是一種線性數(shù)據(jù)結構,它由一系列節(jié)點組成,每個節(jié)點包含一個數(shù)據(jù)元素和一個指向下一個節(jié)點的指針。單鏈表的特點是插入和刪除操作非常簡單,但是查找和遍歷操作可能會比較耗時。我們將學習單鏈表的基本概念、操作以及實現(xiàn)方式。

深入淺出:單鏈表的實現(xiàn)和應用

單鏈表的基本概念

下面我們來介紹一下單鏈表的基本概念和操作。

  • 節(jié)點

單鏈表中的每個節(jié)點都包含兩個部分:數(shù)據(jù)域(DATA)和指針域(NEXT)。

數(shù)據(jù)域用于存儲數(shù)據(jù)元素可以是數(shù)組,可以是int,甚至可以是結構體,

指針域用于存儲指向下一個節(jié)點的指針。

深入淺出:單鏈表的實現(xiàn)和應用

typedef int ElemType; //定義單鏈表結構
typedef struct Node{
    ElemType data;//數(shù)據(jù)域
    struct Node *next;//指針域
} LinkList;//初始化
  • 頭節(jié)點

單鏈表的第一個節(jié)點稱為頭節(jié)點,它不包含任何數(shù)據(jù)元素,只包含一個指向第一個節(jié)點的指針。在單鏈表中,頭節(jié)點通常被定義為全局變量或者靜態(tài)變量。

深入淺出:單鏈表的實現(xiàn)和應用

//創(chuàng)建頭結點,并將數(shù)據(jù)存入頭結點中
LinkList CreateList(ElemType n){
    LinkList head = (LinkList)malloc(sizeof(struct Node));
    head->data = n;
    head->next = NULL;
    return head;
}
  • 尾節(jié)點

單鏈表的最后一個節(jié)點稱為尾節(jié)點,它也不包含任何數(shù)據(jù)元素,只包含一個指向最后一個節(jié)點的指針。在單鏈表中,尾節(jié)點通常被定義為全局變量或者靜態(tài)變量。

鏈表的尾節(jié)點NEXT指向NULL(空),因為尾部沒有任何可以指向的空間了.

深入淺出:單鏈表的實現(xiàn)和應用

單鏈表的基本操作

單鏈表是一種常見的數(shù)據(jù)結構,支持以下四種基本操作:插入(增)、刪除(刪)、查找(查)、修改(改)。下面將逐一介紹這些操作的實現(xiàn)方法。

創(chuàng)建單鏈表

頭插法:

我們首先創(chuàng)建一個頭結點,然后將新節(jié)點插入到頭結點的后面。具體實現(xiàn)時,我們可以使用指針來遍歷鏈表,找到最后一個節(jié)點,然后將新節(jié)點插入到該節(jié)點的后面。這樣就可以保證新節(jié)點始終位于鏈表的頭部。

深入淺出:單鏈表的實現(xiàn)和應用

// 頭插法
Node* insertAtHead(Node *head, int data) {
    Node *newNode = (Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    newNode->next = head;
    return newNode;
}

尾插法:

深入淺出:單鏈表的實現(xiàn)和應用

我們首先創(chuàng)建一個頭結點,然后將新節(jié)點插入到頭結點的后面。具體實現(xiàn)時,我們可以使用指針來遍歷鏈表,找到最后一個節(jié)點,然后將新節(jié)點插入到該節(jié)點的后面。這樣就可以保證新節(jié)點始終位于鏈表的尾部。

// 尾插法
Node* insertAtTail(Node *head, int data) {
    Node *newNode = (Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    if (head == NULL) { // 如果鏈表為空,則直接將新節(jié)點作為頭結點。
        newNode->next = NULL;
        return newNode;
    } else if (head->next == NULL) { // 如果鏈表只有一個元素,則直接將新節(jié)點插入到該元素后面。
        head->next = newNode;
        return head;
    } else { // 否則,找到最后一個節(jié)點,然后將新節(jié)點插入到該節(jié)點的后面。
        Node *temp = head;
        while (temp->next != NULL) temp = temp->next;
        temp->next = newNode;
        return head;
    }
}
  • 插入(增)操作

? ? ? ? ? 在單鏈表中插入一個新節(jié)點,將其鏈接到鏈表中的其他節(jié)點。

// 在指定位置插入一個新節(jié)點
void insertAtPos(Node** head, int pos, ElemType e) {
    Node* p = *head;
    int i = 1; // i表示當前節(jié)點的位置,從第二個節(jié)點開始計算
    while (i < pos && p != NULL) p = p->next, i++; // 從第二個節(jié)點開始遍歷到指定位置的前一個節(jié)點
    Node* newNode = (Node*)malloc(sizeof(struct Node));
    if (newNode == NULL) exit(0); // 如果分配失敗則退出程序
    newNode->data = e; // 將新節(jié)點的數(shù)據(jù)域設置為e
    if (p == NULL) *head = newNode; // 如果指定位置的前一個節(jié)點是空的,則將新節(jié)點作為新的頭結點
    else newNode->next = p->next; // 否則將新節(jié)點插入到指定位置的前一個節(jié)點后面
    p->next = newNode; // 將新節(jié)點插入到鏈表中
}

深入淺出:單鏈表的實現(xiàn)和應用

  • ?刪除(刪)操作:

?????????從單鏈表中刪除一個節(jié)點,重新連接鏈表中的其他節(jié)點。

  1. 若要刪除的節(jié)點為頭節(jié)點,直接將頭節(jié)點指向下一個節(jié)點即可。
  2. 若要刪除的節(jié)點不是頭節(jié)點,遍歷鏈表找到該節(jié)點的前一個節(jié)點。
  3. 將前一個節(jié)點的next指針指向要刪除節(jié)點的下一個節(jié)點。

?深入淺出:單鏈表的實現(xiàn)和應用

  • 查找(查)操作:

????????在單鏈表中查找特定的元素。

  1. 從頭節(jié)點開始遍歷鏈表,逐個比較節(jié)點的數(shù)據(jù)與目標數(shù)據(jù)是否相等。
  2. 若找到相等的節(jié)點,則返回該節(jié)點或其他需要的信息。
  3. 若遍歷完整個鏈表仍未找到目標數(shù)據(jù),則表示目標數(shù)據(jù)不存在于鏈表中。
//在單鏈表中查找值為x的結點
int Locate(LinkList L, int x)
{
    LinkList p;
    int j = 1;
    p = L->next;
    while (p != NULL && p->data != x)
    {
        p = p->next;
        j++;
    }
    if (p)
    {
        printf("%d在鏈表中,是第%d個元素", p->data - 48, j);//由于是ASCII,所以-48
    }
    else
    {
        printf("該數(shù)值不在鏈表里。\n");
        return 0;
    }
}
//求單鏈表的長度
int ListLength(LinkList L)
{
    Node* p;
    p = L->next;
    int j = 0;//計數(shù)器j
    while (p != NULL)
    {
        p = p->next;
        j++;
    }
    printf("%d", j);
    return 0;
}
  • 修改(改)操作:

????????更新單鏈表中節(jié)點的數(shù)據(jù)。

  1. 從頭節(jié)點開始遍歷鏈表,逐個比較節(jié)點的數(shù)據(jù)與目標數(shù)據(jù)是否相等。
  2. 若找到相等的節(jié)點,則將該節(jié)點的數(shù)據(jù)更新為新的數(shù)據(jù)。
//鏈表內容的修改,在鏈表中修改值為x的元素變?yōu)闉閗。
LinkedList LinkedListReplace(LinkedList L,int x,int k) {
    Node *p=L->next;
    int i=0;
    while(p){
        if(p->data==x){
            p->data=k;
        }
        p=p->next;
    }
    return L;
}
  • 遍歷鏈表

在單鏈表中,遍歷鏈表的操作可以通過以下步驟實現(xiàn):

a. 從頭結點開始遍歷鏈表;

b. 對于每個節(jié)點,執(zhí)行相應的操作(如打印數(shù)據(jù)元素)。

void Print(LinkList L) 
{
    Node* p = L->next;
    while (p) 
    {
        printf("%c ", p->data);
        p = p->next;
    }
}

單鏈表的應用場景

單鏈表在實際的軟件開發(fā)中有廣泛的應用,例如:

  • 數(shù)據(jù)庫系統(tǒng)中的鏈表索引。

深入淺出:單鏈表的實現(xiàn)和應用

  • 實現(xiàn)棧和隊列等其他數(shù)據(jù)結構。
  • 圖算法中的鄰接表表示。

深入淺出:單鏈表的實現(xiàn)和應用文章來源地址http://www.zghlxwxcb.cn/news/detail-475220.html

到了這里,關于深入淺出:單鏈表的實現(xiàn)和應用的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 【知識圖譜】深入淺出講解知識圖譜(技術、構建、應用)

    【知識圖譜】深入淺出講解知識圖譜(技術、構建、應用)

    本文收錄于《深入淺出講解自然語言處理》專欄,此專欄聚焦于自然語言處理領域的各大經(jīng)典算法,將持續(xù)更新,歡迎大家訂閱! 個人主頁:有夢想的程序星空 個人介紹:小編是人工智能領域碩士,全棧工程師,深耕Flask后端開發(fā)、數(shù)據(jù)挖掘、NLP、Android開發(fā)、自動化等領域

    2023年04月08日
    瀏覽(64)
  • 【深入淺出】條件概率的鏈式法則:定義、公式與應用

    【深入淺出】條件概率的鏈式法則:定義、公式與應用

    在概率論的研究中,條件概率是一種非常重要的概念。當多個隨機事件發(fā)生時,我們有時需要考慮它們同時發(fā)生的概率。條件概率的鏈式法則就是一種用于計算多個隨機事件同時發(fā)生的概率的方法。本文將會介紹條件概率的鏈式法則的定義、公式以及應用。 條件概率是指在已

    2024年02月08日
    瀏覽(24)
  • 深入淺出落地應用分析:AI數(shù)字人「微軟小冰」

    深入淺出落地應用分析:AI數(shù)字人「微軟小冰」

    hi,各位,今天要聊的是AI小冰,機緣巧合,投遞了這家公司的產(chǎn)品,正好最近在看數(shù)字人相關的,就詳細剖析下這款產(chǎn)品! 小冰,全稱為北京紅棉小冰科技有限公司,前身為微軟(亞洲)互聯(lián)網(wǎng)工程院人工智能小冰團隊,是微軟全球最大的人工智能獨立產(chǎn)品研發(fā)團隊。作為

    2024年03月20日
    瀏覽(34)
  • 深入淺出Rust內存安全:構建更安全、高效的系統(tǒng)應用

    深入淺出Rust內存安全:構建更安全、高效的系統(tǒng)應用

    在過去幾年中,Rust編程語言以其獨特的安全保障特性和高效的性能,成為了眾多開發(fā)者和大型科技公司的新寵。尤其是其內存安全特性,成為了廣泛討論和贊揚的焦點。本文旨在深入探討內存安全的概念、Rust在內存安全方面的獨到之處,以及這些特性對系統(tǒng)開發(fā)的深遠影響

    2024年02月19日
    瀏覽(32)
  • 深入淺出AI落地應用分析:AI音樂生成之「Suno.ai」

    深入淺出AI落地應用分析:AI音樂生成之「Suno.ai」

    接下來會每周集中體驗一些通用或者垂直的AI落地應用,主要以一些全球或者國外國內排行較前的產(chǎn)品為研究對象,「AI 產(chǎn)品榜: aicpb.com」以專題的方式在博客進行分享。 本節(jié)主要介紹和體驗AI音樂生成應用產(chǎn)品Suno AI,Suno來自目前最強的文字轉音頻(TTS)開源模型 Bark。 產(chǎn)

    2024年04月27日
    瀏覽(18)
  • 【C++深入淺出】日期類的實現(xiàn)

    【C++深入淺出】日期類的實現(xiàn)

    目錄 一. 前言? 二. 日期類的框架 三. 日期類的實現(xiàn) 3.1 構造函數(shù) 3.2 析構函數(shù) 3.3 賦值運算符重載 3.4 關系運算符重載 3.5 日期 +/-?天數(shù) 3.6 自增與自減運算符重載 3.7 日期 - 日期 四. 完整代碼? ? ? ? ? 通過前面兩期類和對象的學習,我們已經(jīng)對C++的類有了一定的了解。本期我

    2024年02月07日
    瀏覽(91)
  • Spring高手之路14——深入淺出:SPI機制在JDK與Spring Boot中的應用

    Spring高手之路14——深入淺出:SPI機制在JDK與Spring Boot中的應用

    ?? SPI ( Service Provider Interface ) 是一種服務發(fā)現(xiàn)機制,它允許第三方提供者為核心庫或主框架提供實現(xiàn)或擴展。這種設計允許核心庫/框架在不修改自身代碼的情況下,通過第三方實現(xiàn)來增強功能。 JDK原生的SPI : 定義和發(fā)現(xiàn) : JDK 的 SPI 主要通過在 META-INF/services/ 目錄下放置

    2024年02月09日
    瀏覽(26)
  • 深入淺出 -- 系統(tǒng)架構之負載均衡Nginx實現(xiàn)高可用

    深入淺出 -- 系統(tǒng)架構之負載均衡Nginx實現(xiàn)高可用

    ? ?線上如果采用單個節(jié)點的方式部署 Nginx ,難免會出現(xiàn)天災人禍,比如系統(tǒng)異常、程序宕機、服務器斷電、機房爆炸、地球毀滅....哈哈哈,夸張了。但實際生產(chǎn)環(huán)境中確實存在隱患問題,由于 Nginx 作為整個系統(tǒng)的網(wǎng)關層接入外部流量,所以一旦 Nginx 宕機,最終就會導致整

    2024年04月15日
    瀏覽(29)
  • 【深入淺出Spring Security(三)】默認登錄認證的實現(xiàn)原理

    【深入淺出Spring Security(三)】默認登錄認證的實現(xiàn)原理

    由默認的 SecurityFilterChain 為例(即表單登錄),向服務器請求 /hello 資源Spring Security 的流程分析如下: 請求 /hello 接口,在引入 Spring Security 之后會先經(jīng)過一系列過濾器(一中請求的是 /test 接口); 在請求到達 FilterSecurityInterceptor 時,發(fā)現(xiàn)請求并未認證。請求被攔截下來,并

    2024年02月09日
    瀏覽(30)
  • K8s項目實戰(zhàn)筆記獲阿里技術大咖力薦,深入淺出解讀容器編排原理與應用

    K8s項目實戰(zhàn)筆記獲阿里技術大咖力薦,深入淺出解讀容器編排原理與應用

    一、前言 Kubernetes,簡稱K8s,宛如一位技藝高超的舞臺導演,優(yōu)雅地指揮著容器集群的華麗表演。它不僅僅是一個開源的容器集群管理系統(tǒng),更是自動化部署、智能擴縮容與維護等功能的集大成者。作為領軍的容器編排工具,Kubernetes展現(xiàn)了基于容器技術的分布式架構的無盡魅

    2024年03月10日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包