C語言編寫一個鏈表
本文實(shí)例為大家分享了C語言編寫一個鏈表的具體代碼,供大家參考,具體內(nèi)容如下
鏈表
具備的基本功能:
1.創(chuàng)建頭鏈表
struct Node* Creatlist(){//創(chuàng)建鏈表頭 struct Node *headnode = (struct Node*)malloc(sizeof(struct Node));//創(chuàng)建動態(tài)內(nèi)存鏈表,指針變量 headnode->next = NULL;//鏈表初始化 return headnode; }
2.創(chuàng)建節(jié)點(diǎn)
struct Node* Creatnode(int num){//創(chuàng)建結(jié)點(diǎn),鏈表,參數(shù)數(shù)字域 struct Node* newnode = (struct Node*)malloc(sizeof(struct Node));//創(chuàng)建動態(tài)內(nèi)存鏈表,指針變量 newnode->num = num; newnode->next = NULL;//鏈表初始化 return newnode; }
3.插入節(jié)點(diǎn)
void Insetlist(struct Node* list, int num){//頭插法 struct Node* insetnode = Creatnode(num); if (list != NULL){ insetnode->next = list->next; list->next = insetnode; } else{ printf("節(jié)點(diǎn)不存在\n"); } } void Insetlists(struct Node* headnode, int n, int num){//在n節(jié)點(diǎn)處插入,參數(shù)頭節(jié)點(diǎn),在第n個節(jié)點(diǎn)處插,插入的數(shù)據(jù)num int i = 1; struct Node *t = headnode; while (i < n&& t!= NULL){ t = t->next; i++; } if (t != NULL){ struct Node* insetnode = Creatnode(num); insetnode->next = t->next; t->next = insetnode; } else{ printf("節(jié)點(diǎn)不存在\n"); } }
4.修改節(jié)點(diǎn)
void Modifynode(struct Node* headnode, int n){//修改節(jié)點(diǎn),參數(shù)鏈表,修改的第n個節(jié)點(diǎn) struct Node* list = headnode; int i = 0; while (i < n&&list != NULL){ list = list->next; i++; } if (list != NULL){ printf("請輸入你要修改的值\n"); int j = 0; scanf("%d", &j); list->num = j; } else{ printf("節(jié)點(diǎn)不存在\n"); } }
5.刪除節(jié)點(diǎn)
定義兩個指針,一個指向刪除節(jié)點(diǎn)的上一個節(jié)點(diǎn),一個指向要刪除的節(jié)點(diǎn)
void Deletnode(struct Node* headnode, int n){//刪除第n個節(jié)點(diǎn), int i = 1; struct Node *strat = headnode; struct Node *end = headnode->next; while (i < n&&end != NULL){ strat = strat->next; end = end->next; i++; } if (end != NULL){ strat->next = end->next; free(end); } else{ printf("節(jié)點(diǎn)不存在\n"); } }
6.打印節(jié)點(diǎn)
void Printnode(struct Node* headnode){//打印節(jié)點(diǎn) struct Node* list = headnode; while ((list->next) != NULL){ list = list->next; printf("%d\t", list->num); } printf("\n"); }
7.主函數(shù)
int main(){ struct Node* list = Creatlist(); Insetlists(list, 1, 1); Printnode(list); int i = 0; printf("請輸入修改哪個節(jié)點(diǎn)\n"); scanf("%d", &i); Modifynode(list, i); Printnode(list); printf("請輸入刪除哪個節(jié)點(diǎn)\n"); int n = 0; scanf("%d", &n); Deletnode(list, n); Printnode(list); system("pause"); return 0; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 用C語言實(shí)現(xiàn)單鏈表的各種操作(一)
- C語言之單鏈表的插入、刪除與查找
- C語言單循環(huán)鏈表的表示與實(shí)現(xiàn)實(shí)例詳解
- C語言實(shí)現(xiàn)帶頭結(jié)點(diǎn)的鏈表的創(chuàng)建、查找、插入、刪除操作
- c語言鏈表基本操作(帶有創(chuàng)建鏈表 刪除 打印 插入)
- C語言單向鏈表的表示與實(shí)現(xiàn)實(shí)例詳解
- C語言實(shí)現(xiàn)單鏈表逆序與逆序輸出實(shí)例
- C語言創(chuàng)建和操作單鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)例教程
- C語言雙向鏈表的表示與實(shí)現(xiàn)實(shí)例詳解
- C語言實(shí)現(xiàn)雙向鏈表
相關(guān)文章
詳解C++中實(shí)現(xiàn)繼承string類的MyString類的步驟
這篇文章主要介紹了C++中實(shí)現(xiàn)繼承string類的MyString類的步驟,其中的要點(diǎn)是要實(shí)現(xiàn)運(yùn)算符的重載,需要的朋友可以參考下2016-04-04探討:用兩個棧實(shí)現(xiàn)一個隊(duì)列(我作為面試官的小結(jié))
作為面試官的我,經(jīng)常拿這道用兩個棧實(shí)現(xiàn)一個隊(duì)列的面試題來考面試者,通過對面試者的表現(xiàn)和反應(yīng),有一些統(tǒng)計(jì)和感受,在此做個小結(jié)2013-05-05C語言實(shí)現(xiàn)超市計(jì)價(jià)收款系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)超市計(jì)價(jià)收款系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C語言報(bào)錯:Buffer Overflow的原因和解決辦法
Buffer Overflow是C語言中常見且危險(xiǎn)的內(nèi)存錯誤之一,它通常在程序試圖向緩沖區(qū)(如數(shù)組或內(nèi)存塊)寫入超過其容量的數(shù)據(jù)時(shí)發(fā)生,本文將詳細(xì)介紹Buffer Overflow的產(chǎn)生原因,提供多種解決方案,需要的朋友可以參考下2024-07-07C++ 將文件數(shù)據(jù)一次性加載進(jìn)內(nèi)存實(shí)例代碼
這篇文章主要介紹了C++ 將文件數(shù)據(jù)一次性加載進(jìn)內(nèi)存實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05