數據結構(11)棧和隊列算法題 OVA

一、概念與結構

循環隊列是一種特殊的隊列,首尾相連成環,也叫環形隊列。環形隊列具有以下三個特點:

(1)隊頭刪除數據,隊尾插入數據。

(2)給定固定的空間,使用過程中不能擴容。

(3)環形隊列滿了之后,不能繼續插入數據(即插入數據失敗)。

環形隊列可以使用數組實現,也可以使用循環鏈表實現。使用數組實現的話更簡單。定義頭指針front和尾指針rear。當rear指向最后一個元素的時候,我們只需要讓rear % 空間大小就可以讓rear指針重新指向front。

但是,這樣又帶來一個問題,當環形隊列為空時:front == rear;當環形隊列滿了:front == rear。那么,我們該如何區分環形隊列是空還是滿呢?我們可以在結構體中再定義一個size變量,用于統計環形隊列中有效數據的個數。但是這樣又要額外開辟四個字節的空間,有沒有更好的辦法呢?我們額外申請一塊空間,但這塊空間不保存任何數據,這樣就不用額外增加結構體的成員變量。

此時,rear == front表示環形隊列為空;如果滿足(rear + 1)%(k + 1)== front,表示環形隊列滿了。

二、題目描述?

https://leetcode.cn/problems/design-circular-queue

三、參考代碼??

typedef struct 
{int* arr;int front;//隊頭int rear;//隊尾int capacity;//循環隊列的空間大小
} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) 
{MyCircularQueue* pq = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));//申請k+1個空間pq->arr = (int*)malloc((k + 1) * sizeof(int));pq->front = pq->rear = 0;pq->capacity = k;return pq;
}bool myCircularQueueIsEmpty(MyCircularQueue* obj) 
{return obj->front == obj->rear;
}bool myCircularQueueIsFull(MyCircularQueue* obj) 
{return (obj->rear + 1) % (obj->capacity + 1) == obj->front;
}
//向循環隊列中插入一個元素
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) 
{//先判斷是否滿了if(myCircularQueueIsFull(obj)){return false;}//沒有滿else{obj->arr[obj->rear++] = value;obj->rear %= obj->capacity + 1;return true;}
}
//從循環隊列中刪除一個元素
bool myCircularQueueDeQueue(MyCircularQueue* obj) 
{if(myCircularQueueIsEmpty(obj)){return false;}//非空else{obj->front++;obj->front %= obj->capacity + 1;return true;}
}int myCircularQueueFront(MyCircularQueue* obj) 
{if(myCircularQueueIsEmpty(obj)){return -1;}return obj->arr[obj->front];
}int myCircularQueueRear(MyCircularQueue* obj) 
{if(myCircularQueueIsEmpty(obj)){return -1;}int prev = obj->rear - 1;if(obj->rear == 0){prev = obj->capacity;}return obj->arr[prev];
}void myCircularQueueFree(MyCircularQueue* obj) 
{if(obj->arr)free(obj->arr);obj->arr = NULL;obj->front = obj->rear = obj->capacity = 0;free(obj);obj = NULL;
}/*** Your MyCircularQueue struct will be instantiated and called as such:* MyCircularQueue* obj = myCircularQueueCreate(k);* bool param_1 = myCircularQueueEnQueue(obj, value);* bool param_2 = myCircularQueueDeQueue(obj);* int param_3 = myCircularQueueFront(obj);* int param_4 = myCircularQueueRear(obj);* bool param_5 = myCircularQueueIsEmpty(obj);* bool param_6 = myCircularQueueIsFull(obj);* myCircularQueueFree(obj);
*/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91572.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91572.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91572.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

九聯UNT403HS_海思MV320處理器_安卓9-優盤強刷刷機包

九聯UNT403HS_海思MV320處理器_安卓9-優盤強刷刷機包前言:九聯UNT403HS,海思MV320芯片,已知有2種內存型號,分別是28G和216G。已知河南融合版本是28G,廣東版好像既有28G又有216G。理論上固件沒有本質區分,能…

Xilinx高性能低延時PCIe-DMA控制器IP,SGDMA,QDMA,RDMA,CDMA,V4L2驅動,視頻采集、AD采集

