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

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

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

可pop任意字節(jié)的隊列

冬至子 ? 來源:技術(shù)鋪?zhàn)?/span> ? 作者:chasen ? 2023-01-18 15:02 ? 次閱讀

前言

在一般的鏈表中,數(shù)據(jù)是存儲在node節(jié)點(diǎn)中的,每次pop出來的數(shù)據(jù)是以node為單位的。這篇文章,我們對一般的鏈表進(jìn)行改進(jìn),可以pop任意字節(jié)的數(shù)據(jù),也就是說,每次pop的數(shù)據(jù)數(shù)據(jù)是以任意字節(jié)為單位的,可以pop 10Byte,也可以500Byte,這種方法比較靈活。

原理

針對一般的鏈表,我們做的改進(jìn)主要是在每個node中加了一個字段pos,用來標(biāo)記這個node的data的下標(biāo)。比如說這個node打data數(shù)據(jù)大小為10,它的pos就為0,這時候就表示這10個字節(jié)都可以用。然后可以pop 2個字節(jié),這時候pos就成了2,表示還有8個字節(jié)可以用。

實(shí)現(xiàn)的話,我們可以定義這樣的結(jié)構(gòu)體:

typedef struct Node
{
    int id;             //每個link的標(biāo)識符
    int pos;            //記錄node數(shù)據(jù)的下標(biāo)
    int size;           //記錄node數(shù)據(jù)的總大小
    int num;            //記錄link的node個數(shù),僅頭結(jié)點(diǎn)使用
    char *addr;         //數(shù)據(jù)data
    struct Node *next;  //next node
} Node;

對于具體的原理實(shí)現(xiàn),我們可以用一張圖片來清楚地說明一下:

2.jpg

例子

下面是一個完整的的代碼例子供參考,可以直接運(yùn)行:

#include 
#include 
#include 
#include 
#include 


class PkgLink
{
public:
    PkgLink() {m_link_header.clear();}
    ~PkgLink() {}


    typedef struct Node
    {
        int id;
        int pos;
        int size;
        int num; //for head;
        char *addr;
        struct Node *next;
    } Node;


    std::vector

審核編輯:劉清

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

    評論

    相關(guān)推薦

    SIMPLIS POP仿真分析

    要說POP (Periodic operating Point )仿真在Simplis里面算比較特殊的功能了,只有在Simplis模式下才可以使用POP 仿真。所以啟動POP仿真必須在Simplis模式下。
    的頭像 發(fā)表于 11-10 15:11 ?3123次閱讀
    SIMPLIS <b class='flag-5'>POP</b>仿真分析

    探索字節(jié)隊列的魔法:多類型支持、函數(shù)重載與線程安全

    探索字節(jié)隊列的魔法:多類型支持、函數(shù)重載與線程安全代碼難度指數(shù):文章學(xué)習(xí)重點(diǎn):參數(shù)宏的使用技巧一、引言在嵌入式系統(tǒng)和實(shí)時應(yīng)用中,數(shù)據(jù)的傳輸和處理是至關(guān)重要的。字節(jié)隊列(ByteQueu
    的頭像 發(fā)表于 11-15 01:08 ?805次閱讀
    探索<b class='flag-5'>字節(jié)</b><b class='flag-5'>隊列</b>的魔法:多類型支持、函數(shù)重載與線程安全

    Freertos隊列項里的字節(jié)長度是否可以獲取?

    最近剛學(xué)Freertos, 看到可以獲取Freertos隊列長度,但是隊列項里的字節(jié)長度是否可以獲取? 因?yàn)轫椖恐?b class='flag-5'>隊列中會存放不定長字節(jié),
    發(fā)表于 04-29 07:17

    【MiCOKit試用體驗(yàn)】慶科MiCO系統(tǒng)篇(4)MiCO RTOS消息隊列

