Linux下用單鏈表實現乙個電話本

2021-08-18 06:12:06 字數 4366 閱讀 4497

完成了鍊錶的學習,我們可以嘗試寫一些小的案例練習鍊錶的操作。

下面我來為大家介紹用單鏈表實現乙個簡單的**本程式。

2.刪除聯絡人

3.修改聯絡人

4.查詢聯絡人

5.檢視所有聯絡人

6.清空聯絡人

而修改練習人又可能包含以下選項:

(1)修改姓名

(2)修改性別

(3)修改年齡

(4)修改**號碼

(5)修改位址

分析到這兒,我們就可以著手寫**了。

標頭檔案:

#pragma

#include

#include

#include

#include

#define testtype printf("\n################################# %s #############################\n",__function__)

typedef struct booknode booknode;

//初始化**本

void booklistinit(booknode** phead);

//列印**本

void booklistprint(booknode* head, const

char* msg);

//插入聯絡人

void booklistinsert(booknode** phead,char* name,char* gender,int age,char* telephone,char* address);

//尋找聯絡人的位置

booknode* booklistfindpos(booknode* phead, char* to_find);

//刪除聯絡人

void booklisterase(booknode** phead, char* to_delete);

//查詢聯絡人

void booklistfind(booknode* phead, char* to_find);

//銷毀**本

void booklistdestroy(booknode** phead);

//更改聯絡人資訊

void booklistchange(booknode** phead, char* to_change, int flag, char* newmsg);

//選單

void telephonebookmenu();

具體實現
#include

"book.h"

void booklistinit(booknode** phead)

*phead =

null;

}void destroynode(booknode* node)

//建立乙個新的聯絡人節點

booknode* createmum(char* uname,char* ugender,int uage,char* utelephone,char* uaddress)

//存入將練習人資訊儲存到節點中

strcpy(new_node->name,uname);

strcpy(new_node->gender,ugender);

new_node->age = uage;

strcpy(new_node->telephone,utelephone);

strcpy(new_node->address,uaddress);

new_node->next =

null;

return new_node;

}//列印**本

void booklistprint(booknode* head, const char* msg)

for(;cur !=

null;cur = cur->next)

return;

}//將聯絡人資訊插入鍊錶中

void booklistinsert(booknode** phead,char* name,char* gender,int age,char* telephone,char* address)

if(*phead ==

null)

booknode* cur =

*phead;

while(cur->next !=

null)

//不是空鍊錶,找到最後乙個節點,將新節點查到該節點之後

cur->next = createmum(name,gender,age,telephone,address);

return;

}booknode* booklistfindpos(booknode* phead, char* to_find)

booknode* cur = phead;

while(cur !=

null)

cur = cur->next;

}return

null;

}//刪除聯絡人節點

void booklisterase(booknode** phead, char* to_delete)

if(*phead ==

null)

booknode* pos = booklistfindpos(*phead,to_delete);

if(pos ==

null)

if( pos->next !=

null)

if(pos->next ==

null)

destroynode(pos);

cur->next =

null;

return;

}}//查詢聯絡人,並列印具體資訊

void booklistfind(booknode* phead, char* to_find)

booknode* cur = phead;

while(cur !=

null)

cur = cur->next;

}printf("[ 抱歉,沒有找到聯絡人! ]\n");

return;

}void booklistdestroy(booknode** phead)

if(*phead ==

null)

while((*phead)!=

null)

return;

}void booklistchange(booknode** phead,char* to_change,int flag,char* newmsg)

if(*phead ==

null)

booknode* pos = booklistfindpos(*phead, to_change);

if(pos ==

null)

switch(flag)

return;

}void telephonebookmenu()

接下來是主函式:

int main()

break;

case

2: break;

case

3: break;

case

4: break;

case

5: break;

case

6: break;}}

}

雙手奉上,makefile.

telephone_book:book.c main.c

gcc -g $^ -o $@

.phony:clean

clean:

rm telephone_book

大功告成!

最後,還有一些小建議,為了便於程式的除錯,我們最好在每個函式完成之後,都單獨寫乙個測試函式,例如:

//booklistinsert的測試函式

testbooklistinsert()

int main()

這樣可以極大程度的減少我們在後期除錯的複雜度。

這是我自己胡亂琢磨的乙個小案例,如果有什麼bug或者不妥之處,歡迎發郵件到我的郵箱 ( [email protected] ) 批評指正。

php實現乙個單鏈表

單鏈表,節點只有乙個指標域的鍊錶。節點包括資料域和指標域。鍊錶乙個很重要的特性,就是這個頭節點 head。它絕對不能少,每次遍歷都要從它開始,並且不能移動頭節點,應該用乙個變數去代替他移動。腦袋裡要有鍊錶的結構。這是關鍵。來一段 class node 鍊錶有幾個元素 function countno...

反轉乙個單鏈表

思路二 反轉乙個鍊錶 示例 結構體定義 先對原鍊錶做頭刪操作,再對新鍊錶做頭插定義乙個新head頭指標,標記為newhead,將它初始為null,並非指向null,最後我們選擇返回這個newhead指標作為新鍊錶的頭指標。定義乙個結點node作為 臨時中轉站 初始化與否並無大影響。進行迴圈遍歷鍊錶各...

定義乙個單鏈表

鍊錶是一種物理儲存結構上非連續 非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的 鍊錶是由乙個乙個的節點相連線的,每乙個節點都是乙個物件,都有兩個屬性 data,next 根據鍊錶的結構可以分為 1.帶頭 不帶頭 2.單向 雙向 3.迴圈 非迴圈 這些組合起來就有8種結構 編寫乙...