資料結構 Java實現佇列

2021-07-25 03:06:44 字數 1824 閱讀 8808

佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(head)進行刪除操作,而在表的後端(tail)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。

佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入隊,從佇列中刪除乙個佇列元素成為出隊。因為佇列只允許在一段插入,在另一端刪除,所以只有最早進入佇列的元素才能最先從佇列中刪除,故佇列又稱為先進先出(fifo—first in first out)線性表。

迴圈佇列

在實際使用佇列時,為了使佇列空間能重複使用,無論插入或刪除,一旦tail指標增1或head指標增1 時超出了所分配的佇列空間,就讓它指向這片連續空間的起始位置。自己真從maxsize-1增1變到0,可用取餘運算tail%maxsize和head%maxsize來實現。這實際上是把佇列空間想象成乙個環形空間,環形空間中的儲存單元迴圈使用,用這種方法管理的佇列也就稱為迴圈佇列。處了一些簡單應用之外,真正實用的佇列時迴圈佇列。

在迴圈佇列中,當隊列為空時,有head=tail,而當所有佇列空間全佔滿時,也有head=tail。為了區別這兩種情況,規定迴圈佇列最多只能有maxsize-1個佇列元素,當迴圈佇列中只剩下乙個空儲存單元時,佇列就已經滿了。因此,佇列判空的條件時head=tail,而佇列判滿的條件時head=(tail+1)%maxsize。隊空和隊滿的情況如圖:

本文講述使用陣列實現迴圈佇列,是使用兩個棧實現佇列

**實現

package com.billjiang.queue;

/** * created by billjiang on 2016/11/30.

* 使用陣列實現迴圈佇列

*/public

class queuearray

//入佇列

public boolean put(t obj)

array[tail]=obj;

tail=(tail+1)%array.length;

return

true;

}//獲取佇列頭 而不出佇列

public t peek()

return array[head];

}//出佇列

public t poll()

int cur=head;

head=(head+1)%array.length;

return array[cur];

}public

intsize()else

}public boolean isempty()

public boolean isfull()

}

實現**

package com.billjiang.queue;

import com.billjiang.stack.stacklist;

/** * created by billjiang on 2016/12/1.

* 兩個棧實現佇列,stack1入棧,stack2出棧,如果stack2為空則從stack1導過來

*/public

class queuestack

public boolean put(t element)

stack1.push(element);

return

true;

}public t poll()else

return stack2.pop();}}

public

intsize()

}

java資料結構 佇列

1.用鍊錶實現單向佇列 package com.jzm.stackqueuetree public class linkqueue end constructor private class node end constructor private t getdata private node ge...

java資料結構 佇列

佇列 queue 是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表。1 允許刪除的一端稱為隊頭 front 2 允許插入的一端稱為隊尾 rear 3 當佇列中沒有元素時稱為空佇列。4 佇列亦稱作先進先出 first in first out 的線性表,簡稱為fifo表。佇列的修改是依先進...

Java佇列資料結構

佇列 queue 是一種採用先進先出 fifo 策略的抽象資料結構,它的想法來自於生活中排隊的策略。顧客在付款結賬的時候,按照到來的先後順序排隊結賬,先來的顧客先結賬,後來的顧客後結賬。它的特點是一種只允許在一端進行插入,在另一端進行刪除的線性表結構。執行插入的一端叫隊尾 rear 允許刪除的一端叫...