    , uint32_tnumber_of_messages );該函數(shù)為初始化一個消息隊列,參數(shù)1為指向要初始化的消息隊列的句柄指針;參數(shù)2為消息隊列的名稱,由用戶定義;參數(shù)3為將要進(jìn)入隊列
    發(fā)表于 10-24 17:03

    keystoneII arm示例程序網(wǎng)卡中斷,請問隊列收到包后,如果暫時不從隊列pop包,是否可以在隊列這個級別清除中斷信號?

    描述:目前開發(fā)板示例程序網(wǎng)卡驅(qū)動中,接收用了queue-658,這個隊列的中斷信號直接給了中斷控制器,請問,如果隊列收到包后,如果暫時不從隊列pop包的話,是否可以在
    發(fā)表于 08-03 07:43

    利用變體隊列實(shí)現(xiàn)任意復(fù)雜數(shù)據(jù)集合傳遞(很方便)

    利用變體隊列實(shí)現(xiàn)任意復(fù)雜數(shù)據(jù)集合傳遞(很方便),大家可以看看。原創(chuàng)是來自@zhihuizhou 【labview我來告訴你】實(shí)現(xiàn)任何LabVIEW數(shù)據(jù)類型集合的簡潔方式。我在此基礎(chǔ)上加了一些,方便大家理解這樣的好處。
    發(fā)表于 02-11 15:39

    FreeRTOS消息隊列和RT-Thread消息隊列的使用注意事項介紹

    個數(shù)unsigned portBASE_TYPE uxItemSize ); // 單個消息最大字節(jié)uxQueueLength隊列能夠存儲的最大單元數(shù)目,即隊列深度。 uxItemSize隊列
    發(fā)表于 05-25 15:32

    簡單羅列幾種隊列管理邏輯電路

    的范圍比buffer深度大,則不需要額外的標(biāo)號記錄空滿狀態(tài)。存在的問題,若buffer深度較大或隊列數(shù)量較多,隊列號和指針匹配邏輯會占用較多的資源。3 重力FIFO類似于排隊,從隊頭開始尋找輸出
    發(fā)表于 08-29 14:23

    什么是PoP

    什么是PoP  英文縮寫: PoP 中文譯名: 接入點(diǎn) 分  類: IP與多媒體
    發(fā)表于 02-23 09:41 ?1799次閱讀

    POP3協(xié)議和Base 64編碼原理

    POP3適用于C/S結(jié)構(gòu)的脫機(jī)模型,是因特網(wǎng)電子郵件的第一個離線協(xié)議標(biāo)準(zhǔn),Base 64是一種很常見的編碼規(guī)范,被設(shè)計用來將任意序列的8字節(jié)描述為一種不易被人直接識別的形式
    發(fā)表于 01-12 19:08 ?2170次閱讀
    <b class='flag-5'>POP</b>3協(xié)議和Base 64編碼原理

    AWorks軟件設(shè)計,郵箱、消息隊列和自旋鎖使用方法

    本文介紹了郵箱、消息隊列和自旋鎖的使用方法。信號量只能用于任務(wù)間的同步,不能傳遞更多的信息,為此,AWorks提供了郵箱和消息隊列服務(wù),它們的主要區(qū)別在于支持的消息長度不同,在郵箱中,每條消息的長度固定為4字節(jié),而在消息
    的頭像 發(fā)表于 06-13 09:13 ?1.3w次閱讀
    AWorks軟件設(shè)計,郵箱、消息<b class='flag-5'>隊列</b>和自旋鎖使用方法

    pop任意字節(jié)隊列代碼的優(yōu)化

    因?yàn)檫@個功能是通過頭結(jié)點(diǎn)的鏈表的實(shí)現(xiàn)的,而在上分代碼中,使用者可以通過調(diào)用的到頭結(jié)點(diǎn)信息,然后使用者就可以對這個鏈表進(jìn)行任意操作,這樣就很危險。
    的頭像 發(fā)表于 01-18 14:56 ?593次閱讀

    RTOS消息隊列的應(yīng)用

    基于RTOS的應(yīng)用中,通常使用隊列機(jī)制實(shí)現(xiàn)任務(wù)間的數(shù)據(jù)交互,一個應(yīng)用程序可以有任意數(shù)量的消息隊列,每個消息隊列都有自己的用途。
    發(fā)表于 05-29 10:49 ?636次閱讀
    RTOS消息<b class='flag-5'>隊列</b>的應(yīng)用

    FreeRTOS消息隊列介紹

    隊列是為了任務(wù)與任務(wù)、任務(wù)與中斷之間的通信而準(zhǔn)備的,可以在任務(wù)與任務(wù)、任務(wù)與中斷之間傳遞消息,隊列中可以存儲有限的、大小固定的數(shù)據(jù)項目。任務(wù)與任務(wù)、任務(wù)與中斷之間要交流的數(shù)據(jù)保存在隊列中,叫做
    的頭像 發(fā)表于 07-06 16:58 ?814次閱讀
    FreeRTOS消息<b class='flag-5'>隊列</b>介紹

    MCU專屬隊列功能模塊之QueueForMcu應(yīng)用

    當(dāng)需要從隊列頭部獲取多個數(shù)據(jù),但又不希望數(shù)據(jù)從隊列中刪除時,可以使用 Queue_Peek_Array 函數(shù)來實(shí)現(xiàn),該函數(shù)的參數(shù)與返回值與 Queue_Pop_Array 完全相同。
    發(fā)表于 03-20 11:44 ?517次閱讀
    MCU專屬<b class='flag-5'>隊列</b>功能模塊之QueueForMcu應(yīng)用