1.佇列(queue)
理解佇列,可以參考實際生活中的排隊,排隊的人只能從隊尾加入,從隊首出隊,這也是佇列的特點。即只能從隊尾新增元素,從隊首刪除元素,這也是常說的先進先出(first in first out)。
/*
模擬佇列的資料結構:佇列的特點是先進先出,元素只能從佇列的尾部新增,從佇列的頭部出隊。
模擬佇列的方式:
1.使用迴圈佇列,目的是解決假溢位的問題。這裡使用迴圈佇列。
2.使用鍊錶。自定義乙個單向鍊錶即可。
3.使用兩個棧。乙個棧專門做入隊,乙個棧專門做出隊。入隊的時候,將所有元素放到棧1中,出隊的時候,將棧1中的
元素取出到棧2,則棧2的棧頂對應佇列的隊頭,棧底對應佇列的隊尾,此時棧2用彈棧的方式,取出的即是佇列的隊頭。如果此時
再向佇列中新增元素,則直接向棧1中新增,如果要取出元素,則先判斷棧2是否為空,如果棧2不為空,說明棧2中的元素是佇列的
頭部元素,此時直接棧2彈棧,如果棧2為空,則依然現將棧1資料移動到棧2,棧2再彈棧。
*/class
myqueue
public
myqueue
(int newcapacity)
//判斷佇列是否為空
public boolean isempty()
//向佇列中新增元素
public boolean addelement
(object o)
else
else
size++;}
}else
return state;
}//從佇列中刪除元素。從隊頭取出元素,並返回值
public object getelement()
else
//如果隊頭的下標等於隊尾下標,說明只有乙個元素,取出後,隊頭、隊尾都歸0
else
if(front == rear)
//如果隊頭的下標大於隊尾下標
else
if(front > rear)
else
} size--;}
return target;
}//從隊頭到隊尾,遍歷佇列中的元素
public
void
showqueue()
}else
for(
int i =
0;i<=rear;i++)}
}}}/*
測試類*/
public
class
myqueuedemo
}
結果:
小結:談談為什麼使用迴圈佇列的問題。佇列是線性結構,在儲存結構上既可以使用順序儲存也可以使用鏈式儲存。
當使用陣列來實現佇列時,會出現下面的問題,如圖,隊尾已經是陣列的最後一位,如果再新增元素,會造成陣列下標越界,但實際上,陣列的第1,2個元素為空,陣列還沒有滿,這種現象稱為假溢位,即:容器並未滿,卻已經報下標越界問題。如果採用對陣列擴容的方法來避免下標越界,那麼隊頭前的所有空間都將浪費。
最好的提高空間利用率的方法是,將新增的元素放在隊頭前的空閒位置上。如此一來,就像是隊尾緊跟隊頭一樣,看起來像乙個迴圈,所以稱這種解決方式為迴圈佇列。
線性結構 佇列
佇列 銀行業務佇列簡單模擬 25分 設某銀行有a b兩個業務視窗,且處理業務的速度不一樣,其中a視窗處理速度是b視窗的2倍 即當a視窗每處理完2個顧客時,b視窗處理完1個顧客。給定到達銀行的顧客序列,請按業務完成的順序輸出顧客序列。假定不考慮顧客先後到達的時間間隔,並且當不同視窗同時處理完2個顧客時...
線性結構 佇列
佇列結構 佇列結構 queue 一種受限的線性結構 1.特點 1.佇列是一種受限的線性結構 2.先進先出,後進後出 3.在前端插入,在後端彈出 2.佇列的應用 1.列印佇列 印表機取出乙個列印乙個,直到所有文件被列印 2.執行緒佇列 多工的並行處理時,將所有的人物放入佇列,依次啟動執行緒進行處理 3...
線性結構 佇列 Queue
像棧一樣,佇列 queue 也是一種線性表,它的特性是先進先出,插入在一端,刪除在另一端。就像排隊一樣,剛來的人入隊 push 要排在隊尾 rear 每次出隊 pop 的都是隊首 front 的人。如圖1,描述了乙個佇列模型。佇列 queue 與棧一樣,是一種線性儲存結構,它具有如下特點 佇列中的資...