chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言實(shí)現(xiàn)單鏈表-增刪改查

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-05-25 15:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

鏈表是由一連串節(jié)點(diǎn)組成的數(shù)據(jù)結(jié)構(gòu),每個(gè)節(jié)點(diǎn)包含一個(gè)數(shù)據(jù)值和一個(gè)指向下一個(gè)節(jié)點(diǎn)的指針。鏈表可以在頭部和尾部插入和刪除節(jié)點(diǎn),因此可以在任何地方插入和刪除節(jié)點(diǎn),從而使其變得靈活和易于實(shí)現(xiàn)。

鏈表通常用于實(shí)現(xiàn)有序集合,例如隊(duì)列和雙向鏈表。鏈表的優(yōu)點(diǎn)是可以快速隨機(jī)訪問節(jié)點(diǎn),而缺點(diǎn)是插入和刪除操作相對(duì)慢一些,因?yàn)樾枰苿?dòng)節(jié)點(diǎn)。此外,鏈表的長(zhǎng)度通常受限于內(nèi)存空間,因此當(dāng)鏈表變得很長(zhǎng)時(shí),可能需要通過分頁或鏈表分段等方式來管理其內(nèi)存。

image-20230525150013245

下面是一套封裝好的單鏈表框架,包括創(chuàng)建鏈表、插入節(jié)點(diǎn)、刪除節(jié)點(diǎn)、修改節(jié)點(diǎn)、遍歷節(jié)點(diǎn)和清空鏈表等常見操作,其中每個(gè)節(jié)點(diǎn)存儲(chǔ)一個(gè)結(jié)構(gòu)體變量,該結(jié)構(gòu)體中包含一個(gè)名為data的int類型成員。

#include 
 #include 
 ?
 // 鏈表節(jié)點(diǎn)結(jié)構(gòu)體
 typedef struct ListNode {
     int data;                   // 節(jié)點(diǎn)數(shù)據(jù)
     struct ListNode *next;      // 下一個(gè)節(jié)點(diǎn)的指針
 } ListNode;
 ?
 // 創(chuàng)建一個(gè)新節(jié)點(diǎn)
 ListNode *createNode(int data) {
     ListNode *node = (ListNode*) malloc(sizeof(ListNode));
     node->data = data;
     node->next = NULL;
     return node;
 }
 ?
 // 在鏈表頭部插入一個(gè)新節(jié)點(diǎn)
 ListNode *insertNodeAtHead(ListNode *head, int data) {
     ListNode *node = createNode(data);
     node->next = head;
     return node;
 }
 ?
 // 在鏈表尾部插入一個(gè)新節(jié)點(diǎn)
 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;
     }
 }
 ?
 // 刪除鏈表中第一個(gè)值為data的節(jié)點(diǎn)
 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;
 }
 ?
 // 修改鏈表中第一個(gè)值為oldData的節(jié)點(diǎn)的數(shù)據(jù)為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("
");
 }
 ?
 // 清空鏈表,釋放所有節(jié)點(diǎn)的內(nèi)存空間
 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;
 }

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

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3156

    瀏覽量

    75882
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7634

    瀏覽量

    143925
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4400

    瀏覽量

    66368
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    484

    瀏覽量

    71582
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    41153
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    Mybatis自動(dòng)生成增刪改代碼

    使用 mybatis generator 自動(dòng)生成代碼,實(shí)現(xiàn)數(shù)據(jù)庫的增刪改。 1 配置Mybatis插件 在pom文件添加依賴: pluginsplugin
    的頭像 發(fā)表于 01-13 15:43 ?1548次閱讀
    Mybatis自動(dòng)生成<b class='flag-5'>增刪改</b><b class='flag-5'>查</b>代碼

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

    當(dāng)前文章介紹的設(shè)計(jì)的主要功能是利用 SQLite 數(shù)據(jù)庫實(shí)現(xiàn)寵物投喂器上傳數(shù)據(jù)的存儲(chǔ),并且支持?jǐn)?shù)據(jù)的增刪改操作。其中,寵物投喂器上傳的數(shù)據(jù)包括投喂間隔時(shí)間、水溫、剩余重量等參數(shù)。
    的頭像 發(fā)表于 08-28 11:34 ?3159次閱讀

    使用DOM對(duì)XML讀取進(jìn)行增刪改

    DOM解析XML的增刪改實(shí)現(xiàn)
    發(fā)表于 06-12 16:01

    基于SpringBoot mybatis方式的增刪改實(shí)現(xiàn)

    SpringBoot mybatis方式實(shí)現(xiàn)增刪改
    發(fā)表于 06-18 16:56

    使用jpa和thymeleaf做增刪改示例

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

    如何用php調(diào)用mysql數(shù)據(jù)庫實(shí)現(xiàn)增刪改

    php調(diào)用mysql數(shù)據(jù)庫實(shí)現(xiàn)增刪改
    發(fā)表于 04-09 12:53

    laravel框架如何進(jìn)行簡(jiǎn)單的增刪改和文件上傳

    laravel框架簡(jiǎn)單的增刪改和文件上傳
    發(fā)表于 04-26 14:13

    python是如何實(shí)現(xiàn)hbase增刪改

    hbase shell是怎樣去創(chuàng)建命名空間的?python是如何實(shí)現(xiàn)hbase增刪改的?求解
    發(fā)表于 10-19 07:26

    LINQ的增刪改源碼 v0.1

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

    C語言實(shí)現(xiàn)鏈表舉例

    所謂鏈表,就是用一組任意的存儲(chǔ)單元存儲(chǔ)線性表元素的一種數(shù)據(jù)結(jié)構(gòu)。鏈表又分為鏈表、雙向鏈表和循環(huán)鏈表
    發(fā)表于 07-11 16:40 ?87次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言實(shí)現(xiàn)</b><b class='flag-5'>單</b><b class='flag-5'>鏈表</b>舉例

    PHP數(shù)據(jù)庫教程之增刪改的數(shù)據(jù)高級(jí)操作資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是PHP數(shù)據(jù)庫教程之增刪改的數(shù)據(jù)高級(jí)操作資料免費(fèi)下載。
    發(fā)表于 07-02 17:40 ?1次下載

    SQLite數(shù)據(jù)庫增刪改

    SQLite數(shù)據(jù)庫增刪改? SQLite是一種輕量級(jí)的RDBMS(關(guān)系型數(shù)據(jù)庫管理系統(tǒng)),具有速度快、易用性高等優(yōu)點(diǎn)。雖然SQLite數(shù)據(jù)庫相對(duì)于一些大型數(shù)據(jù)庫管理系統(tǒng)而言功能上存在較多的限制
    的頭像 發(fā)表于 08-28 17:09 ?1704次閱讀

    mysql數(shù)據(jù)庫的增刪改sql語句

    MySQL是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),是許多網(wǎng)站和應(yīng)用程序的首選數(shù)據(jù)庫。在MySQL中,我們可以使用SQL(結(jié)構(gòu)化查詢語言)進(jìn)行數(shù)據(jù)的增刪改操作。本文將詳細(xì)介紹MySQL數(shù)據(jù)庫的增刪改
    的頭像 發(fā)表于 11-16 15:41 ?1916次閱讀

    數(shù)據(jù)庫mysql基本增刪改

    MySQL是一種開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),常用于Web應(yīng)用程序的數(shù)據(jù)存儲(chǔ)和管理。通過使用MySQL,用戶可以進(jìn)行數(shù)據(jù)的增刪改操作,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)的有效管理。下面將詳細(xì)介紹MySQL數(shù)據(jù)庫
    的頭像 發(fā)表于 11-16 16:35 ?2086次閱讀