入隊,出隊操作原理:
由於隊列的隊頭和隊尾的位置是變化的,因而要設兩個指針和分別指示隊頭和隊尾元素在隊列中的位置,它們的初始值地隊列初始化時均應置爲0。入隊時將新元素插入所指的位置,然後將加1。出隊時,刪去所指的元素,然後將加1並返回被刪元素。
杜絕“假上溢”:
和棧類似,隊列中亦有上溢和下溢現象。此外,順序隊列中還存在“假上溢”現象。因爲在入隊和出隊的操作中,頭尾指針只增加不減小,致使被刪除元素的 空間永遠無法重新利用。因此,儘管隊列中實際的元素個數遠遠小於向量空間的規模,但也可能由於尾指針巳超出向量空間的上界而不能做入隊操作。
爲充分利用向量空間。克服上述假上溢現象的方法是將向量空間想象爲一個首尾相接的圓環,並稱這種向量爲循環向量,存儲在其中的隊列稱爲循環隊列(Circular Queue)。在循環隊列中進行出隊、入隊操作時,頭尾指針仍要加1,朝前移動。只不過當頭尾指針指向向量上界(QueueSize-1)時,其加1操作的結果是指向向量的下界0。
判斷循環隊列是否爲空(rear=front)
判斷循環隊列是否爲滿(解決這個問題有兩個辦法:一是增加一個參數,用來記錄數組中當前元素的個數;第二個辦法是,少用一個存儲空間,也就是數組的最後一個存數空間不用,當(rear+1)%maxsiz=front時,隊列滿;)。