【數據結構與算法 | 基礎篇】環形數組模擬隊列

1. 前言

上文我們用環形單向鏈表實現了隊列.接下來我們用環形數組來模擬隊列.并實現了isFull(),isEmpty()等方法.

2. 環形數組模擬隊列

(1). Queue接口 :?

public interface Queue<E> {//向隊伍插入值, 插入成功返回true, 否則返回falseboolean offer(E value);//對隊頭獲取值, 但不移除E poll();//從隊頭獲取值, 并移除隊頭E peek();//判斷隊伍是否為空boolean isEmpty();//判斷隊列是否已滿boolean isFull();
}

(2). 環形數組模擬隊列

public class ArrayQueue<E> implements Queue<E>, Iterable<E>{//數組的容量private int capacity;//環形數組private E[] queue;//隊頭private int head = 0;//隊尾private int tail = 0;public ArrayQueue() {capacity = 10;}public ArrayQueue(int capacity) {this.capacity = capacity;//數組capacity個位置存儲數據, 剩下一個位置用來區分隊伍是滿了還是空了的情況queue = (E[]) new Object[capacity + 1];}@Overridepublic boolean offer(E value) {//如果隊伍已經滿了, 那么添加元素失敗if(isFull()) {return false;}queue[tail] = value;tail = (tail + 1) % queue.length;return true;
}@Overridepublic E poll() {//如果隊列為空, 那么返回nullif(isEmpty()) {return null;}return queue[head];}@Overridepublic E peek() {//如果隊列為空, 那么返回nullE value = queue[head];head = (head + 1) % queue.length;return value;}@Overridepublic boolean isEmpty() {return head == tail;}@Overridepublic boolean isFull() {//數組的長度queue.length并不等于數組的容量capacityreturn (tail+1) % queue.length == head;}@Overridepublic Iterator<E> iterator() {return new Iterator<E>() {int p = head;@Overridepublic boolean hasNext() {return p != tail;}@Overridepublic E next() {E value = queue[p];p++;return value;}};}
}

3. 單元測試

