您好,登錄后才能下訂單哦!
本篇內容主要講解“C語言怎么實現單鏈表的基本功能”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言怎么實現單鏈表的基本功能”吧!
1.首先簡單了解一下鏈表的概念:
要注意的是鏈表是一個結構體實現的一種線性表,它只能從前往后,不可以從后往前(因為next只保存下一個節點的地址).在實現單鏈表的操作時,需要用指針來操作.很簡單,注釋寫的很詳細,歡迎大家指正哈哈哈哈~之前寫的太爛了重新寫了一下.....
2.代碼展示:
#include <stdio.h> #include <assert.h> #include <stdlib.h> typedef struct linklist { int data; struct linklist* next; }node; //目錄 //1.動態申請節點 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.動態申請節點 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;//創建頭指針 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的地址,不方便演示,下面會演示 Insertlinstafter(Findpos(plist, 4), 5);//在4后面插入5,用到上面的Findpos函數 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.測試結果:
a.先創建了頭指針plist
b.尾插1 2 3 4 5
c. 尾刪元素5
d.首插元素0
e.首刪元素0
f.在元素4 后面插入5
g.刪除4元素后面的5
h.銷毀鏈表
到此,相信大家對“C語言怎么實現單鏈表的基本功能”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。