前言
在一般的鏈表中,數(shù)據(jù)是存儲(chǔ)在node節(jié)點(diǎn)中的,每次pop出來的數(shù)據(jù)是以node為單位的。這篇文章,我們對(duì)一般的鏈表進(jìn)行改進(jìn),可以pop任意字節(jié)的數(shù)據(jù),也就是說,每次pop的數(shù)據(jù)數(shù)據(jù)是以任意字節(jié)為單位的,可以pop 10Byte,也可以500Byte,這種方法比較靈活。
原理
針對(duì)一般的鏈表,我們做的改進(jìn)主要是在每個(gè)node中加了一個(gè)字段pos,用來標(biāo)記這個(gè)node的data的下標(biāo)。比如說這個(gè)node打data數(shù)據(jù)大小為10,它的pos就為0,這時(shí)候就表示這10個(gè)字節(jié)都可以用。然后可以pop 2個(gè)字節(jié),這時(shí)候pos就成了2,表示還有8個(gè)字節(jié)可以用。
實(shí)現(xiàn)的話,我們可以定義這樣的結(jié)構(gòu)體:
typedef struct Node
{
int id;
int pos;
int size;
int num;
char *addr;
struct Node *next;
} Node;
對(duì)于具體的原理實(shí)現(xiàn),我們可以用一張圖片來清楚地說明一下:
例子
下面是一個(gè)完整的的代碼例子供參考,可以直接運(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)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
相關(guān)推薦
要說POP (Periodic operating Point )仿真在Simplis里面算比較特殊的功能了,只有在Simplis模式下才可以使用POP 仿真。所以啟動(dòng)POP仿真必須在Simplis模式下。
發(fā)表于 11-10 15:11
?2783次閱讀
最近剛學(xué)Freertos, 看到可以獲取Freertos隊(duì)列長(zhǎng)度,但是隊(duì)列項(xiàng)里的字節(jié)長(zhǎng)度是否可以獲取?
因?yàn)轫?xiàng)目中隊(duì)列中會(huì)存放不定長(zhǎng)字節(jié),
發(fā)表于 04-29 07:17
, uint32_tnumber_of_messages );該函數(shù)為初始化一個(gè)消息隊(duì)列,參數(shù)1為指向要初始化的消息隊(duì)列的句柄指針;參數(shù)2為消息隊(duì)列的名稱,由用戶定義;參數(shù)3為將要進(jìn)入隊(duì)列
發(fā)表于 10-24 17:03
描述:目前開發(fā)板示例程序網(wǎng)卡驅(qū)動(dòng)中,接收用了queue-658,這個(gè)隊(duì)列的中斷信號(hào)直接給了中斷控制器,請(qǐng)問,如果隊(duì)列收到包后,如果暫時(shí)不從隊(duì)列中pop包的話,是否可以在
發(fā)表于 08-03 07:43
利用變體隊(duì)列實(shí)現(xiàn)任意復(fù)雜數(shù)據(jù)集合傳遞(很方便),大家可以看看。原創(chuàng)是來自@zhihuizhou 【labview我來告訴你】實(shí)現(xiàn)任何LabVIEW數(shù)據(jù)類型集合的簡(jiǎn)潔方式。我在此基礎(chǔ)上加了一些,方便大家理解這樣的好處。
發(fā)表于 02-11 15:39
個(gè)數(shù)unsigned portBASE_TYPE uxItemSize ); // 單個(gè)消息最大字節(jié)uxQueueLength隊(duì)列能夠存儲(chǔ)的最大單元數(shù)目,即隊(duì)列深度。 uxItemSize隊(duì)列
發(fā)表于 05-25 15:32
的范圍比buffer深度大,則不需要額外的標(biāo)號(hào)記錄空滿狀態(tài)。存在的問題,若buffer深度較大或隊(duì)列數(shù)量較多,隊(duì)列號(hào)和指針匹配邏輯會(huì)占用較多的資源。3 重力FIFO類似于排隊(duì),從隊(duì)頭開始尋找可輸出
發(fā)表于 08-29 14:23
什么是PoP
英文縮寫: PoP
中文譯名: 接入點(diǎn)
分 類: IP與多媒體
發(fā)表于 02-23 09:41
?1748次閱讀
POP3適用于C/S結(jié)構(gòu)的脫機(jī)模型,是因特網(wǎng)電子郵件的第一個(gè)離線協(xié)議標(biāo)準(zhǔn),Base 64是一種很常見的編碼規(guī)范,被設(shè)計(jì)用來將任意序列的8字節(jié)描述為一種不易被人直接識(shí)別的形式
發(fā)表于 01-12 19:08
?2141次閱讀
本文介紹了郵箱、消息隊(duì)列和自旋鎖的使用方法。信號(hào)量只能用于任務(wù)間的同步,不能傳遞更多的信息,為此,AWorks提供了郵箱和消息隊(duì)列服務(wù),它們的主要區(qū)別在于支持的消息長(zhǎng)度不同,在郵箱中,每條消息的長(zhǎng)度固定為4字節(jié),而在消息
發(fā)表于 06-13 09:13
?1.2w次閱讀
應(yīng)用解耦:消息隊(duì)列減少了服務(wù)之間的耦合性,不同的服務(wù)可以通過消息隊(duì)列進(jìn)行通信,而不用關(guān)心彼此的實(shí)現(xiàn)細(xì)節(jié)。
發(fā)表于 11-07 14:55
?1339次閱讀
因?yàn)檫@個(gè)功能是通過頭結(jié)點(diǎn)的鏈表的實(shí)現(xiàn)的,而在上分代碼中,使用者可以通過調(diào)用的到頭結(jié)點(diǎn)信息,然后使用者就可以對(duì)這個(gè)鏈表進(jìn)行任意操作,這樣就很危險(xiǎn)。
發(fā)表于 01-18 14:56
?548次閱讀
基于RTOS的應(yīng)用中,通常使用隊(duì)列機(jī)制實(shí)現(xiàn)任務(wù)間的數(shù)據(jù)交互,一個(gè)應(yīng)用程序可以有任意數(shù)量的消息隊(duì)列,每個(gè)消息隊(duì)列都有自己的用途。
發(fā)表于 05-29 10:49
?581次閱讀
隊(duì)列是為了任務(wù)與任務(wù)、任務(wù)與中斷之間的通信而準(zhǔn)備的,可以在任務(wù)與任務(wù)、任務(wù)與中斷之間傳遞消息,隊(duì)列中可以存儲(chǔ)有限的、大小固定的數(shù)據(jù)項(xiàng)目。任務(wù)與任務(wù)、任務(wù)與中斷之間要交流的數(shù)據(jù)保存在隊(duì)列中,叫做
發(fā)表于 07-06 16:58
?746次閱讀
當(dāng)需要從隊(duì)列頭部獲取多個(gè)數(shù)據(jù),但又不希望數(shù)據(jù)從隊(duì)列中刪除時(shí),可以使用 Queue_Peek_Array 函數(shù)來實(shí)現(xiàn),該函數(shù)的參數(shù)與返回值與 Queue_Pop_Array 完全相同。
發(fā)表于 03-20 11:44
?368次閱讀
評(píng)論