Java數(shù)據(jù)結(jié)構(gòu)之隊(duì)列(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
隊(duì)列的定義:
隊(duì)列(Queue)是只允許在一端進(jìn)行插入,而在另一端進(jìn)行刪除的運(yùn)算受限的線性表。
(1)允許刪除的一端稱為隊(duì)頭(Front)。
(2)允許插入的一端稱為隊(duì)尾(Rear)。
(3)當(dāng)隊(duì)列中沒有元素時(shí)稱為空隊(duì)列。
(4)隊(duì)列亦稱作先進(jìn)先出(First In First Out)的線性表,簡(jiǎn)稱為FIFO表。
隊(duì)列的修改是依先進(jìn)先出的原則進(jìn)行的。新來(lái)的成員總是加入隊(duì)尾,每次離開的成員總是隊(duì)列頭上的(不允許中途離隊(duì))。
隊(duì)列的存儲(chǔ)結(jié)構(gòu)及實(shí)現(xiàn)
隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)
(1) 順序隊(duì)列的定義:
隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)稱為順序隊(duì)列,順序隊(duì)列實(shí)際上是運(yùn)算受限的順序表。
(2)順序隊(duì)列的表示:
和順序表一樣,順序隊(duì)列利用內(nèi)存中一段連續(xù)的存儲(chǔ)空間來(lái)存放當(dāng)前隊(duì)列中的元素。
由于隊(duì)列的隊(duì)頭和隊(duì)尾的位置是變化的,設(shè)置兩個(gè)指針front和rear分別指示隊(duì)頭元素和隊(duì)尾元素,它們的初值在隊(duì)列初始化時(shí)均應(yīng)置為0。
(3)順序隊(duì)列的基本操作
入隊(duì)時(shí):將新元素插入rear所指的位置的后一位。
出隊(duì)時(shí):刪去front所指的元素,然后將front加1并返回被刪元素。
(4)順序表的溢出現(xiàn)象
①“下溢”現(xiàn)象
當(dāng)隊(duì)列為空時(shí),做出隊(duì)運(yùn)算產(chǎn)生的溢出現(xiàn)象?!跋乱纭笔钦,F(xiàn)象,常用作程序控制轉(zhuǎn)移的條件。
② "真上溢"現(xiàn)象
當(dāng)隊(duì)列滿時(shí),做進(jìn)棧運(yùn)算產(chǎn)生空間溢出的現(xiàn)象?!罢嫔弦纭笔且环N出錯(cuò)狀態(tài),應(yīng)設(shè)法避免。
③ "假上溢"現(xiàn)象
由于入隊(duì)和出隊(duì)操作中,頭尾指針只增加不減小,致使被刪元素的空間永遠(yuǎn)無(wú)法重新利用。當(dāng)隊(duì)列中實(shí)際的元素個(gè)數(shù)遠(yuǎn)遠(yuǎn)小于內(nèi)存中本分配的空間時(shí),也可能由于尾指針已超越向量空間的上界而不能做入隊(duì)操作。該現(xiàn)象稱為"假上溢"現(xiàn)象。如下圖
循環(huán)隊(duì)列:
如上圖所示,這種頭尾相接的順序存儲(chǔ)結(jié)構(gòu)稱為循環(huán)隊(duì)列(circular queue)。
循環(huán)隊(duì)列中需要注意的幾個(gè)重要問題:
①隊(duì)空的判定條件,隊(duì)空的條件是front=rear;
②隊(duì)滿的判定條件,(rear+1)%QueueSize=front。QueueSize為隊(duì)列初始空間大小。
循環(huán)隊(duì)列的java實(shí)現(xiàn)代碼
public class Queue { private int size; //當(dāng)前隊(duì)列元素個(gè)數(shù) private int[] Array;//存放隊(duì)列元素的數(shù)組 private int MaxSize;//隊(duì)列最大尺寸 //構(gòu)造函數(shù) public Queue(int maxsize){ MaxSize = maxsize; Array = new int[MaxSize]; size = 0; } //判斷隊(duì)列是否為空 public int IsEmpty(){ if(size == 0) return 0; return -1; } //判斷隊(duì)列是否為滿 public int IsFull(){ if(size == MaxSize) return 0; return -1; } //返回隊(duì)列長(zhǎng)度 public int GetLength(){ return this.size; } //隊(duì)列插入 public int EnQueue(int x){ //若隊(duì)列不滿,把x插到隊(duì)尾,返回0;否則返回-1; if(IsFull() == -1){ Array[size] = x; size++; return 0; } return -1; } //隊(duì)列刪除 public int DeEmpty(){ //若隊(duì)列不空,則刪除對(duì)頭元素,返回該元素的值,否則返回-404; if(IsEmpty() == -1){ int x = Array[0]; for(int j=0; j<MaxSize-1; j++) Array[j] = Array[j+1];//前移 MaxSize--; return x; } return -404; } //讀取隊(duì)列頭部元素 public int GetFront(){ //讀隊(duì)頭,若隊(duì)列非空,則返回隊(duì)列頭元素的值,否則返回-404; if(IsEmpty() == -1){ return Array[0]; } return -404; } }
以上所述是小編給大家介紹的Java數(shù)據(jù)結(jié)構(gòu)之隊(duì)列(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- struts2數(shù)據(jù)處理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- 數(shù)據(jù)庫(kù)連接池c3p0配置_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- 深入理解Java運(yùn)行時(shí)數(shù)據(jù)區(qū)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Java數(shù)據(jù)結(jié)構(gòu)之圖(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
- Java數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組(動(dòng)力節(jié)點(diǎn)之Java學(xué)院整理)
- Java數(shù)據(jù)結(jié)構(gòu)之散列表(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
- java一個(gè)數(shù)據(jù)整理的方法代碼實(shí)例
相關(guān)文章
Java爬蟲范例之使用Htmlunit爬取學(xué)校教務(wù)網(wǎng)課程表信息
htmlunit 是一款開源的java 頁(yè)面分析工具,讀取頁(yè)面后,可以有效的使用htmlunit分析頁(yè)面上的內(nèi)容。項(xiàng)目可以模擬瀏覽器運(yùn)行,被譽(yù)為java瀏覽器的開源實(shí)現(xiàn)。今天我們用這款分析工具來(lái)爬取學(xué)校教務(wù)網(wǎng)課程表信息2021-11-11學(xué)習(xí)Java之Java中的異常處理機(jī)制詳解
在本文中,小編將帶領(lǐng)大家來(lái)學(xué)習(xí)Java的異常處理機(jī)制,包括異常機(jī)制、異常類型、如何捕獲異常、如何拋出異常以及如何創(chuàng)建自定義異常等核心內(nèi)容,感興趣的同學(xué)跟著小編一起來(lái)看看吧2023-08-08Java Web監(jiān)聽器Listener接口原理及用法實(shí)例
這篇文章主要介紹了Java Web監(jiān)聽器Listener接口原理及用法實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Java?數(shù)據(jù)結(jié)構(gòu)進(jìn)階二叉樹題集下
二叉樹可以簡(jiǎn)單理解為對(duì)于一個(gè)節(jié)點(diǎn)來(lái)說(shuō),最多擁有一個(gè)上級(jí)節(jié)點(diǎn),同時(shí)最多具備左右兩個(gè)下級(jí)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。本文將帶你通過(guò)實(shí)際題目來(lái)熟練掌握2022-04-04SpringCloud Feign參數(shù)問題及解決方法
這篇文章主要介紹了SpringCloud Feign參數(shù)問題及解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Mybatis中updateBatch實(shí)現(xiàn)批量更新
本文主要介紹了Mybatis中updateBatch實(shí)現(xiàn)批量更新,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03詳解Maven倉(cāng)庫(kù)之本地倉(cāng)庫(kù)、遠(yuǎn)程倉(cāng)庫(kù)
這篇文章主要介紹了Maven倉(cāng)庫(kù)之本地倉(cāng)庫(kù)、遠(yuǎn)程倉(cāng)庫(kù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12詳解spring cloud使用Hystrix實(shí)現(xiàn)單個(gè)方法的fallback
本篇文章主要介紹了詳解spring cloud-使用Hystrix實(shí)現(xiàn)單個(gè)方法的fallback,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01