public class ArrayQueueTest {@Testpublic void test() {ArrayQueue<Integer> queue = new ArrayQueue<>(5);queue.offer(1);queue.offer(2);queue.offer(3);queue.offer(4);queue.offer(5);
//        for (Integer element : queue) {
//            System.out.print(element);
//        }//12345System.out.println(queue.poll());//1System.out.println(queue.peek());//1System.out.println(queue.poll());//2}
}

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

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

相關文章

【Linux】TCP協議【上】{協議段屬性:源端口號/目的端口號/序號/確認序號/窗口大小/緊急指針/標記位}

文章目錄 1.引入2.協議段格式4位首部長度16位窗口大小32位序號思考三個問題【demo】標記位URG: 緊急指針是否有效提升某報文被處理優先級【0表示不設置1表示設置】ACK: 確認號是否有效PSH: 提示接收端應用程序立刻從TCP緩沖區把數據讀走RST: 對方要求重新建立連接; 我們把攜帶R…

windows 設置系統字體 (win11 win10)

由于微軟的字體是有版權的&#xff0c;所以我打算替換掉 1.下載替換工具 github的項目&#xff0c;看起來很多人對微軟默認字體帶版權深惡痛絕。 項目地址&#xff1a;nomeiryoUi地址 這里選取最新的版本即可 2.打開軟件 這里顯示標題欄不能改&#xff0c;確認&#xff0c;其…

蓋雅技能發展云,助力制造企業人效合一

制造行業盡管經歷多次變革&#xff0c;但企業對人的管理始終是一項高度依賴經驗和耗費人力的工作。隨著供應鏈管理和生產設備的自動化、數字化升級&#xff0c;如何將第一生產要素——人&#xff0c;通過數字化的工具融入制造過程的閉環&#xff0c;對企業實現自動化工廠和智能…

力扣 滑動窗口題目總結

Leetcode3.無重復字符的最長子串 思路&#xff1a; 這道題主要用到思路是&#xff1a;滑動窗口 什么是滑動窗口&#xff1f; 其實就是一個隊列,比如例題中的 abcabcbb&#xff0c;進入這個隊列&#xff08;窗口&#xff09;為 abc 滿足題目要求&#xff0c;當再進入 a&#x…

牛客NC334 字典序第K小【困難 10叉樹 Java/Go/PHP/C++】,力扣 440. 字典序的第K小數字

題目 題目鏈接&#xff1a; https://www.nowcoder.com/practice/670c2bda374241d7ae06ade60de33e8b https://leetcode.cn/problems/k-th-smallest-in-lexicographical-order/description/ 本答案核心 10叉樹, 數學規律Java代碼 import java.util.*;public class Solution {…

大模型的靈魂解讀:Anthropic AI的Claude3 Sonnet可解釋性研究

大模型技術論文不斷&#xff0c;每個月總會新增上千篇。本專欄精選論文重點解讀&#xff0c;主題還是圍繞著行業實踐和工程量產。若在某個環節出現卡點&#xff0c;可以回到大模型必備腔調重新閱讀。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;則提供了大模型領域最新技…

Vue集成Iframe

一、應用場景&#xff0c;為什么要集成Iframe&#xff1f; 1、龐大項目拆分后&#xff0c;便于管理和部署&#xff0c;用集成Iframe的方法合并 2、避免功能重復開發&#xff0c;共用模塊可單獨開發為一個項目&#xff0c;既可獨立部署&#xff0c;也可集成到中臺系統 二、集成…

[算法][前綴和] [leetcode]724. 尋找數組的中心下標

題目地址 https://leetcode.cn/problems/find-pivot-index/description/ 題目描述 代碼 class Solution {public int pivotIndex(int[] nums) {int total Arrays.stream(nums).sum();//前綴和int prefixSum 0;int len nums.length;for(int i 0;i<len;i){if (i-1>0){p…

小豬APP分發:一站式托管服務,輕松玩轉應用市場

在當今移動應用爆炸式增長的時代&#xff0c;開發者們面臨的挑戰不再僅限于創意的火花和代碼的實現&#xff0c;更在于如何讓精心打造的應用快速觸達廣大用戶。這正是小豬APP分發www.appzhu.net應運而生的背景——作為一個全面、高效的APP托管服務分發平臺&#xff0c;它為開發…

基于PHP的物業管理的設計與實現

第1章 緒論... 1 1.1 研究背景與意義... 1 1.2 國內外發展現狀... 2 第2章 關鍵技術介紹... 3 2.1 PHP語言... 3 2.2 MySQL數據庫... 3 2.3 Zend框架... 4 2.4 B/S架構... 4 第3章 系統需求分析... 5 3.1 可行性分析... 5 3.1.1 技術可行性分析... 5 3.1.2 經濟可行…

解決Java中的IllegalArgumentException異常的正確方法

解決Java中的IllegalArgumentException異常的正確方法 引言 在Java編程中&#xff0c;IllegalArgumentException是一個常見的運行時異常&#xff0c;它通常在方法接收到不合法或不適當的參數時拋出。這篇文章將詳細介紹IllegalArgumentException異常的原因、如何診斷以及解決…

金職優學:分析央國企面試如何通關?

在當今競爭激烈的就業市場中&#xff0c;中央和國有企業&#xff08;以下簡稱“央國企”&#xff09;的面試機會對求職者來說是非常有吸引力的。這些企業通常擁有穩定的發展前景、良好的薪酬福利和廣闊的職業發展空間。但是&#xff0c;要想成功通過央國企的面試&#xff0c;求…

探索Python編程世界:從基礎到實戰

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、Python語言簡介與動態特性 代碼示例&#xff1a;動態類型與變量命名 二、Python應用領…

vue 表格表頭展示不下,顯示。。。;鼠標懸浮展示全部

vue 表格表頭展示不下&#xff0c;顯示。。。&#xff1b;鼠標懸浮展示全部 <templateslot-scope"scope"slot"header"><span:title"臨時證券類型"style"white-space:nowrap">{{ 臨時證券類型 }}</span></templa…

Terminal Web終端基礎(Web IDE 技術探索 二)

Terminal是web終端技術&#xff0c;類似cmd命令窗口&#xff0c;Webcontainer 中推薦使用的是Xterm.js&#xff0c;這里就不細說Xterm.js 的使用了&#xff0c;我們使用第三方庫來實現&#xff08;原生確實有點難用&#xff09;。 vue-web-terminal 一個由 Vue 構建的支持多內容…

【設計模式】JAVA Design Patterns——Bytecode(字節碼模式)

&#x1f50d;目的 允許編碼行為作為虛擬機的指令 &#x1f50d;解釋 真實世界例子 一個團隊正在開發一款新的巫師對戰游戲。巫師的行為需要經過精心的調整和上百次的游玩測試。每次當游戲設計師想改變巫師行為時都讓程序員去修改代碼這是不妥的&#xff0c;所以巫師行為以數據…

環形鏈表Ⅱ-力扣

第一種解法時哈希表&#xff0c;set在使用insert插入時&#xff0c;會返回一個pair&#xff0c;如果pair的值為0&#xff0c;則插入失敗&#xff0c;那么返回這個插入失敗的節點&#xff0c;就是入環的第一個節點&#xff0c;代碼如下&#xff1a; /*** Definition for singly…

導航【面試準備】

導航【面試準備】 前言版權導航【面試準備】面經準備 最后 前言 2024-5-20 12:47:11 以下內容源自《【面試準備】》 僅供學習交流使用 版權 禁止其他平臺發布時刪除以下此話 本文首次發布于CSDN平臺 作者是CSDN日星月云 博客主頁是https://jsss-1.blog.csdn.net 禁止其他平…

AcW木棒-XMUOJ恢復破碎的符咒木牌-DFS與剪枝

題目 思路 話不多說&#xff0c;直接上代碼 代碼 /* AcW木棒-XMUOJ恢復破碎的符咒木牌 搜索順序&#xff1a;從小到大枚舉最終的長度 len從前往后依次拼每根長度為len的木棍 優化&#xff1a; 1.優化搜索順序&#xff1a;優先選擇深度短的來搜索&#xff0c;故從大到小去枚…

【系統分析師】WEB開發-案例

文章目錄 1、WEB開發涉及內容1.1 負載均衡技術1.2 數據庫讀寫分離1.3 緩存 緩解讀庫壓力1.4 CDN1.5 WEB應用服務器1.6 整體結構1.6 相關技術1.6.1 redis相關(集群、持久化等)1.6.2 XML與JSON1.6.3 REST1.6.4 響應式web設計1.6.5 關于中臺1.6.6 Web系統分層 1、WEB開發涉及內容 …