前言
在一般的鏈表中,數據是存儲在node節點中的,每次pop出來的數據是以node為單位的。這篇文章,我們對一般的鏈表進行改進,可以pop任意字節的數據,也就是說,每次pop的數據數據是以任意字節為單位的,可以pop 10Byte,也可以500Byte,這種方法比較靈活。
原理
針對一般的鏈表,我們做的改進主要是在每個node中加了一個字段pos,用來標記這個node的data的下標。比如說這個node打data數據大小為10,它的pos就為0,這時候就表示這10個字節都可以用。然后可以pop 2個字節,這時候pos就成了2,表示還有8個字節可以用。
實現的話,我們可以定義這樣的結構體:
typedef struct Node
{
int id; //每個link的標識符
int pos; //記錄node數據的下標
int size; //記錄node數據的總大小
int num; //記錄link的node個數,僅頭結點使用
char *addr; //數據data
struct Node *next; //next node
} Node;
對于具體的原理實現,我們可以用一張圖片來清楚地說明一下:
例子
下面是一個完整的的代碼例子供參考,可以直接運行:
#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
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
數據存儲
+關注
關注
5文章
970瀏覽量
50894
發布評論請先 登錄
相關推薦
SIMPLIS POP仿真分析
要說POP (Periodic operating Point )仿真在Simplis里面算比較特殊的功能了,只有在Simplis模式下才可以使用POP 仿真。所以啟動POP仿真必須在Simplis模式下。
探索字節隊列的魔法:多類型支持、函數重載與線程安全
探索字節隊列的魔法:多類型支持、函數重載與線程安全代碼難度指數:文章學習重點:參數宏的使用技巧一、引言在嵌入式系統和實時應用中,數據的傳輸和處理是至關重要的。字節隊列(ByteQueu
Freertos隊列項里的字節長度是否可以獲取?
最近剛學Freertos, 看到可以獲取Freertos隊列長度,但是隊列項里的字節長度是否可以獲取?
因為項目中隊列中會存放不定長字節,
發表于 04-29 07:17
【MiCOKit試用體驗】慶科MiCO系統篇(4)MiCO RTOS消息隊列
, uint32_tnumber_of_messages );該函數為初始化一個消息隊列,參數1為指向要初始化的消息隊列的句柄指針;參數2為消息隊列的名稱,由用戶定義;參數3為將要進入隊列
發表于 10-24 17:03
keystoneII arm示例程序網卡中斷,請問隊列收到包后,如果暫時不從隊列中pop包,是否可以在隊列這個級別清除中斷信號?
描述:目前開發板示例程序網卡驅動中,接收用了queue-658,這個隊列的中斷信號直接給了中斷控制器,請問,如果隊列收到包后,如果暫時不從隊列中pop包的話,是否可以在
發表于 08-03 07:43
利用變體隊列實現任意復雜數據集合傳遞(很方便)
利用變體隊列實現任意復雜數據集合傳遞(很方便),大家可以看看。原創是來自@zhihuizhou 【labview我來告訴你】實現任何LabVIEW數據類型集合的簡潔方式。我在此基礎上加了一些,方便大家理解這樣的好處。
發表于 02-11 15:39
FreeRTOS消息隊列和RT-Thread消息隊列的使用注意事項介紹
個數unsigned portBASE_TYPE uxItemSize ); // 單個消息最大字節uxQueueLength隊列能夠存儲的最大單元數目,即隊列深度。 uxItemSize隊列
發表于 05-25 15:32
簡單羅列幾種隊列管理邏輯電路
的范圍比buffer深度大,則不需要額外的標號記錄空滿狀態。存在的問題,若buffer深度較大或隊列數量較多,隊列號和指針匹配邏輯會占用較多的資源。3 重力FIFO類似于排隊,從隊頭開始尋找可輸出
發表于 08-29 14:23
POP3協議和Base 64編碼原理
POP3適用于C/S結構的脫機模型,是因特網電子郵件的第一個離線協議標準,Base 64是一種很常見的編碼規范,被設計用來將任意序列的8字節描述為一種不易被人直接識別的形式
發表于 01-12 19:08
?2166次閱讀
AWorks軟件設計,郵箱、消息隊列和自旋鎖使用方法
本文介紹了郵箱、消息隊列和自旋鎖的使用方法。信號量只能用于任務間的同步,不能傳遞更多的信息,為此,AWorks提供了郵箱和消息隊列服務,它們的主要區別在于支持的消息長度不同,在郵箱中,每條消息的長度固定為4字節,而在消息
可pop任意字節隊列代碼的優化
因為這個功能是通過頭結點的鏈表的實現的,而在上分代碼中,使用者可以通過調用的到頭結點信息,然后使用者就可以對這個鏈表進行任意操作,這樣就很危險。
FreeRTOS消息隊列介紹
隊列是為了任務與任務、任務與中斷之間的通信而準備的,可以在任務與任務、任務與中斷之間傳遞消息,隊列中可以存儲有限的、大小固定的數據項目。任務與任務、任務與中斷之間要交流的數據保存在隊列中,叫做
MCU專屬隊列功能模塊之QueueForMcu應用
當需要從隊列頭部獲取多個數據,但又不希望數據從隊列中刪除時,可以使用 Queue_Peek_Array 函數來實現,該函數的參數與返回值與 Queue_Pop_Array 完全相同。
發表于 03-20 11:44
?508次閱讀
評論