日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言,链表

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言,链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義一個鏈表的節點

之前說到樹,里面也有一個節點,節點是用來存數據的,不管是樹還是其他什么數據結構,最終的目的都是用來處理數據的,所以節點里面包含兩個東西,一個是指針,指針可以指向其他位置,可以是下一個節點,可以是上一個節點,還有一個東西就是數據本身,我們用一個int來代表數據,如果是很復雜的數據,我們也可以用結構體表示。

typedef struct Node{
int data;
struct Node * next;
}*p_Node;

定義一個鏈表頭結構體

鏈表頭也可以是一個節點,可以認為他就是一個指針,這個指針就指向這個鏈表的表頭,所以我們還是用上面的結構體來聲明這個頭節點,再換個名字就好了。

typedef struct head{
p_Node root;
};

聲明一個鏈表頭

一個鏈表沒有頭是不行的,就像一個家庭沒有戶主是不行的,也像一個球隊,如果沒有隊長也是不行的,我們打正式比賽,還需要教練,但是正常一個球隊,我們必須有一個隊長,隊長非常重要,就像一個鏈表一樣,鏈表頭也是一樣的重要。

/*初始化一個鏈表*/
struct head p_head;
/*鏈表為空,鏈表指向下一項為空,說明鏈表為空*/
p_head.root = NULL;

我們的鏈表頭是空的,沒有指向任何地方,這樣做有沒有問題?所以執行了那幾行代碼后,會變成這個樣子。這里提一下,可能很多初學者覺得這個有沒有問題,到底是不是這樣的,我們回顧聲明和定義,什么是聲明,什么是定義呢?聲明和定義的主要區別是有沒有分配內存空間,我們使用

struct head p_head;

定義了一個指針,那么這個就需要分配內存空間。

向鏈表插入一個數據

插入數據的時候,因為我們需要該表頭指針的位置,所以會做的判斷,正常插入一個數據到鏈表里面去的時候,先是開辟一個節點,然后操作這個節點的next指針,然后讓鏈表的尾部指向這個節點

鏈表源碼示例

#include "stdio.h"
#include "stdlib.h"

typedef struct Node{
int data;
struct Node * next;
}*p_Node;

typedef struct head{
p_Node root;
};

/*直接做插入的動作,不給head 單獨分配內存*/
int list_insert(struct head * p_head,int data)
{
/*新建一個節點*/
p_Node pTemp = (p_Node)malloc(sizeof(struct Node));
/*把數據放入這個新建的節點里面*/
pTemp->data = data;
pTemp->next = NULL;

if(p_head->root == NULL)
{
p_head->root = pTemp;
printf("#1list_insert:%d\n",data);
return (0);
}else{

/*找到鏈表的尾部節點*/
p_Node pTemp1 = p_head->root;
while(pTemp1->next != NULL)
{
pTemp1 = pTemp1->next;
}

/*插入新節點*/
pTemp1->next = pTemp;

printf("#2list_insert:%d\n",data);
return (0);
}
}

int list_traverse(p_Node node)
{
if(node == NULL)
{
printf("list_traverse: pHead null \n");
return (-1);
}

p_Node pTemp1 = node;
while(pTemp1 != NULL)
{
printf("data:%d\n",pTemp1->data);
pTemp1 = pTemp1->next;
}
}

int main()
{
int i = 0;
printf("main Entering ...\n");
/*初始化一個鏈表*/
struct head p_head;
/*鏈表為空,鏈表指向下一項為空,說明鏈表為空*/
p_head.root = NULL;

/*像鏈表插入數據*/
for(i = 0;i< 10;i++)
{
list_insert(&p_head,i);
}

/*遍歷鏈表*/
list_traverse(p_head.root);

printf("main Exiting ...\n");
return (0);
}

執行結果

最后

用上面這個圖片來表示鏈表就很簡單了,我們后面還會看到循環鏈表,我們知道鏈表的尾部是指向NULL的,如果我們把最后的那個鏈表指向head,就是循環鏈表。

—————END—————

掃碼或長按關注

回復「?加群?」進入技術群聊

總結

以上是生活随笔為你收集整理的C语言,链表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。