Multi-Channel High Performance PCIe QDMA&RDMA IP介紹基于PCI Express Integrated Block,Multi-Channel PCIe QDMA Subsystem實現了使用DMA地址隊列的獨立多通道、高性能Continous(CDMA)或Scather Gather DMA(SGDMA&#xf…

10、Docker Compose 安裝 MySQL

🐳 使用 Docker Compose 安裝 MySQL(含配置詳解與常見問題)標簽:#DockerCompose #MySQL #數據庫部署 #后端開發 #運維入門 #配置詳解 適合讀者:開發者、DevOps、新手運維人員📌 一、前言 在日常開發與部署中…

Dynamic A(D)算法深度剖析:動態環境下的路徑規劃革新

Dynamic A*(D*)算法深度剖析:動態環境下的路徑規劃革新 文章目錄 Dynamic A*(D*)算法深度剖析:動態環境下的路徑規劃革新 1. 引言:動態路徑規劃的核心挑戰與解決方案 1.1 動態環境的本質特征 1.2 D * 算法的誕生與核心價值 2. D * 算法核心原理深度解析 2.1 反向搜索機制…

前端框架Vue3(四)——組件通信及其他API

組件通信組件關系傳遞方式父傳子1. props2. v-model3. $refs4. 默認插槽、具名插槽子傳父1.props2.自定義事件3.v-model4.parent5.作用域插槽祖傳孫、孫傳祖1.$attrs2.provide、inject兄弟間、任意組件間1.mitt2.pinia【props】 概述:props是使用頻率最高的一種通信…

07【C++ 初階】類和對象(中篇) --- 類的默認成員函數

文章目錄前言類的6個默認成員函數1.構造函數1.1 構造函數特性1.1.1 函數名與類名相同1.1.2 無返回值1.1.3 對象實例化時編譯器自動調用對應的構造函數1.1.4 構造函數可以重載1.1.5 默認構造只能有一個1.1.6 默認構造的必要性1.2 構造函數的初始化列表2.析構函數2.1 析構函數特性…

第二次CISSP考試通過!

今天我終于臨時通過了 CISSP 考試!這第二次的精神壓力一點也不比第一次小。我在第 101 道題 時通過,還剩大約 30 分鐘。我當時真的以為自己又要像上次那樣時間不夠了。第一次考試的失敗經歷:第一次考試是我剛參加完為期 5 天的強化 Boot Camp…

USRP捕獲手機/路由器數據傳輸信號波形(上)

目錄: USRP捕獲手機/路由器數據傳輸信號波形(上) USRP捕獲手機/路由器數據傳輸信號波形(中) USRP捕獲手機/路由器數據傳輸信號波形(下) 一、前期準備 1.1 場景與系統 手機、路由器與天線的…

基于STM32F103的FM1702驅動程序

基于STM32F103微控制器與復旦微電子FM1702SL射頻讀卡芯片的驅動開發方案,整合了硬件配置、寄存器操作和通信協議實現:一、硬件連接設計 1. 管腳映射表FM1702SL引腳STM32F103引腳功能說明VDD3.3V電源輸入GNDGND地線SCKPA5(SPI1_SCK)SPI時鐘MISOPA6(SPI1_M…

京東商品評論API指南

一、引言京東商品評論API(JD.item_review)是京東開放平臺提供的重要接口,允許開發者獲取商品的詳細評論數據。通過該接口可以獲取包括評論內容、評分、評論時間、用戶昵稱等信息,為商品分析、用戶行為研究等提供數據支持?。二、接口概述1. 接口基本信息…

網絡編程概述與UDP編程

一、 網絡編程概述 1.1 概述 在現代軟件開發與系統交互場景里,基于 Socket 的網絡多進程通信占據核心地位,其適用場景廣泛且深入到各類數字化交互中: 直播場景:主播端通過 Socket 建立的網絡連接,將音視頻流以數據包…

新手教程:用外部 PostgreSQL 和 Zookeeper 啟動 Dolphinscheduler

本文將帶你一步步通過外部PostgreSQL和Zookeeper來啟動Apache DolphinScheduler。無論你是新手還是有經驗的開發者,都能輕松跟著這些步驟在Linux/Unix環境中完成安裝和配置。除了常見的安裝步驟,我們還會分享一些集群部署的技巧,讓你輕松擴展…

安寶特案例丨AR+AI賦能軌道交通制造:破解人工裝配難題的創新實踐

在軌道交通裝備制造領域,小批量、多品種的生產特性與高度依賴人工經驗的作業模式長期并存,導致效率瓶頸與質量隱患并存。安寶特通過AR(增強現實)AI(人工智能)技術融合,在螺栓緊固、內飾裝配、制…

基于LSTM-GRU混合網絡的動態解析:美聯儲維穩政策與黃金單日跌1.5%的非線性關聯

摘要:本文通過構建多因子量化模型,結合自然語言處理(NLP)技術對美聯儲政策文本進行情緒分析,解析經濟數據、市場情緒及宏觀環境對黃金價格的復合影響機制。研究基于LSTM時間序列預測框架,驗證關鍵事件對金價…

RabbitMQ消息確認機制有幾個confirm?

RabbitMQ 的消息確認機制中,“confirm” 這個詞主要出現在兩個關鍵環節,對應兩種確認:? 兩種 confirm(確認)機制確認類型觸發方說明Publisher Confirm(生產者確認)生產者 → Broker消息是否成功…

vue項目啟動時因內存不足啟動失敗

可以使用increase-memory-limit跟npm install cross-env插件npm install increase-memory-limit npm install cross-env安裝后需要在package.json文件中加入如下代碼"scripts": {"fix-memory-limit": "cross-env LIMIT3072 increase-memory-limit&quo…

WEditor:高效的移動端UI自動化腳本可視化編輯器

WEditor:高效的移動端UI自動化腳本可視化編輯器前言一、核心特性與優勢1. 可視化操作,降低門檻2. 跨平臺支持3. 豐富的控件層級展示4. 快捷鍵高效操作5. 開源可擴展二、安裝與環境配置1. 環境準備Android 設備用戶需額外準備ADB 安裝與配置步驟2. 安裝依…

面試高頻題 力扣 283.移動零 雙指針技巧 原地修改 順序保持 C++解題思路 每日一題

目錄零、題目描述一、為什么這道題值得你花幾分鐘看懂?二、題目拆解:提取其中的關鍵點三、明確思路:雙指針的巧妙配合四、算法實現:雙指針的代碼演繹五、C代碼實現:一步步拆解代碼拆解時間復雜度和空間復雜度六、實現過…

arrch64架構下調用pyvista報錯

arrch64架構下調用pyvista報錯 問題 python編程使用到了pyvista&#xff0c;使用conda新建了環境&#xff0c;但是使用的時候報錯 Traceback (most recent call last):File "/home/ztl/MGGBSAR/src/trans_las_3D.py", line 16, in <module>import pyvista as p…

功能強大編輯器

時間限制&#xff1a;1秒 內存限制&#xff1a;128M題目描述你要幫助小可創造一個超級數字編輯器&#xff01;編輯器依舊運行在Linux下&#xff0c;因此你只能通過指令去操控他。指令有五種&#xff1a; In X 表示在光標左側插入一個數字 Del 表示刪除光標左側一個數字 …