C語言實(shí)現(xiàn)單鏈表的基本功能詳解
1.首先簡單了解一下鏈表的概念:
要注意的是鏈表是一個(gè)結(jié)構(gòu)體實(shí)現(xiàn)的一種線性表,它只能從前往后,不可以從后往前(因?yàn)閚ext只保存下一個(gè)節(jié)點(diǎn)的地址).在實(shí)現(xiàn)單鏈表的操作時(shí),需要用指針來操作.很簡單,注釋寫的很詳細(xì),歡迎大家指正哈哈哈哈~之前寫的太爛了重新寫了一下.....
2.代碼展示:
#include <stdio.h> #include <assert.h> #include <stdlib.h> typedef struct linklist { int data; struct linklist* next; }node; //目錄 //1.動(dòng)態(tài)申請(qǐng)節(jié)點(diǎn) node* Creatnode(int x); //2.單鏈表的尾插 void PushBack(node** plist, int x); //3.單鏈表的打印 void Printlist(node** plist); //4.單鏈表尾刪 void Popback(node** plist); //5.單鏈表的頭插 void PushFront(node** plist, int x); //6.單鏈表的頭刪 void PopFrount(node** plist); //7.單鏈表的查找 node* Findpos(node* plist, int x); //8.單鏈表在pos位置之后插入x void Insertlinstafter(node* pos, int x); //9.單鏈表刪除pos位置之后的元素 void PopPosAfter(node* pos); //10.單鏈表的銷毀 void Destorylist(node** plist); //1.動(dòng)態(tài)申請(qǐng)節(jié)點(diǎn) node* Creatnode(int x) { node* t = (node*)malloc(sizeof(node)); if (t == NULL) { assert(0); return NULL; } else { t->next = NULL; t->data = x; return t; } } //2.單鏈表的尾插 void PushBack(node** plist, int x) { assert(plist); if (*plist == NULL) { *plist = Creatnode(x); } else { node* p = *plist; while (p->next) { p = p->next; } p->next = Creatnode(x); } } //3.單鏈表的打印 void Printlist(node** plist) { assert(plist); node* p =* plist; while (p) { printf("%d ", p->data); p = p->next; } } //4.單鏈表尾刪 void Popback(node** plist) { assert(plist); if (*plist == NULL) { return NULL; } node* p = *plist; node* q = NULL; while (p->next) { q = p; p = p->next; } q->next =NULL; free(p); } //5.單鏈表的頭插 void PushFront(node** plist, int x) { assert(plist); node* t = Creatnode(x); if (NULL == *plist) { *plist = t; } else { t->next = *plist; *plist = t; } } //6.單鏈表的頭刪 void PopFrount(node** plist) { assert(plist); if (plist == NULL) { return NULL; } else { node* p = *plist; *plist = p->next; free(p); } } //7.單鏈表的查找 node* Findpos(node* plist, int x) { node* cur = plist; while (cur) { if (cur->data == x) { return cur; } cur = cur->next; } return NULL; } //8.單鏈表在pos位置之后插入x void Insertlinstafter(node* pos, int x) { assert(pos); if (NULL == pos) { return ; } node* t = Creatnode(x); t->next = pos->next; pos->next = t; } //9.單鏈表刪除pos位置之后的元素 void PopPosAfter(node* pos) { assert(pos); if (pos->next == NULL) { return; } else{ node* p = pos->next; pos->next = p->next; free(p); } } //10.單鏈表的銷毀 void Destorylist(node** plist) { assert(plist); node* p = *plist; while (p) { *plist = p->next; free(p); p = *plist; } *plist = NULL; } void test1() { node* plist=NULL;//創(chuàng)建頭指針 PushBack(&plist, 1);//尾插元素 PushBack(&plist, 2); PushBack(&plist, 3); PushBack(&plist, 4); PushBack(&plist, 5); Printlist(&plist);//打印鏈表元素 1 2 3 4 5 printf("\n"); Popback(&plist); //尾刪元素 PushFront(&plist, 0);//首插元素0 Printlist(&plist);//打印鏈表 0 1 2 3 4 printf("\n"); PopFrount(&plist);//首刪元素0 Printlist(&plist);//打印鏈表 1 2 3 4 printf("\n"); Findpos(plist,1);//尋找鏈表中1的地址,不方便演示,下面會(huì)演示 Insertlinstafter(Findpos(plist, 4), 5);//在4后面插入5,用到上面的Findpos函數(shù) Printlist(&plist);//打印鏈表 1 2 3 4 5 printf("\n"); PopPosAfter(Findpos(plist, 4));//刪除指定位置后面的元素(刪除4后面的5) Printlist(&plist);//打印鏈表 1 2 3 4 printf("\n"); Destorylist(&plist);//銷毀鏈表 Printlist(&plist);//打印鏈表 } void test() { test1(); } int main() { test(); return 0; }
3.測(cè)試結(jié)果:
a.先創(chuàng)建了頭指針plist
b.尾插1 2 3 4 5
c. 尾刪元素5
d.首插元素0
e.首刪元素0
f.在元素4 后面插入5
g.刪除4元素后面的5
h.銷毀鏈表
到此這篇關(guān)于C語言實(shí)現(xiàn)單鏈表的基本功能詳解的文章就介紹到這了,更多相關(guān)單鏈表基本功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用C語言實(shí)例描述程序中的內(nèi)聚和耦合問題
這篇文章主要介紹了用C語言實(shí)例描述程序中的內(nèi)聚和耦合,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08C++服務(wù)器和客戶端交互的項(xiàng)目實(shí)踐
本文主要介紹了C++服務(wù)器和客戶端交互的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07C語言字符串函數(shù)模擬實(shí)現(xiàn)流程介紹
字符串函數(shù)(String processing function)也叫字符串處理函數(shù),指的是編程語言中用來進(jìn)行字符串處理的函數(shù),如C,pascal,Visual以及LotusScript中進(jìn)行字符串拷貝,計(jì)算長度,字符查找等的函數(shù)2022-09-09C語言修煉之路一朝函數(shù)思習(xí)得?模塊思維世間生上篇
函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語句。每個(gè)?C?程序都至少有一個(gè)函數(shù),即主函數(shù)?main()?,所有簡單的程序都可以定義其他額外的函數(shù)2022-03-03Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫采集
這篇文章主要為大家介紹了Qt中是如何實(shí)現(xiàn)通用數(shù)據(jù)庫采集的,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt有一定幫助,感興趣的小伙伴可以了解一下2022-03-03C語言每日練習(xí)之動(dòng)態(tài)顯示系統(tǒng)時(shí)間
這篇文章主要介紹了C語言動(dòng)態(tài)顯示系統(tǒng)時(shí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11