C語言基礎 鍊錶

2021-08-21 09:52:38 字數 3200 閱讀 2115

參考清華大學軟體學院 諶衛軍   《c語言程式設計》課件

1、鍊錶

1.1 鍊錶的基本概念

定義如下的結構體型別

struct train_tag

2、對鍊錶的操作

2.1、建立動態鍊錶

例:建立乙個鍊錶,並輸入每乙個結點的各種描述資訊(貨櫃編號、貨物名稱、貨物重量、發貨地點、到貨時間等),

直到使用者輸入的貨物重量等於0,表示鍊錶結束。

struct train_tag

;struct train_tag *head,*p,*q;

建立鍊錶的過程可歸納為如下三個步驟:

①只要使用者輸入的weight不為0,就要構建鍊錶。基本思路是將乙個乙個的結點新增至鍊錶中。首先用指標p來申請乙個結構體變數的記憶體空間,並且裝入使用者輸入的各種描述資訊,然後將指標q和head都指向它,如下圖:

②後續結點的建立:如果使用者輸入的weight又不為0,就要構建鍊錶的第二個結點。首先用指標p來申請乙個結構體變數的記憶體空間,並且裝入使用者輸入的各種描述資訊,然後要執行q->next=p,把第乙個結點的next指標去指向它,從而建立兩個結點之間的鏈結關係。最後再把q指向新的結點。如下圖:

第三個結點加入鍊錶的過程:

③鍊錶建立過程的結束:如果使用者輸入的weight等於0,意味著鍊錶建立過程的結束,此時指標q所指向的就是鍊錶的最後乙個結點,所以要把該結點的next指標賦值為null,即執行q->next=null,表示這裡已是鏈尾,後面不會再鏈結點。如下圖:

}2.2、訪問鍊錶

在建立好乙個鍊錶之後,可以依次地訪問該鍊錶當中的各個結點的資料。

void display(struct train_tag *head)

}

2.3、刪除鍊錶結點

情形一、待刪除的是首結點

情形二、待刪除的不是首結點

while((p!=null) && strcmp(p->to,"湖南"))

if((p != null) && !strcmp(p->to,"湖南"))

}2.4、插入鍊錶結點

原則:①插入操作不應破壞原有鏈結關係;

②需要插入的這個結點應該把它放在合適的位置上,即有乙個插入位置的查詢過程。

定義:

struct train_tag *head;//頭指標

struct train_tag *p; //鍊錶當前結點

struct train_tag *q; //鍊錶上一結點

struct train_tag *pnode;//待插入的結點

第一種情況:鍊錶為空,即head=null

待插入的pnode結點就是鍊錶中的第乙個結點,head = pnode;

第二種情況:若pnode->weight<=head->weight,則

pnode->next = head;

head = pnode;

第三種情況:pnode結點插入在鍊錶的中間,設指標q和指標p分別指向相鄰的兩個結點,q在前p在後。

首先讓q=head,讓p=head->next,然後讓它們順序往後移動,每次移動乙個結點。當滿足q->weightweight<=p->weight時,pnode就插在q與p之間。

//移動指標

q = p;

p = p->next;

//插入結點

pnode->next = p;

q->next = pnode;

void insert(struct train_tag *pnode)

// 第二種情形,新結點的weight小於等於首結點

if(pnode->weight <= head->weight)

// 第三種情形,迴圈地查詢正確的插入位置

q = head;

p = head->next;

while(p != null)

}// 將pnode結點插入在正確的位置(q和p之間)

pnode->next = p;

q->next = pnode;

}

2.5、鍊錶的釋放

void destroy(struct train_tag *head)

}// head = null;

3、環形鍊錶

定義乙個名為student的結構體型別

struct student

struct student *head,*tail,*p,*prev;

int n,m,i,j;

模組1:輸入學生的個數n和不吉利的數字m,然後驗證它們的有效性;

模組2:建立乙個環形鍊錶,模擬眾同學圍成一圈的情形;

模組3:進入迴圈淘汰環節,模擬從1到m報數,讓n-1個同學逐一退出圈子的過程;

模組4:輸出結果。

C語言 鍊錶基礎 整表建立

指標是鍊錶的基礎,鍊錶是乙個c語言的重難點,是學習作業系統還有資料結構演算法的基礎。大師兄簡單做乙個鍊錶的整表建立程式,倆種方法,頭插法還有尾插法。基礎的同學可以仔細品味一下,include typedef struct node node typedef struct node linklist ...

c語言 鍊錶 C語言鍊錶例項 玩轉鍊錶

下圖為最一簡單鍊錶的示意圖 第 0 個結點稱為頭結點,它存放有第乙個結點的首位址,它沒有資料,只是乙個指標變數。以下的每個結點都分為兩個域,乙個是資料域,存放各種實際的資料,如學號 num,姓名 name,性別 和成績 score 等。另乙個域為指標域,存放下一結點的首位址。鍊錶中的每乙個結點都是同...

c語言鍊錶 鍊錶

在儲存一大波數的時候,我們通常使用陣列,但有時候陣列顯得不夠靈活,比如有一串已經從小到大排序好的數 2 3 5 8 9 10 18 26 32 現在需要往這串數中插入6使其得到的新序列仍符合從小到大排列。如果我們使用陣列來實現這一操作,則需要將8和8後面的數字都依次往後挪一位,如果你覺得這幾個數不算...