日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2021 - 9 下旬 数据结构-线性表-循环队列-java实现代码

發(fā)布時間:2025/3/20 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021 - 9 下旬 数据结构-线性表-循环队列-java实现代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
//循環(huán)隊列,本質就是用動態(tài)數(shù)組實現(xiàn)的,且出隊入隊時間復雜度均O(1)的隊列 //相比普通隊列,增設一個front指針,代表隊頭,代表下一個出隊的元素 //循環(huán)隊列的重點在于隊頭隊尾的元素的下標的計算(本質是映射循環(huán)隊列中的真實索引),以及隊列滿的判斷條件 //真實元素下標:(index+front)%elements.length(index為隊列中下標,計算得真實數(shù)組中下標) // 隊尾:index =size-1 入隊位置 index =size 出隊位置(隊頭):front(移動至(front+1)%elements.length)public class CircleQueueZH<E> {private int size;private int front;private E elements[];private static final int DEFAULT_CAPACITY = 10;//默認數(shù)組大小,可以擴容public CircleQueueZH(){elements = (E[]) new Object[DEFAULT_CAPACITY];//構造函數(shù),泛型這里用Object類時,別忘了強制轉換為E}//計算隊頭隊尾元素下標可以寫一個函數(shù),用來映射循環(huán)隊列中的真實索引public int realIndexCaculate(int index){return (index+front)%elements.length;//!!!//就是要找隊列中的下標為index的(第index+1個)元素,返回它在我們數(shù)組里的真實下標//我覺得影響以后的可讀性就沒用}//動態(tài)擴容函數(shù),之前寫過一個int版,現(xiàn)在又拿過來用了,把2倍擴容改為了位運算的1.5倍擴容private void ifNeedEnLarge(int needCapacity){int oldcapacity = elements.length;if (needCapacity<=oldcapacity){return;}else{int newcapacity = oldcapacity + (oldcapacity>>1);//位運算效率高,相當于除2E[] newElements = (E[]) new Object[newcapacity];for (int i=0;i<size;i++){//循環(huán)隊列獲取第i個元素的下標的方式:newElements[i]=elements[(i+front)%elements.length];//這個擴容的方式就是把隊列里的元素依次出隊到另一個隊列里,同時重置隊頭的位置}front = 0;elements = newElements;System.out.println("enLarge Success"+" newCapacity = "+newcapacity);}}public int size(){return size;}public boolean isEmpty(){return size == 0;}//清空循環(huán)隊列,涉及到元素的真實下標計算,同擴容那里public void clear(){for (int i = 0;i<size;i++){elements[(i+front)%elements.length]=null;}size = 0;front = 0;}//出隊,主要注意對front的處理public E deQueue(){E element = elements[front];elements[front] = null;front = (front+1)%elements.length;size--;return element;}//入隊,主要注意對入隊位置的計算public void enQueue(E element){ifNeedEnLarge(size+1);elements[(front+size)% elements.length] = element;size++;}public String arrayPrint(){//這里沒重寫toString函數(shù),直接寫了個打印函數(shù),我改的前面的int動態(tài)數(shù)組版本的,是我懶了//這里用了stringBuilder類,一看就明白應該StringBuilder string = new StringBuilder();string.append("size = ").append(size).append(" ").append("front= ").append(elements[front]).append(" [");for (int i = 0; i< elements.length; i++ ){if (elements[i]==null){string.append("null,");}else {string.append(elements[i]).append(",");}}string.append("]");return string.toString();//這里是因為在這里面string是stringbuilder類的對象,不是string類的,不能作為返回值,所以事先轉換一下//輸出樣例 size = 13 front= 5 [0,1,2,null,null,5,6,7,8,9,10,11,12,13,14,]} } 《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的2021 - 9 下旬 数据结构-线性表-循环队列-java实现代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。