最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表存儲詳解

 更新時間:2022年07月27日 10:42:43   作者:代碼騎士  
鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。本文將和大家一起聊聊C語言中單鏈表的存儲,感興趣的可以學(xué)習(xí)一下

如果說,順序表的所占用的內(nèi)存空間是連續(xù)的,那么鏈表則是隨機(jī)分配的不連續(xù)的,那么為了使隨機(jī)分散的內(nèi)存空間串聯(lián)在一起形成一種前后相連的關(guān)系,指針則起到了關(guān)鍵性作用。

單鏈表的基本結(jié)構(gòu):

頭指針:永遠(yuǎn)指向鏈表第一個節(jié)點的位置。

頭結(jié)點:不存任何數(shù)據(jù)的空節(jié)點,通常作為鏈表的第一個節(jié)點。對于鏈表來說,頭節(jié)點不是必須的,它的作用只是為了方便解決某些實際問題。

首元結(jié)點:首個帶有元素的結(jié)點。

其他結(jié)點:鏈表中其他的節(jié)點。

1、定義一個鏈表結(jié)點

包括數(shù)據(jù)域和指針域

typedef struct Link{
    char elem;//數(shù)據(jù)域 
    struct Link *next;//指針域,用來連接后繼元素 
}link;//link為節(jié)點名,每個結(jié)點都是一個link結(jié)構(gòu)體 

2、初始化單鏈表

(1)創(chuàng)建一個頭結(jié)點

(2)聲明一個臨時指針指向頭結(jié)點

(3)用循環(huán)創(chuàng)建新的結(jié)點并賦值且依次相連

newLink a;

a->data=i;

a->next=null;

temp->next=a;

temp=a;

過程如下:

帶頭結(jié)點:

link * initLink(){
    link *p=(link*)malloc(sizeof(link));//創(chuàng)建頭結(jié)點
    link*temp = p;//聲明一個指針temp指向頭結(jié)點,也就是頭結(jié)點的地址賦值給指針變量(注意這不是頭指針而是用來連接數(shù)組的臨時指針變量)
    //生成鏈表
    for(int i=1;i<5;i++)
    {
        link *a=(link*)malloc(sizeof(link));//生成一個結(jié)點 
        a->elem=i;//給結(jié)點的數(shù)據(jù)域賦值
        a->next=NULL;//指針域設(shè)置為空 
        temp->next=a;//上一個結(jié)點的指針指向新增結(jié)點 
        temp=temp->next;//臨時指針向后移動也可寫成temp=a 
    } 
    //返回頭結(jié)點,通過頭節(jié)點的指針即可找到整個鏈表
    return p;
} 

無頭結(jié)點的單鏈表初始化:

 link * initLink2(){
    link *p=NULL;//創(chuàng)建頭指針
    link*temp=(link*)malloc(sizeof(link));//創(chuàng)建首元結(jié)點
    //首元結(jié)點初始化
    temp->elem=1;
    temp->next=NULL;
    p=temp;//頭結(jié)點指向首元結(jié)點
    //接下來從第二個結(jié)點開始創(chuàng)建
    for(int i=2;i<5;i++){
        //創(chuàng)建一個新結(jié)點并初始化
        link *a=(link*)malloc(sizeof(link));
        a->elem=i;
        a->next=NULL;
        //將temp結(jié)點與新建的a結(jié)點建立邏輯關(guān)系
        temp->next=a;
        temp=a;    
    }
    //返回建立的節(jié)點,只返回頭指針 p即可,通過頭指針即可找到整個鏈表
    return p; 
}

3、輸出鏈表數(shù)據(jù)

帶頭結(jié)點:

void display(link *p){
    link*temp=p;//將temp指向頭結(jié)點
    //只要temp指針指向的結(jié)點的next不是Null,就執(zhí)行輸出語句。
    while(temp->next){
        temp=temp->next;
        printf("%d ",temp->elem);
    } 
    printf("\n");
} 

