單鏈表,你好

2021-07-11 18:02:36 字數 2293 閱讀 9204

她問我單鏈表的結點長什麼樣子,我告訴她是這樣的:

她說「你也太懶了吧,寫個**給我」。於是我寫了個定義:

//定義結點 

typedef struct node node;

她看了看,似懂非懂,於是開始轉移話題,問我最喜歡什麼樣的單鏈表,我想了想,畫了出來:

我的內心獨白:「這是乙個叫做空鏈的東西,沒錯,我就是喜歡這種簡潔到極致的東西,head表示頭指標,陰影代表的是頭結點的資料域,它是不放任何資料的,null是空指標,意味著鏈結束了。」

她拉著我,要我再畫點別的樣子的單鏈表,我只好畫了個她喜歡的:

她一臉懵逼,嘟囔著:「這**是什麼鬼?」

我:「你猜」

她:「你猜我猜不猜你猜不猜我不猜」

我:「這是乙個插入操作,在結點node-1和結點node-2之間插入結點node-3,藍線上有個叉,直觀上那裡需要斷開,大寫的1,2代表了插入的步驟。」

她:「切,有本事把插入的程式甩上來」

於是我甩上來了:

//	定義三個指標

node * node_1;

node * node_2;

node * node_3;

// 分配記憶體

node_3=(node *) malloc(sizeof(node));

// 插入

node_3 ->next= node_2;

node_1->next= node_3;

她拿筆戳了戳我:「你逗我呢吧,這連個初始化都沒有?!」

我:「饒了小的我吧t_t」

她:「不行,把初始化一寫」

我:

void listinit(node **head)
她:「你初始化了人家就不管啦?不銷毀啦?你不知道動態申請的結點是沒法自動**的嗎?」

我:

void listdestory(node **head)

// 釋放頭指標

(*head)=null;

}

她:「不要偷懶,把銷毀過程跟我說說」

我:「中」

她:「還有還有,你是怎麼給你的單鏈表編號的?」

我:「你看你看」

她:「再見

下面是程式及執行結果:

main.c:

#include #include #include #include "singlelinkedlist.h"

void main(void)

listprint(head);

listdestory(&head);

}

singlelinkedlist.h:

//定義節點

typedef struct node node;

void listinit(node **head)

void listdestory(node **head)

// 釋放頭指標

(*head)=null;

}int listinsert(node *head,int position,int value)

// 分配記憶體

newnode = (node *)malloc(sizeof(node));

//賦值

newnode->value=value;

//插入

newnode->next=temp->next;

temp->next=newnode;

return 1;

}void listprint(node *head)

}

執行結果:

單鏈表(合併單鏈表)

單鏈表遍歷 單鏈表遍歷是從單鏈表頭指標head開始訪問,沿著next指標所指示的方向依次訪問每乙個結點,且每個結點只能訪問依次,直到最後乙個結點為止。遍歷時注意,不要改變head指標的指向。因此一般設定另外的乙個指標變數如p,p從head開始依次訪問乙個結點,直到鍊錶結束,此時p null,完成依次...

單鏈表之排序單鏈表

package list public class sortedsinglylist extends singlylist 將values陣列中的所有物件按值大小插入 public sortedsinglylist t values 過載深拷貝,由單鏈表構建排序單鏈表 public sortedsi...

單鏈表 雙鏈表

實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的...