佇列,一種限定性的線性表。它只允許在表一端進行插入,而在表的另一端進行刪除操作。
基於此,我們定義了乙個資料結構,包含首尾指標
class
queue
置空佇列時 ,將rear=front=-1;
public
static queue initemptyqueue()
在不考慮隊列為空的情況下,出佇列頭指標front++,在不考慮溢位的情況下,進佇列尾指標rear++
public
static boolean inqueue(queue queue,object value)
public
static object outqueue(queue queue)
但是這樣會遇到問題,如下圖
當隊尾指標指向了陣列的最後乙個位置,而隊頭指標不在0號位置時,他會出現假溢位的現象,即陣列中有空位置,但是預設已經滿了。為了解決這一問題,我們引入了迴圈佇列,即將隊尾和對頭連線起來
迴圈佇列的資料結構還是和普通佇列一樣,只不過在設定空佇列時將,rear和front設為了max_size-1
class
cyclequeue
public
static cyclequeue initemptyqueue()
在進行判空的時候,只需要判斷front和rear是否相等
public
static
boolean
isempty(cyclequeue cyclequeue)
接下來就是佇列中最重要的兩個函式,出佇列和入佇列。出佇列的思想:當佇列不為空的時候,將佇列的第乙個元素出出佇列,用數學公式表達就是front=(front+1)%max_size,然後返回該位置;進佇列的思想是,先判斷front指標和rear指標是否直接相鄰,若是直接相鄰,則表示佇列已滿,無法插入,若不相鄰,則直接插入,插入的位置為:rear=(rear+1)%max_size.
public
static boolean inqueue(cyclequeue cyclequeue,object value)
public
static object outqueue(cyclequeue cyclequeue)
cyclequeue.front=(cyclequeue.front+1)%max_size;
return cyclequeue.data[cyclequeue.front];
}
為甚麼要使用練佇列呢?其實和鏈棧的思想是一致的,因為順序佇列總是需要分配固定的記憶體空間,若分配過大,容易造成空間浪費,若是分配過小,容易造成溢位,所以我們才使用了鏈佇列,在使用的過程中動態的分配空間。首先先看一下鏈佇列的資料結構
//將頭尾指標封裝在一起
class
linkqueue
//鏈佇列節點的型別
class
node
首先建立乙個帶頭結點的空佇列
public
static linkqueue initemptylinkqueue()
判斷佇列是否為空的思想和迴圈佇列相同,即判斷頭尾指標是否相等
public
static
boolean
isempty(linkqueue linkqueue)
最後看進佇列和出佇列兩個函式。進佇列的思想是:利用單鏈表尾插法的思想插入到鍊錶的尾部,具體可參考單鏈表的建立;出佇列的思想是:如果佇列不為空,則將對列的頭指標指向第乙個節點的下乙個節點,然後返回第乙個節點的值。
public
static boolean inqueue(linkqueue linkqueue,object value)
public
static object outqueue(linkqueue linkqueue)
node node=linkqueue.front.next;
linkqueue.front.next=node.next;
if(linkqueue.front.next==null)
linkqueue.rear=linkqueue.front;
return node.value;
}
至此。佇列的基本操作就完成了。 佇列(迴圈佇列 鏈佇列)
迴圈佇列 cirqueue.h 名稱 迴圈佇列 基於陣列 templateclass cirqueue q size 1 多申請乙個位置,保證隊滿 對空容易判定!cirqueue void enter datatype data 入隊操作 datatype shift 出隊操作 datatype g...
佇列 迴圈佇列與鏈佇列比較
對於迴圈佇列與鏈佇列的比較,可以從兩方面來考慮 1 從時間上,其實它們的基本操作都是常數時間,即都為0 1 的,不過迴圈佇列是事先申請好空間,使用期間不釋放,而對於鏈佇列,每次申請和釋放結點也會存在一些時間開銷,如果入隊出隊頻繁,則兩者還是有細微差異。2 對於空間上來說,迴圈佇列必須有乙個固定的長度...
佇列(單鏈佇列和迴圈佇列)
和線性表類似,佇列也有兩種儲存表示 鏈佇列 為操作方便,給鏈佇列新增乙個頭結點 佇列的鏈式儲存結構 typedef struct qnodeqnode,queueptr typedef struct linkqueue 1 include2 include3 include4 typedef str...