複製鏈接
請複製以下鏈接發送給好友

假溢出

鎖定
系統作為隊列用的存儲區還沒有滿,但隊列卻發生了溢出,我們把這種現象稱為“假溢出”。
中文名
假溢出
所屬學科
計算機

目錄

假溢出舉例

設順序存儲隊列用一維數組q[m]表示,其中m為隊列中元素個數,隊列中元素在向量中的下標從0到m-1。
設隊頭指針為front,隊尾指針是rear,約定front指向隊頭元素的前一位置,rear指向隊尾元素。當front等於-1時隊空,rear等於m-1時為隊滿。由於隊列的性質(“刪除”在隊頭而“插入”在隊尾),所以當隊尾指針rear等於m-1時,若front不等於-1,則隊列中仍有空閒單元,所以隊列並不是真滿。這時若再有入隊操作,會造成假“溢出”。

假溢出解決辦法

一是將隊列元素向前“平移”(佔用0至rear-front-1);
二是將隊列看成首尾相連,即循環隊列(0..m-1)。
在循環隊列下,仍定義front=rear時為隊空,而判斷隊滿則用兩種辦法,一是用“犧牲一個單元”,即rear+1=front(準確記是rear+1%m=front,m是隊列容量)時為隊滿。
另一種解法是“設標記”方法,如設標記tag,tag等於0情況下,若刪除時導致front=rear為隊空;tag=1情況下,若因插入導致front=rear則為隊滿。