建立和引用單鏈表
阿新 • • 發佈:2019-01-23
首先讓我們看看單鏈表的定義:
單向連結串列:1:單鏈表有一個頭節點head,指向連結串列在記憶體的首地址。
2:連結串列中的每一個節點的資料型別為結構體型別,節點有兩個成員:整型成員(實際需要儲存的資料)和指向下一個結構體型別節點的指標即下一個節點的地址 (事實上,此單鏈表是用於存放整型資料的動態陣列)。
3:連結串列按此結構對各節點的訪問需從連結串列的頭找起,後續節點的地址由當前節點給出。
4:無論在表中訪問那一個節點,都需要從連結串列的頭開始,順序向後查詢。連結串列的尾節點由於無後續節點,其指標域為空,寫作為NULL。
單鏈表的建立過程有以下幾步:
1 ) 定義連結串列的資料結構;
2 ) 建立一個空表;
3 ) 利用malloc ( )函式向系統申請分配一個節點;
4 ) 將新節點的指標成員賦值為空。若是空表,將新節點連線到表頭;若是非空表,將新節點接到表尾;
5 ) 判斷一下是否有後續節點要接入連結串列,若有轉到3 ),否則結束;
下面給出相應程式碼: #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
//單鏈表中每個結點的儲存地址是存放在其前趨結點next域中,而開始結點無前趨,故應設頭指標head指向開始結點。
typedef struct link_list //定義了連結串列的資料結構
{
struct link_list *next;
int data;
}node;
node *creat(void)
{
node *h=NULL;
node *p=NULL;
node *q=NULL;//h頭節點 p儲存資料的節點 q終端節點 其指標域為空
int x;
h = NULL; //建立一個空表
printf("input x(x==0時結束輸入):");
scanf("%d", &x);
while (x != 0)
{
p = (node *)malloc(sizeof(node)); // 函式malloc分配一個型別為ListNode的結點變數的空間, 並將其首地 址放入指標變數p中
p->data = x; //鏈節的資料域存放資料x;
if (h == NULL) //h為頭指標,如果其為空 指向下一個節點
{
h = p; //若為空表,接入表頭
}
else
{
q->next = p; //非空表 接到表尾
}
q = p;
scanf("%d", &x);
}
//free(p); //申請到的沒錄入,所以釋放掉
//p = NULL; //使指向空
//q->next = NULL; //到表尾了,指向空
if (h) //若頭指標為空 則整個連結串列為空
q->next = NULL;
printf("連結串列輸入結束(END)\n");
return h; //連結串列建立好後返回頭節點
}
void print_list(node *head)
{
node *temp = head;
printf("\n\n\n連結串列存入的值為:\n");
while (temp != NULL)
{
printf("%d ", temp->data);
temp = temp->next;
}
}
int main()
{
node *L = NULL;
L = creat();
print_list(L);
return 0;
}