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

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

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

什么是隊(duì)列?不受類型限制的隊(duì)列如何實(shí)現(xiàn)

冬至配餃子 ? 來源:最后一個(gè)bug ? 作者:bug菌 ? 2022-08-12 09:22 ? 次閱讀

1、初識(shí)size_t

這里可能大部分都不太知道有size_t這樣的一個(gè)數(shù)據(jù)類型,可以說該類型是英文size type的一個(gè)縮寫,它是一種記錄數(shù)據(jù)大小的數(shù)據(jù)類型(可以認(rèn)為是一種整形數(shù)據(jù))。其實(shí)我們經(jīng)常使用的sizeof()的返回值數(shù)據(jù)類型就是size_t,只是我們常常用一個(gè)整形比如int來保存返回值。

值得我們注意得是:

sizeof類型是一個(gè)與操作系統(tǒng)相關(guān)得數(shù)據(jù)類型,它主要是為了提高C語言的可移植性和可讀性而加入的,可以說它并不是一種基本的數(shù)據(jù)類型,而且在頭文件中用typedef來重命名的數(shù)據(jù)類型。其實(shí)在我們平時(shí)很多地方都用到了size_t,比如:

poYBAGL1qh6AYh20AAAj7JvUFGA004.png

我們使用的時(shí)候幾乎都用整形比如int變量來使用,并沒有使用到size_t類型,所以說盡管我們的int依賴于C編譯器,有些情況size_t并不是固定的,如果我們用基本類型替換可能帶來數(shù)據(jù)類型過小或者過大的問題,過小可能會(huì)導(dǎo)致數(shù)據(jù)溢出問題,過大可能導(dǎo)致運(yùn)行速度降低!
size_t的使用:只要是用到sizeof等返回值,或者傳入值的變量都定義為size_t類型!

2、什么是隊(duì)列?

隊(duì)列—

一種特殊的操作受限制得線性表,用戶僅允許在線性表的頭部獲取數(shù)據(jù),在尾部插入數(shù)據(jù),所以大家也叫FIFO(先進(jìn)先出)線性表。

形象一點(diǎn)的表達(dá)

:類似于一隊(duì)人排隊(duì)鉆進(jìn)一根只能進(jìn)入一個(gè)人的管子,先進(jìn)去的人先出來,后面的人只能在從同一個(gè)口子進(jìn)入!

隊(duì)列的類型:

順序隊(duì)列和循環(huán)隊(duì)列。順序隊(duì)列,出隊(duì)列指針必須>或者=入隊(duì)列指針,否則容易出現(xiàn)假溢出現(xiàn)象;而循環(huán)隊(duì)列只要入隊(duì)列指針與出隊(duì)列指針不再次重合就不回溢出!

3、不受類型限制的隊(duì)列實(shí)現(xiàn)

首先我們先貼上剛剛寫好的Queue.h和Queue.c文件

poYBAGL1qnqAMV7gAAFKVcP9Sws614.png

pYYBAGL1qoGAYmiJAAFDHSF_4Hc866.png

poYBAGL1qoaACHUeAAESAE9aqkQ694.png

pYYBAGL1qo2AYiJoAAC53sBnHt8401.png

poYBAGL1qrqAIybVAADqgoePl0s061.pngpoYBAGL1qsGAbHMXAADP9acB7uY706.png

解析代碼:

1)節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)中采用void類型的指針,能夠指向任意數(shù)據(jù)類型來擴(kuò)展我們的隊(duì)列。

2)隊(duì)列數(shù)組順序隊(duì)列,我們可以通過修改擴(kuò)展變成循環(huán)隊(duì)列,便于我們使用。

3)具體的使用可以參考上面的例子進(jìn)行開發(fā)。

4、隊(duì)列的應(yīng)用

1)隊(duì)列可以作為一種數(shù)據(jù)緩沖,當(dāng)我們的數(shù)據(jù)無法實(shí)時(shí)進(jìn)行發(fā)送的時(shí)候,可以進(jìn)行適當(dāng)?shù)年?duì)列緩沖,集中到一定的數(shù)據(jù),然后進(jìn)行打包發(fā)送。

