日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-单链表(C语言代码)

發(fā)布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-单链表(C语言代码) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

數(shù)據(jù)結(jié)構(gòu)純屬新手,小白一枚,歡迎批評指正!
直接上代碼OVO!

定義結(jié)構(gòu)體

typedef struct Node {int data; //數(shù)據(jù)域struct Node* next; //指針域 }Node;

單鏈表只有數(shù)據(jù)域和指向下一個結(jié)點(diǎn)的指針域。

創(chuàng)建鏈表

//創(chuàng)建鏈表 Node* initList() {Node* L = (Node*)malloc(sizeof(Node)); //創(chuàng)建頭指針L->data = 0;L->next = NULL;//剛創(chuàng)建,頭指針指向空!return L; }

頭插法

//頭插法,從頭插入類似于棧 void headInsert(Node* L,int data) {Node* node = (Node*)malloc(sizeof(Node));node->data = data;node->next = L->next;L->next = node;L->data++;//插入后鏈表長度+1 }

尾插法

//尾插法 void tailInsert(Node* L, int data) {Node* node =L;for (int i = 0; i < L-> data; i++) {node = node->next;}Node* n = (Node*)malloc(sizeof(Node));n->data = data;n->next = NULL;node->next = n;L->data++;//插入后鏈表長度+1 }

刪除結(jié)點(diǎn)

//刪除鏈表結(jié)點(diǎn) int deleteList(Node* L, int data) {Node* preNode = L;Node* node = L->next;while (node) {if (node->data == data) {preNode->next = node->next;free(node);L->data--;//刪除后鏈表長度-1return TRUE;}preNode = node;node = node->next;}return FALSE; }

遍歷鏈表

//遍歷鏈表 void printList(Node* L) {Node* node = L->next;while (node){printf("node=%d\n",node->data);node = node->next;} }

全部代碼:

#include <stdio.h> #include <stdlib.h>#define TRUE 1 #define FALSE 0typedef struct Node {int data; //數(shù)據(jù)域struct Node* next; //指針域 }Node;//創(chuàng)建鏈表 Node* initList() {Node* L = (Node*)malloc(sizeof(Node)); //創(chuàng)建頭指針L->data = 0;L->next = NULL;//剛創(chuàng)建,頭指針指向空!return L; }//頭插法,從頭插入類似于棧 void headInsert(Node* L,int data) {Node* node = (Node*)malloc(sizeof(Node));node->data = data;node->next = L->next;L->next = node;L->data++;//插入后鏈表長度+1 }//尾插法 void tailInsert(Node* L, int data) {Node* node =L;for (int i = 0; i < L-> data; i++) {node = node->next;}Node* n = (Node*)malloc(sizeof(Node));n->data = data;n->next = NULL;node->next = n;L->data++;//插入后鏈表長度+1 }//刪除鏈表結(jié)點(diǎn) int deleteList(Node* L, int data) {Node* preNode = L;Node* node = L->next;while (node) {if (node->data == data) {preNode->next = node->next;free(node);L->data--;//刪除后鏈表長度-1return TRUE;}preNode = node;node = node->next;}return FALSE; }//遍歷鏈表 void printList(Node* L) {Node* node = L->next;while (node){printf("node=%d\n",node->data);node = node->next;} }int main(void) {Node* L = initList();headInsert(L, 1);headInsert(L, 2);headInsert(L, 3);tailInsert(L, 4);tailInsert(L, 5);tailInsert(L, 6);printList(L);//測試刪除不存在的結(jié)點(diǎn)if (deleteList(L, 10)) {printf("success delete 10\n");}else {printf("fail delete 10\n");}printf("表長:%d\n", L->data);//測試刪除存在的結(jié)點(diǎn)if (deleteList(L, 6)) {printf("success delete 6\n");}else {printf("fail delete 6\n");}printf("表長:%d\n", L->data);printList(L);return 0; }

運(yùn)行截圖:

總結(jié)
線性表的鏈?zhǔn)酱鎯ο啾扔陧樞虼鎯?#xff0c;有兩大優(yōu)勢:
1.鏈?zhǔn)酱鎯Φ臄?shù)據(jù)元素在物理結(jié)構(gòu)沒有限制,當(dāng)內(nèi)存空間中沒有足夠大的連續(xù)的內(nèi)存空間供順序表使用時,可能使用鏈表能解決問題。(鏈表每次申請的都是單個數(shù)據(jù)元素的存儲空間,可以利用上一些內(nèi)存碎片)
2.鏈表中結(jié)點(diǎn)之間采用指針進(jìn)行鏈接,當(dāng)對鏈表中的數(shù)據(jù)元素實(shí)行插入或者刪除操作時,只需要改變指針的指向,無需像順序表那樣移動插入或刪除位置的后續(xù)元素,簡單快捷。

鏈表和順序表相比,不足之處在于,當(dāng)做遍歷操作時,由于鏈表中結(jié)點(diǎn)的物理位置不相鄰,使得計(jì)算機(jī)查找起來相比較順序表,速度要慢。

總結(jié)

以上是生活随笔為你收集整理的数据结构-单链表(C语言代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。