国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

            當(dāng)前位置:首頁  >  技術(shù)干貨  > 侵入式鏈表什么意思?

            侵入式鏈表什么意思?

            來源:千鋒教育
            發(fā)布人:xqq
            時(shí)間: 2023-10-11 08:51:06 1696985466

            一、侵入式鏈表

            侵入式鏈表讓結(jié)構(gòu)體包含一個(gè)成員變量,該成員變量是一個(gè)通用的鏈表結(jié)點(diǎn)。普通的單鏈表的結(jié)點(diǎn)鏈接域存的是下一個(gè)結(jié)點(diǎn)的內(nèi)存首地址,而侵入式單鏈表的結(jié)點(diǎn)鏈接域存的是下一個(gè)結(jié)點(diǎn)的鏈接域成員變量的內(nèi)存首地址。

            typedef struct list_s {

            ??????? struct list_s *next;

            } list_t;

            typedef struct foo_s {

            ??????? int???? data;

            ??????? list_t? link;

            } foo_t;

            下面給出一個(gè)最簡(jiǎn)單的侵入式單鏈表實(shí)現(xiàn)。

            1. list.h

            ?1 #ifndef _LIST_H

            ?2 #define _LIST_H

            ?3

            ?4 #ifdef? __cplusplus

            ?5 extern “C” {

            ?6 #endif

            ?7

            ?8 /**

            ?9 ?* offsetof – offset of a structure member

            10 ?* @TYPE:?????? the type of the struct.

            11 ?* @MEMBER:???? the name of the member within the struct.

            12? */

            13 #define offsetof(TYPE, MEMBER) ((size_t)(&(((TYPE *)0)->MEMBER)))

            14

            15 /**

            16 ?* container_of – cast a member of a structure out to the containing structure

            17 ?* @ptr:??????? the pointer to the member.

            18 ?* @type:?????? the type of the container struct this is embedded in.

            19 ?* @member:???? the name of the member within the struct.

            20 ?*

            21? */

            22 #define container_of(ptr, type, member) ({????????????????????? \

            23???????? const typeof( ((type *)0)->member ) *__mptr = (ptr);??? \

            24???????? (type *)( (char *)__mptr – offsetof(type, member) );})

            25

            26 typedef struct list_s {

            27???????? struct list_s *next;

            28 } list_t;

            29

            30 typedef void (*list_handler_t)(void *arg);

            31

            32 extern void list_init(list_t **head, list_t *node);

            33 extern void list_fini(list_t *head, list_handler_t fini);

            34 extern void list_show(list_t *head, list_handler_t show);

            35

            36 #ifdef? __cplusplus

            37 }

            38 #endif

            39

            40 #endif /* _LIST_H */

            2. list.c

            ?1 /*

            ?2 ?* Generic single linked list implementation

            ?3? */

            ?4 #include

            ?5 #include “l(fā)ist.h”

            ?6

            ?7 void

            ?8 list_init(list_t **head, list_t *node)

            ?9 {

            10???????? static list_t *tail = NULL;

            11

            12???????? if (*head == NULL) {

            13???????????????? *head = tail = node;

            14???????????????? return;

            15???????? }

            16

            17???????? tail->next = node;

            18???????? tail = node;

            19???????? node->next = NULL;

            20 }

            21

            22 void

            23 list_show(list_t *head, list_handler_t show)

            24 {

            25???????? for (list_t *p = head; p != NULL; p = p->next)

            26???????????????? show(p);

            27 }

            28

            29 void

            30 list_fini(list_t *head, list_handler_t fini)

            31 {

            32???????? list_t *p = head;

            33???????? while (p != NULL) {

            34???????????????? list_t *q = p;

            35???????????????? p = p->next;

            36???????????????? fini(q);

            37???????? }

            38 }

            延伸閱讀:

            二、侵入式的好處

            一般來說,大家都會(huì)優(yōu)先選擇使用非侵入式的實(shí)現(xiàn)。因?yàn)榍秩胧綄?shí)現(xiàn)需要將一些邏輯耦合到業(yè)務(wù)代碼中,因此為人所不喜。但是在背景介紹中提到的場(chǎng)景下,侵入式實(shí)現(xiàn)有顯著的好處,從而使得侵入式實(shí)現(xiàn)被廣泛的使用。我們?cè)诖瞬辉購?qiáng)調(diào)侵入式與非侵入式的區(qū)別,主要考慮一下侵入式鏈表的優(yōu)勢(shì)有哪些。

            更好的 Data Locality

            std::list?在遍歷的過程中還需要對(duì)?T*?進(jìn)行解引用才能訪問?T?內(nèi)部的數(shù)據(jù)。但是侵入式鏈表的?next?和?T?內(nèi)部的數(shù)據(jù)是放在一起的,因此無需額外的解引用。而且由于內(nèi)存 layout 就是在一起的,所以也會(huì)獲得更好的 Data Locality。

            更友好的 API

            對(duì)于侵入式鏈表,我們拿到數(shù)據(jù)就可以將這個(gè)節(jié)點(diǎn)從鏈表中摘除,而無需再去定位其 iterator,然后再去找到對(duì)應(yīng)的容器 erase 這個(gè) iterator。

            脫離容器進(jìn)行生命周期管理

            最主要的應(yīng)用場(chǎng)景是同一份對(duì)象需要在多個(gè)容器中共享,例如在背景介紹中提到的實(shí)現(xiàn) LRU 的場(chǎng)景,又例如需要將同一份數(shù)據(jù)加入多個(gè)鏈表中。因此侵入式鏈表需要用戶自己管理數(shù)據(jù)節(jié)點(diǎn)生命周期的特性在這里就成為了一個(gè)優(yōu)點(diǎn)。

            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
            免費(fèi)領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學(xué) 138****2860 剛剛成功領(lǐng)取
            王同學(xué) 131****2015 剛剛成功領(lǐng)取
            張同學(xué) 133****4652 剛剛成功領(lǐng)取
            李同學(xué) 135****8607 剛剛成功領(lǐng)取
            楊同學(xué) 132****5667 剛剛成功領(lǐng)取
            岳同學(xué) 134****6652 剛剛成功領(lǐng)取
            梁同學(xué) 157****2950 剛剛成功領(lǐng)取
            劉同學(xué) 189****1015 剛剛成功領(lǐng)取
            張同學(xué) 155****4678 剛剛成功領(lǐng)取
            鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
            董同學(xué) 138****2867 剛剛成功領(lǐng)取
            周同學(xué) 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT
            matlab稀疏矩陣使用的是什么數(shù)據(jù)結(jié)構(gòu)?

            一、matlab稀疏矩陣使用的數(shù)據(jù)結(jié)構(gòu)Matlab中的稀疏矩陣(sparse matrix)使用的是壓縮列(Compressed Column)存儲(chǔ)方式,也叫CCS存儲(chǔ)方式,它是...詳情>>

            2023-10-11 10:35:12
            B+樹查詢的穩(wěn)定性為什么重要?

            一、B+樹查詢的穩(wěn)定性為什么重要首先最大的優(yōu)勢(shì)還是磁盤IO和范圍,從我個(gè)人的看法看,穩(wěn)定性(每次查詢必須從根走到葉子節(jié)點(diǎn))這意味行為可預(yù)估...詳情>>

            2023-10-11 09:55:33
            HDFS和raid5各有什么優(yōu)劣?

            一、HDFS和raid5的優(yōu)劣勢(shì)1、架構(gòu)設(shè)計(jì)HDFS的設(shè)計(jì)目標(biāo)是支持大數(shù)據(jù)存儲(chǔ)和分析,具有高可靠性和高可擴(kuò)展性。它使用多臺(tái)服務(wù)器組成一個(gè)集群,通過分...詳情>>

            2023-10-11 09:54:21
            C語言中List是什么?

            一、C語言中的List在C語言中,“List”是一個(gè)抽象的數(shù)據(jù)類型,表示一組有序的數(shù)據(jù)元素。List可以實(shí)現(xiàn)各種數(shù)據(jù)結(jié)構(gòu),如鏈表、數(shù)組、棧和隊(duì)列等,...詳情>>

            2023-10-11 09:36:59
            C數(shù)據(jù)結(jié)構(gòu)與算法是什么?

            一、C數(shù)據(jù)結(jié)構(gòu)與算法C數(shù)據(jù)結(jié)構(gòu)就是指一組數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)。算法就是操作數(shù)據(jù)的一組方法。數(shù)據(jù)結(jié)構(gòu)和算法是相輔相成的。數(shù)據(jù)結(jié)構(gòu)是為算法服務(wù)的,...詳情>>

            2023-10-11 09:30:58
            快速通道