佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(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 允許刪除的一端叫...