那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言實現單鏈表-增刪改查

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2023-05-25 15:05 ? 次閱讀

鏈表是由一連串節點組成的數據結構,每個節點包含一個數據值和一個指向下一個節點的指針。鏈表可以在頭部和尾部插入和刪除節點,因此可以在任何地方插入和刪除節點,從而使其變得靈活和易于實現。

鏈表通常用于實現有序集合,例如隊列和雙向鏈表。鏈表的優點是可以快速隨機訪問節點,而缺點是插入和刪除操作相對慢一些,因為需要移動節點。此外,鏈表的長度通常受限于內存空間,因此當鏈表變得很長時,可能需要通過分頁或鏈表分段等方式來管理其內存。

image-20230525150013245

下面是一套封裝好的單鏈表框架,包括創建鏈表、插入節點、刪除節點、修改節點、遍歷節點和清空鏈表等常見操作,其中每個節點存儲一個結構體變量,該結構體中包含一個名為data的int類型成員。

#include 
 #include 
 ?
 // 鏈表節點結構體
 typedef struct ListNode {
     int data;                   // 節點數據
     struct ListNode *next;      // 下一個節點的指針
 } ListNode;
 ?
 // 創建一個新節點
 ListNode *createNode(int data) {
     ListNode *node = (ListNode*) malloc(sizeof(ListNode));
     node->data = data;
     node->next = NULL;
     return node;
 }
 ?
 // 在鏈表頭部插入一個新節點
 ListNode *insertNodeAtHead(ListNode *head, int data) {
     ListNode *node = createNode(data);
     node->next = head;
     return node;
 }
 ?
 // 在鏈表尾部插入一個新節點
 ListNode *insertNodeAtTail(ListNode *head, int data) {
     ListNode *node = createNode(data);
     if(head == NULL) {
         return node;
     } else {
         ListNode *current = head;
         while(current->next != NULL) {
             current = current->next;
         }
         current->next = node;
         return head;
     }
 }
 ?
 // 刪除鏈表中第一個值為data的節點
 ListNode *deleteNode(ListNode *head, int data) {
     if(head == NULL) {
         return NULL;
     }
     if(head->data == data) {
         ListNode *current = head;
         head = head->next;
         free(current);
         return head;
     }
     ListNode *current = head;
     while(current->next != NULL && current->next->data != data) {
         current = current->next;
     }
     if(current->next != NULL) {
         ListNode *deleteNode = current->next;
         current->next = deleteNode->next;
         free(deleteNode);
     }
     return head;
 }
 ?
 // 修改鏈表中第一個值為oldData的節點的數據為newData
 void updateNode(ListNode *head, int oldData, int newData) {
     ListNode *current = head;
     while(current != NULL) {
         if(current->data == oldData) {
             current->data = newData;
             break;
         } else {
             current = current->next;
         }
     }
 }
 ?
 // 遍歷鏈表
 void traverseList(ListNode *head) {
     ListNode *current = head;
     while(current != NULL) {
         printf("%d ", current->data);
         current = current->next;
     }
     printf("
");
 }
 ?
 // 清空鏈表,釋放所有節點的內存空間
 void clearList(ListNode *head) {
     while(head != NULL) {
         ListNode *current = head;
         head = head->next;
         free(current);
     }
 }
 ?
 // 示例程序
 int main() {
     ListNode *head = NULL;
     head = insertNodeAtHead(head, 1);
     head = insertNodeAtHead(head, 2);
     head = insertNodeAtTail(head, 3);
     traverseList(head);
     head = deleteNode(head, 2);
     traverseList(head);
     updateNode(head, 1, 4);
     traverseList(head);
     clearList(head);
     return 0;
 }

在上述代碼中,定義了一個節點結構體ListNode,其中包含一個int類型的data成員和一個指向下一個節點的指針。接著定義了用于創建新節點、插入節點、刪除節點、修改節點、遍歷節點和清空鏈表等操作的子函數,并在main函數中演示了這些操作的使用例子。在使用完鏈表后一定要調用clearList函數釋放內存空間。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內存
    +關注

    關注

    8

    文章

    3055

    瀏覽量

    74334
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137726
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62977
  • 指針
    +關注

    關注

    1

    文章

    481

    瀏覽量

    70611
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40232
收藏 人收藏

    評論

    相關推薦

    Qt(C++)使用SQLite數據庫完成數據增刪改

    當前文章介紹的設計的主要功能是利用 SQLite 數據庫實現寵物投喂器上傳數據的存儲,并且支持數據的增刪改操作。其中,寵物投喂器上傳的數據包括投喂間隔時間、水溫、剩余重量等參數。
    的頭像 發表于 06-21 09:10 ?1927次閱讀
    Qt(<b class='flag-5'>C</b>++)使用SQLite數據庫完成數據<b class='flag-5'>增刪改</b><b class='flag-5'>查</b>

    Mybatis自動生成增刪改代碼

    使用 mybatis generator 自動生成代碼,實現數據庫的增刪改。 1 配置Mybatis插件 在pom文件添加依賴: pluginsplugin
    的頭像 發表于 01-13 15:43 ?1159次閱讀
    Mybatis自動生成<b class='flag-5'>增刪改</b><b class='flag-5'>查</b>代碼

    Qt(C++)使用SQLite數據庫完成數據增刪改

    當前文章介紹的設計的主要功能是利用 SQLite 數據庫實現寵物投喂器上傳數據的存儲,并且支持數據的增刪改操作。其中,寵物投喂器上傳的數據包括投喂間隔時間、水溫、剩余重量等參數。
    的頭像 發表于 08-28 11:34 ?2003次閱讀

    使用DOM對XML讀取進行增刪改

    DOM解析XML的增刪改實現
    發表于 06-12 16:01

    基于SpringBoot mybatis方式的增刪改實現

    SpringBoot mybatis方式實現增刪改
    發表于 06-18 16:56

    使用jpa和thymeleaf做增刪改示例

    【本人禿頂程序員】springboot專輯:springboot+jpa+thymeleaf增刪改示例
    發表于 04-01 11:49

    如何用php調用mysql數據庫實現增刪改

    php調用mysql數據庫實現增刪改
    發表于 04-09 12:53

    laravel框架如何進行簡單的增刪改和文件上傳

    laravel框架簡單的增刪改和文件上傳
    發表于 04-26 14:13

    python是如何實現hbase增刪改

    hbase shell是怎樣去創建命名空間的?python是如何實現hbase增刪改的?求解
    發表于 10-19 07:26

    LINQ的增刪改源碼 v0.1

    LINQ的增刪改源碼 v0.1.rar 聲明:            
    發表于 02-08 14:21 ?20次下載

    C語言實現鏈表舉例

    所謂鏈表,就是用一組任意的存儲單元存儲線性表元素的一種數據結構。鏈表又分為鏈表、雙向鏈表和循環鏈表
    發表于 07-11 16:40 ?87次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言實現</b><b class='flag-5'>單</b><b class='flag-5'>鏈表</b>舉例

    PHP數據庫教程之增刪改的數據高級操作資料免費下載

    本文檔的主要內容詳細介紹的是PHP數據庫教程之增刪改的數據高級操作資料免費下載。
    發表于 07-02 17:40 ?1次下載

    SQLite數據庫增刪改

    SQLite數據庫增刪改? SQLite是一種輕量級的RDBMS(關系型數據庫管理系統),具有速度快、易用性高等優點。雖然SQLite數據庫相對于一些大型數據庫管理系統而言功能上存在較多的限制
    的頭像 發表于 08-28 17:09 ?1259次閱讀

    mysql數據庫的增刪改sql語句

    MySQL是一種常用的關系型數據庫管理系統,是許多網站和應用程序的首選數據庫。在MySQL中,我們可以使用SQL(結構化查詢語言)進行數據的增刪改操作。本文將詳細介紹MySQL數據庫的增刪改
    的頭像 發表于 11-16 15:41 ?1325次閱讀

    數據庫mysql基本增刪改

    MySQL是一種開源的關系型數據庫管理系統,常用于Web應用程序的數據存儲和管理。通過使用MySQL,用戶可以進行數據的增刪改操作,從而實現對數據的有效管理。下面將詳細介紹MySQL數據庫
    的頭像 發表于 11-16 16:35 ?1583次閱讀
    全讯网娱乐353788| 六十甲子24山吉凶| 百家乐官网园首选海立方| 百家乐心态研究| 网络百家乐公式打法| 威尼斯人娱乐城博彩网| 大发888娱乐场游戏| 德钦县| E利博娱乐城| 百家乐官网投注外挂| 海尔百家乐官网的玩法技巧和规则| 百家乐平台开发| 赌百家乐的计划跟策略| 皇冠现金网安全吗| 百家乐官网永利娱乐城| 成人百家乐官网的玩法技巧和规则| 棋牌王中王| 大家旺百家乐官网娱乐城| 百家乐官网庄闲对冲| 百家乐投注网站| 威尼斯人娱乐城真人游戏| 兴安县| 广州百家乐官网赌场娱乐网规则 | 百家乐官网娱乐平台真人娱乐平台| 百家乐开户博彩论坛| 大发888手机版下载安装| 百家乐官网不倒翁注码| 旺财转运24妙法| 威尼斯人娱乐城 老品牌值得您信赖 | 如何打百家乐官网的玩法技巧和规则 | 百家乐有方法赚反水| 威尼斯人娱乐城网址是| 杭锦旗| 免费百家乐官网倍投| 百家乐定位胆技巧| 太阳城百家乐官网投注| 有24天星名的罗盘| 大发888娱乐城手机| 百家乐官网破解策略| 新锦江百家乐娱乐场| 太阳城娱乐网|