2)隊(duì)列可以實(shí)現(xiàn)任務(wù)之間的一個(gè)信息交互,可以解決一些多線程問題,實(shí)現(xiàn)一種任務(wù)之間的異步處理。

3)由于是隊(duì)列的一個(gè)先進(jìn)先出特點(diǎn),我們也可以利用隊(duì)列來嚴(yán)格的控制數(shù)據(jù)的順序。



審核編輯:劉清

聲明:本文內(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)注

    關(guān)注

    33

    文章

    8667

    瀏覽量

    151518
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7613

    瀏覽量

    137240
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    278

    瀏覽量

    20032
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    JavaWeb消息隊(duì)列使用指南

    在現(xiàn)代的JavaWeb應(yīng)用中,消息隊(duì)列(Message Queue)是一種常見的技術(shù),用于異步處理任務(wù)、解耦系統(tǒng)組件、提高系統(tǒng)性能和可靠性。 1. 消息隊(duì)列的基本概念 消息隊(duì)列是一種應(yīng)用程序?qū)?yīng)
    的頭像 發(fā)表于 11-25 09:27 ?172次閱讀

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

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

    為什么同一個(gè)隊(duì)列引用的全局變量,運(yùn)行在兩個(gè)子vi中發(fā)現(xiàn)隊(duì)列數(shù)據(jù)丟失了

    我創(chuàng)建了一個(gè)隊(duì)列,然后將隊(duì)列引用做了個(gè)全局變量,運(yùn)行在兩個(gè)子vi中,一個(gè)是只入隊(duì)列,另一個(gè)是只出隊(duì)列。但我發(fā)現(xiàn),一個(gè)字vi數(shù)據(jù)入隊(duì)列成功,檢
    發(fā)表于 11-14 11:47

    嵌入式環(huán)形隊(duì)列與消息隊(duì)列實(shí)現(xiàn)原理

    嵌入式環(huán)形隊(duì)列,也稱為環(huán)形緩沖區(qū)或循環(huán)隊(duì)列,是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),用于在固定大小的存儲(chǔ)區(qū)域中高效地存儲(chǔ)和訪問數(shù)據(jù)。其主要特點(diǎn)包括固定大小的數(shù)組和兩個(gè)指針(頭指針和尾指針),分別指向隊(duì)列的起始位置和結(jié)束位置。
    的頭像 發(fā)表于 09-02 15:29 ?604次閱讀

    玩轉(zhuǎn)RT-Thread之消息隊(duì)列的應(yīng)用

    在嵌入式系統(tǒng)開發(fā)中,實(shí)時(shí)處理串口和ADC數(shù)據(jù)是一項(xiàng)重要的任務(wù)。本文將介紹如何在RT-Thread實(shí)時(shí)操作系統(tǒng)中,利用消息隊(duì)列來同時(shí)處理來自串口和ADC的數(shù)據(jù)。通過這種方法,我們能夠高效地管理和處理
    的頭像 發(fā)表于 07-23 08:11 ?637次閱讀
    玩轉(zhuǎn)RT-Thread之消息<b class='flag-5'>隊(duì)列</b>的應(yīng)用

    freertos啟用IAR自帶插件調(diào)試時(shí)不能查看隊(duì)列信息怎么解決?

    在IAR平臺(tái)上調(diào)試freertos,想利用IAR自帶的freertos插件進(jìn)行調(diào)試,但是只能看task的信息,不能看隊(duì)列信息顯示
    發(fā)表于 05-07 06:54

    嵌入式實(shí)時(shí)操作系統(tǒng)中的隊(duì)列管理與應(yīng)用

    任務(wù) A 將信息存入隊(duì)列,任務(wù)B以先進(jìn)先出的方式提取信息。隊(duì)列通常應(yīng)足夠大,可以承載許多數(shù)據(jù),而不僅僅承載單個(gè)數(shù)據(jù)項(xiàng)。因此,它可以充當(dāng)緩沖或暫存器,為管道提供靈活性。
    發(fā)表于 04-30 14:27 ?634次閱讀
    嵌入式實(shí)時(shí)操作系統(tǒng)中的<b class='flag-5'>隊(duì)列</b>管理與應(yīng)用

    Freertos隊(duì)列項(xiàng)里的字節(jié)長(zhǎng)度是否可以獲???

    最近剛學(xué)Freertos, 看到可以獲取Freertos隊(duì)列長(zhǎng)度,但是隊(duì)列項(xiàng)里的字節(jié)長(zhǎng)度是否可以獲??? 因?yàn)轫?xiàng)目中隊(duì)列中會(huì)存放不定長(zhǎng)字節(jié),需要對(duì)隊(duì)列中的數(shù)據(jù)分揀,每次分揀的時(shí)候遍歷所
    發(fā)表于 04-29 07:17

    freertos隊(duì)列錯(cuò)亂是什么原因?qū)е碌模?/a>

    最近調(diào)試//發(fā)送兩個(gè)隊(duì)列 xResult = xSemaphoreTake(xSemaphore, (TickType_t)1); if(xResult == pdTRUE
    發(fā)表于 04-26 06:20

    用FreeRTOS使用隊(duì)列怎么發(fā)送一個(gè)結(jié)構(gòu)體呢?

    在函數(shù)osMessageGet 只能返回一個(gè)4個(gè)字節(jié)啊。在xQueueReceive它只傳了一個(gè)uint32_tv啊,只有四個(gè)字節(jié)。 那就限制了最大的數(shù)據(jù)就是四個(gè)字節(jié)了,感覺應(yīng)該不會(huì)是這樣啊,那么我
    發(fā)表于 04-17 07:35

    進(jìn)程間通信的消息隊(duì)列介紹

    消息隊(duì)列是一種非常常見的進(jìn)程間通信方式。
    的頭像 發(fā)表于 04-08 17:27 ?324次閱讀

    Linux 6.9-rc1發(fā)布,加入定時(shí)器、工作隊(duì)列及AMD P-State優(yōu)化

    在內(nèi)核方面,6.9版本進(jìn)行了定時(shí)器的大幅重構(gòu),增加了每個(gè)CPU核心的時(shí)間輪支持,以提升定時(shí)器運(yùn)效率,尤其在網(wǎng)絡(luò)應(yīng)用中表現(xiàn)出色。此外,工作隊(duì)列子系統(tǒng)新增BH工作隊(duì)列支持,摒棄了老舊的tasklet機(jī)制。
    的頭像 發(fā)表于 03-25 13:49 ?475次閱讀

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

    當(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 ?533次閱讀
    MCU專屬<b class='flag-5'>隊(duì)列</b>功能模塊之QueueForMcu應(yīng)用

    TC399 adc能添加到同一個(gè)隊(duì)列中并得到結(jié)果嗎?加入隊(duì)列是否有任何限制?

    添加到隊(duì)列中并得到結(jié)果。 我的疑問是,有了這些不同的頻道和組,我還能把它們添加到同一個(gè)隊(duì)列中并得到結(jié)果嗎?加入隊(duì)列是否有任何限制?
    發(fā)表于 03-04 06:33

    裸機(jī)中環(huán)形隊(duì)列與RTOS中消息隊(duì)列有何區(qū)別呢?

    “環(huán)形隊(duì)列”和“消息隊(duì)列”在嵌入式領(lǐng)域有應(yīng)用非常廣泛,相信有經(jīng)驗(yàn)的嵌入式軟件工程師對(duì)它們都不陌生。
    的頭像 發(fā)表于 01-26 09:38 ?735次閱讀
    裸機(jī)中環(huán)形<b class='flag-5'>隊(duì)列</b>與RTOS中消息<b class='flag-5'>隊(duì)列</b>有何區(qū)別呢?