不帶頭結(jié)點:

void display2(link *p){
    link* temp=p;//將temp指針重新指向頭結(jié)點
    //只要temp指針指向的結(jié)點的next不是Null,就執(zhí)行輸出語句。
    while (temp) {
        printf("%d ",temp->elem);
        temp=temp->next;
    }
    printf("\n");
}

4、完整代碼

#include<stdio.h>
#include<stdlib.h>
 
typedef struct Link{
    int elem;//數(shù)據(jù)域 
    struct Link *next;//指針域,用來連接后繼元素 
}link;//link為節(jié)點名,每個結(jié)點都是一個link結(jié)構(gòu)體 
 
//帶頭結(jié)點 
link * initLink(){
    link *p=(link*)malloc(sizeof(link));//創(chuàng)建頭結(jié)點
    link*temp = p;//聲明一個指針temp指向頭結(jié)點,也就是頭結(jié)點的地址賦值給指針變量(注意這不是頭指針而是用來連接數(shù)組的臨時指針變量)
    //生成鏈表
    for(int i=1;i<5;i++)
    {
        link *a=(link*)malloc(sizeof(link));//生成一個結(jié)點 
        a->elem=i;//給結(jié)點的數(shù)據(jù)域賦值
        a->next=NULL;//指針域設(shè)置為空 
        temp->next=a;//上一個結(jié)點的指針指向新增結(jié)點 
        temp=temp->next;//臨時指針向后移動也可寫成temp=a 
    } 
    //返回頭結(jié)點,通過頭節(jié)點的指針即可找到整個鏈表
    return p;
} 
 
//不帶頭結(jié)點 
link * initLink2(){
    link *p=NULL;//創(chuàng)建頭指針
    link*temp=(link*)malloc(sizeof(link));//創(chuàng)建首元結(jié)點
    //首元結(jié)點初始化
    temp->elem=1;
    temp->next=NULL;
    p=temp;//頭結(jié)點指向首元結(jié)點
    //接下來從第二個結(jié)點開始創(chuàng)建
    for(int i=2;i<5;i++){
        //創(chuàng)建一個新結(jié)點并初始化
        link *a=(link*)malloc(sizeof(link));
        a->elem=i;
        a->next=NULL;
        //將temp結(jié)點與新建的a結(jié)點建立邏輯關(guān)系
        temp->next=a;
        temp=a;    
    }
    //返回建立的節(jié)點,只返回頭指針 p即可,通過頭指針即可找到整個鏈表
    return p; 
}
 
//帶頭結(jié)點 
void display(link *p){
    link*temp=p;//將temp指向頭結(jié)點
    //只要temp指針指向的結(jié)點的next不是Null,就執(zhí)行輸出語句。
    while(temp->next){
        temp=temp->next;
        printf("%d ",temp->elem);
    } 
    printf("\n");
} 
 
//不帶頭結(jié)點 
void display2(link *p){
    link* temp=p;//將temp指針重新指向頭結(jié)點
    //只要temp指針指向的結(jié)點的next不是Null,就執(zhí)行輸出語句。
    while (temp) {
        printf("%d ",temp->elem);
        temp=temp->next;
    }
    printf("\n");
}
 
int main()
{
    display(initLink());
    return 0;
}

輸出結(jié)果:

