色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

鏈表的基本操作

玩轉(zhuǎn)單片機(jī) ? 來源:玩轉(zhuǎn)單片機(jī) ? 作者:玩轉(zhuǎn)單片機(jī) ? 2022-12-13 10:11 ? 次閱讀

回看了一下以前寫的鏈表操作,確實有點復(fù)雜不利于初學(xué),這篇文章就換個寫法,簡單明了的介紹鏈表的操作;

第一步:定義節(jié)點結(jié)構(gòu)體,可以把它看成一個模板:

// 定義節(jié)點
typedef struct node
{
    unsigned char data;
    struct node *next;
}node_t;

第二步:初始化節(jié)點,目的就是獲取到頭節(jié)點,后續(xù)的操作都是判斷節(jié)點的同名結(jié)構(gòu)體指針是否為空,所有頭節(jié)點的head->next必須等于NULL:

// 初始化節(jié)點
node_t* node_init(unsigned char data)
{
  node_t* head=(node_t*)malloc(sizeof(node_t));
  head->data = data;
  head->next = NULL;
  return head;
}

第三步:打印節(jié)點數(shù)據(jù),用于查看節(jié)點的最新數(shù)據(jù):

// 打印鏈表
void node_printf(node_t *node)
{
  node_t *head = node;
  while(1){
    printf("data:%d
",head->data);
    if(head->next==NULL){
      return;
    }else{
      head = head->next;
    }
  };
}

第四步:尾插方式把新的節(jié)點接入鏈表,核心就是判斷節(jié)點的指針是否為空,找到最尾巴的節(jié)點,然后把新的節(jié)點接到它的后面,然后再把新的節(jié)點指針賦值為空:

// 尾插
node_t* node_end_add(node_t *node, unsigned char data)
{
  node_t *head = node;
  node_t *end = node;
  while(1){
    if(end->next!=NULL){
      end = end->next;
    }else{
      node_t* temp_node=(node_t*)malloc(sizeof(node_t));
      temp_node->data = data;
      temp_node->next = NULL;
      end->next = temp_node;
      return head;
    }
  }
}

第五步:通過尾刪的方式,把節(jié)點指針為空的節(jié)點刪除,再把它上一個節(jié)點賦值為空:

// 尾刪
node_t* node_end_del(node_t *node)
{
  node_t *head = node;
  node_t *end = node;
  node_t *temp = NULL;
  while(1){
    if(end->next!=NULL){
      temp = end;
      end = end->next;
    }else{
      free(end);
      temp->next = NULL;
      return head;
    }
  }
}

第六步:通過頭插方式,把新的節(jié)點接入到鏈表,頭插的方式并不需要賦值為空,因為它插入的下一節(jié)點,就是上一次插入的節(jié)點指針,所以只需要把上一個節(jié)點指針賦值給新加入的指針即可,注意頭插一定要返回頭節(jié)點指針,因為頭插的頭節(jié)點會隨著插入而改變:

// 頭插
node_t* node_head_add(node_t *node, unsigned char data)
{
  node_t* temp_node=(node_t*)malloc(sizeof(node_t));
  temp_node->data = data;
  temp_node->next = node;
  return temp_node;
}

第七步:通過頭刪的方式,把頭部的節(jié)點刪除,因為頭部的節(jié)點是已知的,所以只要改表一下頭節(jié)點,然后把頭部節(jié)點釋放就可以:

// 頭刪
node_t* node_head_del(node_t *node)
{
  node_t* head = node->next;
  free(node);
  return head;
}

總結(jié):尾節(jié)點操作是通過判斷節(jié)點指針是否為NULL,找到節(jié)點指針為NULL的指針,然后進(jìn)行相關(guān)操作,而頭節(jié)點直接就通過頭節(jié)點進(jìn)行相關(guān)操作,頭插和尾插最大的不同就是數(shù)據(jù)是反的,這點要注意不要搞錯;

完整代碼如下:

#include "stdio.h"
#include "stdlib.h"


// 定義節(jié)點
typedef struct node
{
    unsigned char data;
    struct node *next;
}node_t;


// 初始化節(jié)點
node_t* node_init(unsigned char data)
{
  node_t* head=(node_t*)malloc(sizeof(node_t));
  head->data = data;
  head->next = NULL;
  return head;
}


// 打印鏈表
void node_printf(node_t *node)
{
  node_t *head = node;
  while(1){
    printf("data:%d
",head->data);
    if(head->next==NULL){
      return;
    }else{
      head = head->next;
    }
  };
}


// 尾插
node_t* node_end_add(node_t *node, unsigned char data)
{
  node_t *head = node;
  node_t *end = node;
  while(1){
    if(end->next!=NULL){
      end = end->next;
    }else{
      node_t* temp_node=(node_t*)malloc(sizeof(node_t));
      temp_node->data = data;
      temp_node->next = NULL;
      end->next = temp_node;
      return head;
    }
  }
}


// 尾刪
node_t* node_end_del(node_t *node)
{
  node_t *head = node;
  node_t *end = node;
  node_t *temp = NULL;
  while(1){
    if(end->next!=NULL){
      temp = end;
      end = end->next;
    }else{
      free(end);
      temp->next = NULL;
      return head;
    }
  }
}


// 頭插
node_t* node_head_add(node_t *node, unsigned char data)
{
  node_t* temp_node=(node_t*)malloc(sizeof(node_t));
  temp_node->data = data;
  temp_node->next = node;
  return temp_node;
}


// 頭刪
node_t* node_head_del(node_t *node)
{
  node_t* head = node->next;
  free(node);
  return head;
}


int main()
{
  node_t* user_node = node_init(1);
  // 尾
  // user_node = node_end_add(user_node, 2);
  // user_node = node_end_add(user_node, 3);
  // user_node = node_end_add(user_node, 4);
  // node_printf(user_node);
  // printf("------
");
  // user_node = node_end_del(user_node);
  // user_node = node_end_del(user_node);
  // node_printf(user_node);
  // printf("------
");
  // user_node = node_end_add(user_node, 3);
  // user_node = node_end_add(user_node, 4);
  // node_printf(user_node);
  // printf("------
");
  // 頭
  user_node = node_head_add(user_node, 2);
  user_node = node_head_add(user_node, 3);
  user_node = node_head_add(user_node, 4);
  node_printf(user_node);
  printf("------
");
  user_node = node_head_del(user_node);
  user_node = node_head_del(user_node);
  node_printf(user_node);
  printf("------
");
  user_node = node_head_add(user_node, 3);
  user_node = node_head_add(user_node, 4);
  node_printf(user_node);
  printf("------
");
}

代碼寫得不是很嚴(yán)謹(jǐn),主要用于入門學(xué)習(xí),把主要思路講清楚;覺得有收獲的同學(xué)動動小手指點個贊吧,我是Noah,我們下篇推文再見!

審核編輯:湯梓紅

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

    關(guān)注

    30

    文章

    4801

    瀏覽量

    68735
  • 結(jié)構(gòu)體
    +關(guān)注

    關(guān)注

    1

    文章

    130

    瀏覽量

    10855
  • 鏈表
    +關(guān)注

    關(guān)注

    0

    文章

    80

    瀏覽量

    10572

原文標(biāo)題:通俗|操作鏈表

文章出處:【微信號:玩轉(zhuǎn)單片機(jī),微信公眾號:玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    結(jié)構(gòu)數(shù)據(jù):鏈表刪除及靜態(tài)鏈表操作(2)#結(jié)構(gòu)數(shù)據(jù)

    數(shù)據(jù)結(jié)構(gòu)與算法
    學(xué)習(xí)硬聲知識
    發(fā)布于 :2022年12月17日 20:31:42

    [2.6.1]--2.6單鏈表的基本操作1

    數(shù)據(jù)結(jié)構(gòu)
    jf_60701476
    發(fā)布于 :2023年01月23日 22:08:21

    [2.7.1]--2.7單鏈表的基本操作2

    數(shù)據(jù)結(jié)構(gòu)
    jf_60701476
    發(fā)布于 :2023年01月23日 22:09:17

    [2.3.2]--2.3.2單鏈表基本操作的實現(xiàn)

    算法數(shù)據(jù)結(jié)構(gòu)
    jf_60701476
    發(fā)布于 :2023年01月24日 20:37:11

    Linux內(nèi)核的鏈表操作

    Linux內(nèi)核的鏈表操作本文詳細(xì)分析了 2.6.x 內(nèi)核中鏈表結(jié)構(gòu)的實現(xiàn),并通過實例對每個鏈表操作接口進(jìn)行了詳盡的講解。一、
    發(fā)表于 08-29 11:13

    Linux鏈表操作心得體會

    在研究linux內(nèi)核自帶的dmatest.c驅(qū)動程序過程中發(fā)現(xiàn)有部分的鏈接操作,非常迷惑,故在此記錄下來一些查閱資料后的心得體會。
    發(fā)表于 07-26 08:15

    回調(diào)函數(shù)的相關(guān)資料推薦

    前言上文分享了一個專用的雙鏈表的基本操作示例:雙鏈表操作示例(附代碼)這里提到了一個關(guān)鍵詞:專用。與專用對應(yīng)的詞是通用。我們從字面上可以很容易理解這兩個詞,專用就是針對特定情況的,特
    發(fā)表于 12-15 06:45

    數(shù)據(jù)結(jié)構(gòu)鏈表的基本操作

    嵌入式學(xué)習(xí)基礎(chǔ)-數(shù)據(jù)結(jié)構(gòu)鏈表的基本操作鏈表節(jié)點采用結(jié)構(gòu)體的方式進(jìn)行定義,下面是最基礎(chǔ)的定義只有一個數(shù)據(jù)data,*pNext用于指向下一個節(jié)點(若為尾節(jié)點則指向NULL)。//鏈表節(jié)點
    發(fā)表于 12-22 08:05

    淺析RT-Thread中對象容器與雙鏈表操作

    操作RT-Thread的對象容器是依賴于雙鏈表(雙向循環(huán)鏈表)的,其雙鏈表的相關(guān)操作在文件rtservice.h中:其節(jié)點結(jié)構(gòu)體為:str
    發(fā)表于 05-18 14:23

    小編科普一下rtthread鏈表操作的幾個API與實用的幾個宏

    rtthread 鏈表操作的的幾個 API /* 將節(jié)點 n 插入到節(jié)點 l 的后面,如果 l 為頭節(jié)點,則插入到鏈表頭部 */rt_inline void rt_list_insert_after
    發(fā)表于 05-18 14:26

    鏈表的基本操作(含源代碼)

    發(fā)表于 11-09 16:01 ?34次下載

    C++結(jié)構(gòu)體與鏈表的實驗報告資料免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C++結(jié)構(gòu)體與鏈表的實驗報告資料免費下載。 一、目的和要求1. 掌握結(jié)構(gòu)體類型、結(jié)構(gòu)體變量的基本概念;2. 掌握結(jié)構(gòu)體指針、結(jié)構(gòu)體數(shù)組的應(yīng)用;3. 掌握鏈表的基本概念;4. 掌握鏈表的基本
    發(fā)表于 05-27 08:00 ?4次下載
    C++結(jié)構(gòu)體與<b class='flag-5'>鏈表</b>的實驗報告資料免費下載

    鏈表學(xué)習(xí)的超詳細(xì)說明(二)

    昨天跟大家分享了單鏈表的一些基本用法,今天接著繼續(xù)和大家分享單鏈表的用法,今天分享完,單鏈表操作就暫告一段落了,后面接著分享雙鏈表的學(xué)習(xí)和
    的頭像 發(fā)表于 12-24 17:33 ?789次閱讀

    鏈表學(xué)習(xí)的總結(jié)(一)

    想必大多數(shù)人和我一樣,剛開始學(xué)數(shù)據(jù)結(jié)構(gòu)中的單鏈表還是蠻吃力的,特別是后面的雙鏈表操作更是如此。還有就是在實踐代碼操作時,你又會感到無從下手,沒有思路。
    的頭像 發(fā)表于 12-24 17:35 ?3451次閱讀

    說說Go里面的鏈表操作

    按照邏輯結(jié)構(gòu)來說,他們應(yīng)該是一個挨著一個的,但是在實際存儲當(dāng)中并沒有像這樣連續(xù),可能會散落在各個內(nèi)存區(qū)里面。
    的頭像 發(fā)表于 08-17 11:07 ?1803次閱讀
    說說Go里面的<b class='flag-5'>鏈表</b><b class='flag-5'>操作</b>
    主站蜘蛛池模板: a一级一片免费观看视频| 日本zljzljzlj精品| 琪琪电影午夜理论片77网| 亚洲国产成人精品无码区APP| 91精品在线国产| 果冻传媒完整免费网站在线观看| 欧美成人猛片aaaaaaa| 亚洲精品久久久久无码AV片软件| 办公室激情在线观看| 久久免费资源福利资源站| 天美传媒MV高清免费看| a视频免费在线观看| 久久精品男人影院| 香蕉AV福利精品导航| 产传媒61国产免费| 麻豆蜜桃国语精品无码视频| 亚洲高清有码中文字| 动漫H片在线观看播放免费| 么公一夜要了我一八次视频HD| 亚洲成人免费| 国产成人在线播放视频| 欧式午夜理伦三级在线观看| 在线视频网站www色| 国产永久免费视频| 色悠久久综合| 不卡人妻无码AV中文系列APP| 麻豆免费高清完整版| 夜色福利院在线看| 国产午夜伦伦伦午夜伦| 色偷偷av男人的天堂| jizzjizz3d动漫| 美女脱光app| 影音先锋2017av天堂| 好吊射视频988gaocom| 无套内谢大学生A片| 粉嫩极品国产在线观看| 欧美怡红院视频一区二区三区| 2019中文字幕乱码免费| 久久久97丨国产人妻熟女| 亚洲一级电影| 好男人WWW免费高清视频在线|