91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言數據結構之單鏈表存儲實例分析

發布時間:2022-07-27 13:43:18 來源:億速云 閱讀:124 作者:iii 欄目:開發技術

這篇文章主要介紹了C語言數據結構之單鏈表存儲實例分析的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C語言數據結構之單鏈表存儲實例分析文章都會有所收獲,下面我們一起來看看吧。

如果說,順序表的所占用的內存空間是連續的,那么鏈表則是隨機分配的不連續的,那么為了使隨機分散的內存空間串聯在一起形成一種前后相連的關系,指針則起到了關鍵性作用。

C語言數據結構之單鏈表存儲實例分析

單鏈表的基本結構:

C語言數據結構之單鏈表存儲實例分析

頭指針:永遠指向鏈表第一個節點的位置。

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

首元結點:首個帶有元素的結點。

其他結點:鏈表中其他的節點。

1、定義一個鏈表結點

包括數據域和指針域

typedef struct Link{
    char elem;//數據域 
    struct Link *next;//指針域,用來連接后繼元素 
}link;//link為節點名,每個結點都是一個link結構體

2、初始化單鏈表

(1)創建一個頭結點

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

(3)用循環創建新的結點并賦值且依次相連

newLink a;

a->data=i;

a->next=null;

temp->next=a;

temp=a;

過程如下:

C語言數據結構之單鏈表存儲實例分析

帶頭結點:

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

無頭結點的單鏈表初始化:

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

3、輸出鏈表數據

帶頭結點:

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

不帶頭結點:

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

4、完整代碼

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

輸出結果:

C語言數據結構之單鏈表存儲實例分析

關于“C語言數據結構之單鏈表存儲實例分析”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C語言數據結構之單鏈表存儲實例分析”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高安市| 鄂伦春自治旗| 镇远县| 无极县| 桃园县| 襄城县| 舟山市| 宁德市| 宝丰县| 通州市| 罗甸县| 肥城市| 冀州市| 微山县| 易门县| 怀柔区| 滨海县| 兰溪市| 柘荣县| 金湖县| 汶上县| 阜南县| 怀集县| 商洛市| 昭平县| 牟定县| 南川市| 宜黄县| 青龙| 巴楚县| 都江堰市| 八宿县| 福建省| 太保市| 广州市| 吕梁市| 个旧市| SHOW| 铜梁县| 邯郸市| 武穴市|