力扣(LeetCode) ——622. 設計循環隊列(C語言)

題目:622. 設計循環隊列

在這里插入圖片描述

示例1:

MyCircularQueue circularQueue = new MyCircularQueue(3); // 設置長度為 3
circularQueue.enQueue(1); // 返回 true
circularQueue.enQueue(2); // 返回 true
circularQueue.enQueue(3); // 返回 true
circularQueue.enQueue(4); // 返回 false,隊列已滿
circularQueue.Rear(); // 返回 3
circularQueue.isFull(); // 返回 true
circularQueue.deQueue(); // 返回 true
circularQueue.enQueue(4); // 返回 true
circularQueue.Rear(); // 返回 4

解題思路:

根據題目要求設計一個循環隊列,需要滿足以下要求:
在這里插入圖片描述

最終代碼1:

通過額外開辟一個空間,解決空和滿的沖突問題。

typedef struct {int* a;int head;//指向頭int tail;//指向尾的下一個int k;
} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));obj->a = (int*)malloc(sizeof(int) * (k + 1));obj->head = 0;obj->tail = 0;obj->k = k;return obj;
}
//是否為空
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->head == obj->tail;
}
//是否已滿
bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj->tail + 1) % (obj->k + 1) == obj->head;
}
//插入
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if (myCircularQueueIsFull(obj)){return false;}obj->a[obj->tail] = value;obj->tail++;obj->tail = (obj->tail) % (obj->k + 1);return true;}
//刪除
bool myCircularQueueDeQueue(MyCircularQueue* obj) {if (myCircularQueueIsEmpty(obj)){return false;}obj->head++;obj->head = (obj->head) % (obj->k + 1);return true;
}
//不為空取首元素
int myCircularQueueFront(MyCircularQueue* obj) {if (myCircularQueueIsEmpty(obj)){return -1;}return obj->a[obj->head];
}
//不為空取尾元素
int myCircularQueueRear(MyCircularQueue* obj) {if (myCircularQueueIsEmpty(obj)){return -1;}return obj->a[(obj->tail + obj->k) % (obj->k + 1)];
}void myCircularQueueFree(MyCircularQueue* obj) {free(obj->a);free(obj);
}

最終代碼2:

通過增加一個size來判斷隊列是否為空或滿。

typedef struct {int* a;int phead;int ptail;int k;int size;
} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));obj->a = (int*)malloc(sizeof(int)*k);obj->phead = 0;obj->ptail = 0;obj->k = k;obj->size = 0;return obj;
}
//是否為空
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->size == 0;}
//是否已滿
bool myCircularQueueIsFull(MyCircularQueue* obj) {return obj->size == obj->k;
}//插入
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj)){return false;}else{if(myCircularQueueIsEmpty(obj)){obj->a[obj->phead] = value;}obj->a[obj->ptail] = value;obj->ptail++;obj->ptail %= obj->k;obj->size++;return true;}
}
//刪除
bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return false;}else{obj->phead = (obj->phead+obj->k+1)%obj->k;obj->size--;return true;}
}
//取首元素
int myCircularQueueFront(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return -1;}return obj->a[obj->phead];
}
//取尾元素
int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return -1;}else{return obj->a[(obj->ptail+obj->k-1)%obj->k];}
}void myCircularQueueFree(MyCircularQueue* obj) {free(obj->a);free(obj);
}

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

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

相關文章

在JVM跑JavaScript腳本 | Oracle GraalJS 簡介與實踐

這是2024年初的 GraalVM 系列博文,當時寫了大綱,知道一年半后的現在才得以完成發布😄 1、概述 實話說,標題的場景為小眾需求,日常開發基本用不到,我是最近在做一個低代碼輪子玩具 app-meta 需要實現 FaaS&…

基于 EC 數據與大模型技術實現天氣預報:從數據到上線的全棧方法

1. 先校準“EC 數據”與“AI 預報”的語境 EC 數據家族(常用) IFS/HRES:確定性全球模式,水平分辨率約 9 km,常用預報范圍 10 天; IFS/ENS:51 成員集合預報,提供 15 天概率信息; ERA5:再分析數據,小時級、0.25,可追溯至 1940 年,用作訓練/評測黃金基準。 AI 預報…

迭代器模式及優化

迭代器模式(Iterator Pattern)是一種行為型設計模式,用于提供一種統一的方式遍歷聚合對象(如集合、容器)中的元素,而無需暴露對象的內部實現細節。它將遍歷邏輯與聚合對象分離,使得遍歷操作可以…

純Qt手撕gb28181協議/gb28181協議服務端/gb28181協議設備端/gb28181設備模擬器/gb28181虛擬監控設備

一、前言說明 搞完onvif設備模擬器,總想著把28181設備模擬也實現,因為之前已經花了大力氣把28181平臺軟件端實現了,為了實現這個組件,頭發掉了一大把,專門把國標文檔看了好幾遍,逐行閱讀,針對需…

【滲透實戰】無下載器環境(curl/wget)下玩轉 Metasploit 自動利用

1. 背景與問題場景 在滲透測試或漏洞利用中,Metasploit(MSF)是業界最常用的框架之一。 其許多 RCE(遠程代碼執行)模塊在落地 payload(如 Meterpreter 或反彈 shell)時,采用了 CMD St…

jd-hotkey探測熱點key

對任意突發性的無法預先感知的熱點數據,包括并不限于熱點數據(如突發大量請求同一個商品)、熱用戶(如惡意爬蟲刷子)、熱接口(突發海量請求同一個接口)等,進行毫秒級精準探測到。然后…

C#WPF實戰出真汁07--【系統設置】--菜品類型設置

