鍊錶是一種常見的重要的資料結構。它是動態地進行儲存分配的一種結構。
鍊錶有乙個 頭指標 變數,它存放乙個位址,該位址指向乙個元素,鍊錶中每乙個元素稱為 結點,每個結點都應包括兩個部分,一為使用者需要用的實際資料,二為下乙個結點的位址。可以看出,頭指標 head 指向第乙個元素,第乙個元素又指向第二個元素,。。。。直到最後乙個元素,該元素不再指向其他元素,它稱為 表尾,它的位址部分放乙個 null(表示 空位址)鍊錶到此結束。
可以看到鍊錶中各元素在記憶體中可以不是連續存放的,要找某一元素,必須先找到上乙個元素,根據它提供的下一元素位址才能找到下乙個元素。如果不提供 頭指標 head 則整個鍊錶無法訪問。
下面通過乙個例子來說明如何建立和輸出乙個簡單鍊錶:
#include
#include
#define null 0
struct student
;void
main()
while
(p !=
null);
//輸出完 c 結點後 p 的值為 null
system
("pause");
}
執行結果:
99101
89.5
99103
90.0
99107
85.0
處理動態鍊錶所需的函式
(1)malloc 函式
void
*malloc
(unsigned
int size)
;
作用是在記憶體的動態儲存區中分配乙個長度為 size 的連線空間。些函式的值(即返回值)是乙個指向分配空間起始位址的指標(基型別為 void)。如果些函式未能成功地執行(例如記憶體空間不足)則返回空指標 null。
(2)calloc 函式
void
*calloc
(unsigned n,
unsigned size)
;
其作用是釋放由 p 指向的記憶體區,使這部分記憶體區能被其它變數使用, p 是最後一次呼叫 calloc 或 malloc 函式時返回的值。free 函式無返回值。 請注意:以前的c版本提供的 malloc 和 calloc 函式得到的是指向字元型資料的指標。ansi c 提供的 malloc 和 calloc 函式規定為 void * 型別。
建立動態鍊錶
所謂建立動態鍊錶是指在程式執行過程中從無到有地建立起乙個鍵表,即乙個乙個地開闢結點和輸入各結點資料,並建立起前後相鏈的關係。
#include
#include
#define null 0
#define len sizeof(struct student)
struct student
;struct student *
create()
p2->next =
null
;return head;
}void
printlist
(struct student *head)
while
(p !=
null);
}}void
main()
以下是對鍊錶的各種操作
列印鍊錶:
void
printlist
(struct student *head)
while
(p !=
null);
}/* while(p -> next != null)
*/}
刪除節點:
struct student *
delnode
(struct student *head,
int num)
else
if(p1-
>num == num)
else
printf
("can not find list num.\n");
}return head;
}
更新節點:
struct student *
update
(struct student *head,
int index,
int num,
float score)
else
if(p-
>num == index)
else
printf
("can not find list index.\n");
}return head;
}
增加節點:
struct student *
add(
struct student *head,
int index,
int num,
float score)
else
if(p1-
>num == index)
else
}else
printf
("can not find list index.\n");
}return head;
}
c語言鍊錶詳解(超詳細)
鍊錶是一種常見的基礎資料結構,結構體指標在這裡得到了充分的利用。鍊錶可以動態的進行儲存分配,也就是說,鍊錶是乙個功能極為強大的陣列,他可以在節點中定義多種資料型別,還可以根據需要隨意增添,刪除,插入節點。鍊錶都有乙個頭指標,一般以head來表示,存放的是乙個位址。鍊錶中的節點分為兩類,頭結點和一般節...
Linux 核心鍊錶使用舉例
鍊錶資料結構的定義很簡潔 struct list head list head結構包含兩個指向list head結構的指標prev和next,該核心鍊錶具備雙鏈表功能,通常它都組織成雙迴圈鍊錶,這裡的list head沒有資料域。在linux核心鍊錶中,不是在鍊錶結構中包含資料,而是在資料結構中包含...
Linked List 鍊錶詳解
linked list basics linked list problems 我覺得這兩篇講linked list的文章寫的非常非常好,所以在部落格裡自己寫一下,也算是溫習鞏固資料結構的知識了 本文結合乙個實際的例子來解釋什麼是linked list,如何使用linked list 不過在解釋li...