佇列實現
1.佇列是一種有序列表,遵循先進先出的原則。
1.陣列模擬佇列,分別有隊頭和隊尾指標,從-1開始,進隊時隊尾指標自增,出隊時隊頭指標自增,隊頭是指向第乙個資料的前乙個位置。示意圖如下:
package array;
public
class
queuearray
}//使用陣列模擬佇列-編寫乙個array-queue類
class
arrayqueue
//判斷佇列是否滿了
public
boolean
isfull()
//判斷佇列是否為空
public
boolean
isempty()
//向佇列新增資料
public
void
adddata
(int n)
arr[
++rear]
= n;
// 隊尾指標後移,向隊尾新增資料
}//向佇列獲取資料,出佇列
public
intgetdata
(int n)
return arr[
++front]
;//隊頭的前乙個位置後移,相當於出佇列
}//獲取隊頭的資料資訊
public
intshowfirst()
return arr[front+1]
;//返回隊頭的資料
}//輸出佇列資訊
public
void
showdata()
for(
int i=front+
1;i}
測試結果:符合佇列的進隊出隊特性。
2.環形佇列
這裡由於佇列是環形的,所以必須是自增的話要取模,約定如下:
*front是佇列的第乙個元素位置,rear是佇列最後元素的後乙個位置,用來約定環形佇列
*front和rear初始值從0開始,滿隊判斷:(rear+1)%maxsizefront,空佇列判斷:frontrear;
*新增和刪除,注意自增的話要取模rear=(rear+1)%maxsize,取數也要取模i%maxsize
*環形佇列的有效資料判斷(rear+maxsize-front)%maxsize;
package array;
public
class
circlequeuearray
}//使用陣列模擬佇列
class
circlearrayqueue
//判斷佇列是否滿了
public
boolean
isfull()
//判斷佇列是否為空
public
boolean
isempty()
//向佇列新增資料
public
void
adddata
(int n)
arr[rear]
= n;
// 因為rear是指向最後乙個元素的後乙個位置
rear=
(rear+1)
%maxsize;
//因為是環形列表,所有自增考慮是否滿環
}//向佇列獲取資料,出佇列
public
intgetdata
(int n)
//這裡front指向第乙個元素,因此要用臨時變數儲存記錄,front自增要取模,然後返回臨時變數
int temp =arr[front]
; front =
(front+1)
%maxsize;
//自增要取模
return temp;
//隊頭的前乙個位置後移,相當於出佇列
}//輸出佇列資訊
public
void
showdata()
for(
int i=front;i
countdata()
;i++)}
//計算當前環形佇列的有效資料個數
public
intcountdata()
//獲取隊頭的資料資訊
public
intshowfirst()
return arr[front]
;//返回隊頭的資料
}}
golang資料結構之環形佇列
目錄結構 circlequeue 環型佇列 type circlequeue struct push 向佇列中新增乙個值 func q circlequeue push val int err error q.array q.rear val 隊尾不包含元素 q.rear q.rear 1 q.ma...
java資料結構 環形佇列
arrayqueue存在乙個問題,假設當尾部插入元素滿了,頭部又刪掉了一些元素,這種情況下,就誤認為空間滿了,造成了假溢位,實際上頭部刪除了元素留出了空間。這時候環形佇列就解決了這樣的乙個問題,環形佇列的front指標始終指向當前佇列的最後位置 end指標始終指向第乙個元素的前乙個位置為 1,儲存元...
資料結構之GO實現環形佇列
環形佇列是 佇列的一種特殊形式。首先介紹佇列,然後引申出迴圈佇列。佇列又稱為 先進先出 fifo 線性表 限定插入操作只能在隊尾進行,而刪除操作只能在隊首進行 佇列也可以採用順序儲存結構或鍊錶結構來實現,分別稱為順序佇列和鏈佇列,下面就來簡單實現。package main import errors...