1、菜品設置介紹 菜品設置跟餐桌設置的功能目的是相同的,包括了新增,刪除,編輯,分頁,查詢,重置,全選,全消,列表功能,實現流程也是布局設計,后臺邏…

aave v3 存款與借款利息的計算方式

本文只涉及到利率計算的數學原理,不作源碼解析:存款首先我們假設小明在aave里面存了10000usdt,存的時候年化收益率是5%,那么半年后其存款的利息是多少呢?常規的計算方式如下:利息10000*5%*(存款的時長/一年的時長)這么做有什么問題呢?假設現…

Windows MCP.Net:基于.NET的Windows桌面自動化MCP服務器深度解析

📋 目錄 項目概述 技術架構深度解析 核心功能模塊詳解 代碼實現分析 使用場景與實戰案例 性能優化與最佳實踐 擴展開發指南 總結與展望 項目概述 什么是Windows-MCP.Net? Windows MCP.Net是一個基于.NET 10.0開發的Windows桌面自動化MCP&…

Boost.Asio學習(7):Boost.Beast實現簡易http服務器

namespace beast boost::beast;beast::flat_buffer是一個用于 Boost.Asio 和 Boost.Beast 網絡讀寫的緩沖區實現。專為 一次性順序讀取 / 消費 場景設計,比 std::string 或 std::vector 高效,因為它是扁平內存結構(contiguous memory&#x…

深入解析JVM內存區域劃分:從理論到實踐

Java虛擬機(JVM)是Java程序運行的核心環境,它負責管理內存分配、垃圾回收、字節碼執行等關鍵任務。理解JVM的內存區域劃分,對于優化Java應用性能、排查內存問題(如OutOfMemoryError、StackOverflowError)至…

滑窗|貪心|?滾動數組

lc17.08pair按身高升序、相同時體重降序排序結果是找體重序列的最長遞增子序列長度核心&#xff1a;轉化為二維最長遞增子序列問題求解vector<int> dp;for (auto& p : hw) {int w p.second;auto it lower_bound(dp.begin(), dp.end(), w);if (it dp.end()) {dp.pu…

深入理解數據庫架構:從原理到實踐的完整指南

一、數據庫存儲架構的多維度分類體系 1.1 基于數據組織方式的存儲架構分類 數據庫的存儲架構從根本上決定了其性能特征、適用場景和擴展能力。理解不同的數據組織方式是選擇合適數據庫技術的基礎&#xff0c;這種分類不僅反映了技術實現的差異&#xff0c;更體現了對不同業務需…

體彩排列三第2025218期號碼分析

大家好&#xff0c;本人蔡楚門來此平臺分享一下本期得經驗和思路&#xff0c;希望能夠給大家帶來好的運氣和靈感&#xff01;體彩排列三第2025218期號碼分析&#xff0c;大小號碼數字分析&#xff0c;上期開出全小號碼最多&#xff0c;最近兩期的開獎號碼全部都是全小號碼最多&…

java設計模式之迪米特法則介紹與說明

一、核心概念與目標 基本定義 迪米特法則的核心思想是&#xff1a;一個對象應該對其他對象盡可能少地了解&#xff0c;僅與直接關聯的對象&#xff08;即“朋友”&#xff09;通信&#xff0c;避免與“陌生人”產生直接交互。 直接朋友&#xff1a;包括當前對象的成員變量、方法…

2024-2025華為ICT大賽中國區 實踐賽昇騰AI賽道(高職組)全國總決賽 理論部分真題+解析

Part 1 昇騰AI全棧系統模塊(共6題)&#xff1a;1、許多計算芯片可以設計作為人工智能的計算芯片&#xff0c;但不同的芯片計算性能不同&#xff0c;昇騰計算芯片是一種()芯片。(單選題)A.CPU B.GPU C. NPU D.TPU正確答案&#xff1a;C解析&#xff1a;A項CPU中央處理器的架…

網絡安全和基礎設施安全局 (CISA) 表示微分段不再是可選的

網絡安全和基礎設施安全局 (CISA) 最近發布了一系列指導文件中的第一份&#xff0c;旨在幫助聯邦機構實施微分段&#xff0c;作為其零信任架構 (ZTA) 戰略的一部分&#xff0c;以遵守2022 年白宮的授權。 該文件《零信任中的微分段&#xff0c;第一部分&#xff1a;介紹和規劃…

Spring Boot SseEmitter 重復請求問題深度分析與解決方案

1. 前言 在使用 Spring Boot 開發流式接口(Server-Sent Events)時,我們遇到了一個令人困惑的問題:每次 SseEmitter 完成后,都會觸發第二次請求,導致重復請求檢測機制誤報。本文將詳細記錄問題的發現、分析過程以及最終的解決方案。 2. 系統架構背景 2.1 請求處理架構 …

心路歷程-三個了解敲開linux的大門

學習前都愛嘮叨一番&#xff1a; 了解一下&#xff1a;互聯網的發展是離不開服務器的&#xff0c;而服務器的系統主流的還是Linux&#xff1b;這個是有數據進行支撐的&#xff1b;這個只是作為了解而已&#xff0c;我們并不買課&#xff0c;也不做什么買賣的行為&#xff0c;僅…

關于“雙指針法“的總結

筆者這些天終于達成了只狼的全成就&#xff0c;甚是歡喜。然而樂極生悲&#xff0c;最近做了些算法題&#xff0c;竟沒有一道靠自己做出來。感覺算法題常常用到“雙指針法”呢……為什么到現在我還是做不出來這些算法題……今天就來試著總結一下它的使用場景吧。快慢指針法又名…