package demo;
/**
* ???????
*
* @author Administrator
*
*/
public class LoopQueue<E> {
private E[] data;
private int front, tail;
private int size;
private final static int growFactor = 2;
private final static double compressThreadhold = 0.25;
public LoopQueue() {
this(10);
}
public LoopQueue(int capacity) {
if (capacity <= 0)
throw new IllegalArgumentException("????????С??0");
data = (E[]) new Object[capacity + 1];
front = 0;
tail = 0;
size = 0;
}
public int getCapacity() {
return data.length - 1;
}
public int getSize() {
return size;
}
public boolean isEmpty() {
return front == tail;
}
public boolean isFull() {
return (tail + 1) % data.length == front;
}
public void enQueue(E e) throws IllegalAccessException {
if (e == null)
throw new IllegalArgumentException("???????????");
if (isFull())
resize(data.length * growFactor);
data[tail] = e;
tail = (tail + 1) % data.length;
size++;
}
public E deQueue() {
E result = null;
if (isEmpty())
throw new IllegalAccessError("???????");
result = data[front];
front = (front + 1) % data.length;
size--;
if (size < (data.length * compressThreadhold))
resize(data.length / growFactor);
return result;
}
private void resize(int capacity) {
E[] ndata = (E[]) new Object[capacity + 1];
for (int i = 0; i < size; i++) {
ndata[i] = data[(i + front) % data.length];
}
System.out.println("???????....");
data = ndata;
front = 0;
tail = size;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("queue [");
for (int i = front; i != tail; i = (i + 1) % data.length) {
sb.append(data[i]);
sb.append(" ,");
}
sb.append("] tail");
return sb.toString();
}
public static void main(String[] args) throws Exception {
LoopQueue<Integer> lq = new LoopQueue<Integer>();
for (int i = 0; i < 50; i++) {
lq.enQueue(i);
}
System.out.println(lq);
System.out.println(lq.getCapacity() + ":" + lq.getSize());
System.out.println("==================================");
for (int i = 0; i < 40; i++) {
lq.deQueue();
}
System.out.println(lq);
System.out.println(lq.getCapacity() + ":" + lq.getSize());
}
}
環(huán)形隊(duì)列-數(shù)組簡單實(shí)現(xiàn)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門顾患,熙熙樓的掌柜王于貴愁眉苦臉地迎上來番捂,“玉大人,你說我怎么就攤上這事江解∩柙ぃ” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵犁河,是天一觀的道長鳖枕。 經(jīng)常有香客問我,道長桨螺,這世上最難降的妖魔是什么宾符? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮灭翔,結(jié)果婚禮上魏烫,老公的妹妹穿的比我還像新娘。我一直安慰自己肝箱,他們只是感情好哄褒,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著煌张,像睡著了一般呐赡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骏融,一...
- 文/蒼蘭香墨 我猛地睜開眼刷允,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了碧囊?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對(duì)情侶失蹤纤怒,失蹤者是張志新(化名)和其女友劉穎糯而,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泊窘,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡熄驼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烘豹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓜贾。...
- 正文 年R本政府宣布龟劲,位于F島的核電站,受9級(jí)特大地震影響轴或,放射性物質(zhì)發(fā)生泄漏昌跌。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一照雁、第九天 我趴在偏房一處隱蔽的房頂上張望蚕愤。 院中可真熱鬧,春花似錦饺蚊、人聲如沸萍诱。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽砂沛。三九已至,卻和暖如春曙求,著一層夾襖步出監(jiān)牢的瞬間碍庵,已是汗流浹背映企。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長得像苹享,于是被迫代替她去往敵國和親双絮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 隊(duì)列 隊(duì)列是一種特殊的線性表得问,特殊之處在于它只允許在表的前端(front)進(jìn)行刪除操作囤攀,而在表的后端(rear)進(jìn)...
- 簡述 隊(duì)列是一個(gè)有序列表,可以用數(shù)組或是鏈表來實(shí)現(xiàn)宫纬。遵循先入先出的原則焚挠。即:先存入隊(duì)列的數(shù)據(jù),要先取出漓骚。后存入的要...
- 數(shù)組模擬環(huán)形隊(duì)列 充分利用數(shù)組,因此將數(shù)組看做是一個(gè)環(huán)形的蝌衔。(通過取模的方式來實(shí)現(xiàn)即可) 思路如下:1.font變...
- 基本思想: 環(huán)形展開成鏈表,在鏈表上模擬環(huán)形隊(duì)列蝌蹂; head 和tail只增不減噩斟,add 、remove孤个、size...