以上就是C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表存儲詳解的詳細(xì)內(nèi)容,更多關(guān)于C語言單鏈表存儲的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一起來看看C語言世界中的結(jié)構(gòu)體

    一起來看看C語言世界中的結(jié)構(gòu)體

    這篇文章主要為大家詳細(xì)介紹了C語言世界中的結(jié)構(gòu)體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • MFC實現(xiàn)學(xué)生選課系統(tǒng)

    MFC實現(xiàn)學(xué)生選課系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了MFC實現(xiàn)學(xué)生選課系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C++構(gòu)造函數(shù)的類型,淺拷貝與深拷貝詳解

    C++構(gòu)造函數(shù)的類型,淺拷貝與深拷貝詳解

    這篇文章主要為大家詳細(xì)介紹了C++構(gòu)造函數(shù)的類型,淺拷貝與深拷貝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++ XML庫用法詳解

    C++ XML庫用法詳解

    TinyXML-2是C++中一個輕量級、易于使用的XML解析庫,支持XML的讀取和寫入,內(nèi)存占用小,適合嵌入式系統(tǒng),本文給大家介紹C++ XML庫用法,感興趣的朋友一起看看吧
    2025-03-03
  • C++ opencv圖像處理實現(xiàn)圖片幾何變換示例

    C++ opencv圖像處理實現(xiàn)圖片幾何變換示例

    這篇文章主要為大家介紹了C++ opencv圖像處理實現(xiàn)圖片幾何變換示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C語言大小端模式、判斷大小端、大小端轉(zhuǎn)換方法詳解

    C語言大小端模式、判斷大小端、大小端轉(zhuǎn)換方法詳解

    這篇文章主要介紹了C語言大小端模式、判斷大小端、大小端轉(zhuǎn)換的相關(guān)資料,大端和小端是數(shù)據(jù)在內(nèi)存中的存儲方式,大端模式下高字節(jié)存于低地址,小端模式則相反,大小端問題由數(shù)據(jù)類型多字節(jié)存儲引起,不同選擇形成不同存儲模式,需要的朋友可以參考下
    2024-10-10
  • C++深入細(xì)致探究二叉搜索樹

    C++深入細(xì)致探究二叉搜索樹

    二叉搜索樹是以一棵二叉樹來組織的。每個節(jié)點是一個對象,包含的屬性有l(wèi)eft,right,p和key,其中,left指向該節(jié)點的左孩子,right指向該節(jié)點的右孩子,p指向該節(jié)點的父節(jié)點,key是它的值
    2022-05-05
  • c++ std::sort使用自定義的比較函數(shù)排序方式

    c++ std::sort使用自定義的比較函數(shù)排序方式

    文章介紹了使用std::sort對容器內(nèi)元素進(jìn)行排序的基本方法,包括自定義排序函數(shù)和在類中調(diào)用自定義成員函數(shù)進(jìn)行排序的方法,文章還指出了在傳遞成員函數(shù)指針時可能會遇到的錯誤,并提供了使用Lambda表達(dá)式的解決辦法
    2025-02-02
  • c++學(xué)習(xí)之構(gòu)造函數(shù)

    c++學(xué)習(xí)之構(gòu)造函數(shù)

    類多么重要我就不多說了,只講講學(xué)習(xí),因為個人認(rèn)為類的學(xué)習(xí)無論從概念的理解還是實際代碼的編寫相對其他C兼容向的代碼都是比較有難度的, 對于以前學(xué)C 的人來說這才是真正的新概念和內(nèi)容,STL其實還比較好理解,不就是一個更大的函數(shù)庫和代碼可以使用嘛。
    2015-06-06
  • 深入ORACLE變量的定義與使用的詳解

    深入ORACLE變量的定義與使用的詳解

    本篇文章是對ORACLE變量的定義與使用進(jìn)行了詳細(xì)的分析與介紹,需要的朋友參考下
    2013-05-05

最新評論

绥阳县| 甘孜| 鄯善县| 海晏县| 平湖市| 荔浦县| 若尔盖县| 吐鲁番市| 沅江市| 益阳市| 顺昌县| 长丰县| 巢湖市| 金山区| 浮山县| 绥德县| 五华县| 南京市| 依安县| 佛学| 彭阳县| 宝兴县| 信丰县| 高平市| 比如县| 江永县| 图们市| 洱源县| 罗源县| 波密县| 京山县| 镇沅| 渑池县| 呼图壁县| 广元市| 牙克石市| 拉孜县| 林口县| 稻城县| 紫云| 普陀区|