前言
在一般的鏈表中,數(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;
int pos;
int size;
int num;
char *addr;
struct Node *next;
} Node;
對于具體的原理實(shí)現(xiàn),我們可以用一張圖片來清楚地說明一下:
例子
下面是一個完整的的代碼例子供參考,可以直接運(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;
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)推薦
要說POP (Periodic operating Point )仿真在Simplis里面算比較特殊的功能了,只有在Simplis模式下才可以使用POP 仿真。所以啟動POP仿真必須在Simplis模式下。
發(fā)表于 11-10 15:11
?3123次閱讀
探索字節(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次閱讀
最近剛學(xué)Freertos, 看到可以獲取Freertos隊列長度,但是隊列項里的字節(jié)長度是否可以獲取?
因?yàn)轫椖恐?b class='flag-5'>隊列中會存放不定長字節(jié),
發(fā)表于 04-29 07:17
, uint32_tnumber_of_messages );該函數(shù)為初始化一個消息隊列,參數(shù)1為指向要初始化的消息隊列的句柄指針;參數(shù)2為消息隊列的名稱,由用戶定義;參數(shù)3為將要進(jìn)入隊列
發(fā)表于 10-24 17:03
描述:目前開發(fā)板示例程序網(wǎng)卡驅(qū)動中,接收用了queue-658,這個隊列的中斷信號直接給了中斷控制器,請問,如果隊列收到包后,如果暫時不從隊列中pop包的話,是否可以在
發(fā)表于 08-03 07:43
利用變體隊列實(shí)現(xiàn)任意復(fù)雜數(shù)據(jù)集合傳遞(很方便),大家可以看看。原創(chuàng)是來自@zhihuizhou 【labview我來告訴你】實(shí)現(xiàn)任何LabVIEW數(shù)據(jù)類型集合的簡潔方式。我在此基礎(chǔ)上加了一些,方便大家理解這樣的好處。
發(fā)表于 02-11 15:39
個數(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
中文譯名: 接入點(diǎn)
分 類: IP與多媒體
發(fā)表于 02-23 09:41
?1799次閱讀
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次閱讀
本文介紹了郵箱、消息隊列和自旋鎖的使用方法。信號量只能用于任務(wù)間的同步,不能傳遞更多的信息,為此,AWorks提供了郵箱和消息隊列服務(wù),它們的主要區(qū)別在于支持的消息長度不同,在郵箱中,每條消息的長度固定為4字節(jié),而在消息
發(fā)表于 06-13 09:13
?1.3w次閱讀
因?yàn)檫@個功能是通過頭結(jié)點(diǎn)的鏈表的實(shí)現(xiàn)的,而在上分代碼中,使用者可以通過調(diào)用的到頭結(jié)點(diǎn)信息,然后使用者就可以對這個鏈表進(jìn)行任意操作,這樣就很危險。
發(fā)表于 01-18 14:56
?593次閱讀
基于RTOS的應(yīng)用中,通常使用隊列機(jī)制實(shí)現(xiàn)任務(wù)間的數(shù)據(jù)交互,一個應(yīng)用程序可以有任意數(shù)量的消息隊列,每個消息隊列都有自己的用途。
發(fā)表于 05-29 10:49
?636次閱讀
隊列是為了任務(wù)與任務(wù)、任務(wù)與中斷之間的通信而準(zhǔn)備的,可以在任務(wù)與任務(wù)、任務(wù)與中斷之間傳遞消息,隊列中可以存儲有限的、大小固定的數(shù)據(jù)項目。任務(wù)與任務(wù)、任務(wù)與中斷之間要交流的數(shù)據(jù)保存在隊列中,叫做
發(fā)表于 07-06 16:58
?814次閱讀
當(dāng)需要從隊列頭部獲取多個數(shù)據(jù),但又不希望數(shù)據(jù)從隊列中刪除時,可以使用 Queue_Peek_Array 函數(shù)來實(shí)現(xiàn),該函數(shù)的參數(shù)與返回值與 Queue_Pop_Array 完全相同。
發(fā)表于 03-20 11:44
?517次閱讀
評論