🚀 作者 :“大資料小禅”
🚀 粉絲福利 :加入小禅的大資料社群
🚀 歡迎小夥伴們 點贊👍、收藏⭐、留言💬
連結清單是什麼?
1.邏輯結構上⼀個挨⼀個的資料,在實際存儲時,并沒有像順序表那樣也互相緊挨着。恰恰相
反,資料随機分布在記憶體中的各個位置,這種存儲結構稱為線性表的鍊式存儲。
2.由于分散存儲,為了能夠展現出資料元素之間的邏輯關系,每個資料元素在存儲的同時,要
配備⼀個指針,⽤于指向它的直接後繼元素,即每⼀個資料元素都指向下⼀個資料元素
** 本身的資訊,稱為“資料域” **
** 指向直接後繼的指針,稱為“指針域”。指向NULL(空))。
下面是一個單連結清單的實作過程
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //結構體是⼀種⼯具,⽤這個⼯具可以定義⾃⼰的資料類型
typedef struct
{
char Num[10];//學号
char Name[20];//姓名
} Student;
typedef struct tagNode
{
Student Stu;
struct tagNode *pNext;
} Node;
//定義連結清單的第⼀個學⽣,即學⽣單連結清單的頭結點
Node *head = NULL;
void printfNode() //周遊元素
{
Node *node = head; //為了不去破壞那個本來的head,重新定義一個node指針變量。
while(node !=NULL)
{
printf("Num:%s,Name:%s\n",node->Stu.Num,node->Stu.Name);
node = node->pNext; //node等于下一個節點,一直周遊下去
}
}
void addNode(Node *node)
{
node->pNext = NULL; //如果隻是一個Node,那就是一個元素,你隻知道他的資料,并不知道怎麼去通路這個資料
if(head == NULL)
{
head = node; //一開始沒有任何節點,那麼傳入的節點作為頭結點
}
else
{
Node *p = head;
while(p != NULL && p->pNext !=NULL) //,擷取最後一個節點的位置,跳出循環的那時候是最後一個節點,判斷後繼節點是否為空
{
p = p->pNext;
}
p->pNext=node; //下一個指針域指向新節點
}
}
int main()
{
Node *p1 = (Node*)malloc(sizeof(Node)); //malloc在 <stdlib.h> 裡面,給p1配置設定一個記憶體。 這裡p1換成node輸出一樣
strcpy(p1->Stu.Num,"123"); //給p1指派
strcpy(p1->Stu.Name,"louis");
Node *p2 = (Node*)malloc(sizeof(Node));
strcpy(p2->Stu.Num,"124");
strcpy(p2->Stu.Name,"daniel");
Node *p3 = (Node*)malloc(sizeof(Node));
strcpy(p3->Stu.Num,"125");
strcpy(p3->Stu.Name,"xd");
addNode(p1);
addNode(p2);
addNode(p3);
printfNode();
return 0;
}
輸出:
Num:123,Name:louis
Num:124,Name:daniel
Num:125,Name:xd
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iZzkzMhlDMjRDZyczY2UTOxEWZ0IGMmdjYwgzN5YjNl9CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)