迴圈佇列
覆盤:
isFull 的地方遺漏了取餘操作 , rear 的邊界處理沒想到
畫圖的時候沒走完整可能性 , 下次畫的時候可以每走一步,根據圖和虛擬碼執行一次所有函式
定義
data 存放資料的有限長度陣列
head 指向佇列頭的第一個元素, 初始化0
tail 指向佇列尾的最後一個元素 初始化 0
cap 容量 = len(data) -1
dataLen 陣列長度
畫圖
入隊
data[tail] = number
tail = tail++ % dataLen
return


出隊
if this.isEmpty() throw Exception
res=data[head]
head=head+1 % dataLen
return res
tail 迴圈

佇列滿狀態
if (tail+1)%dataLen==head
佇列空狀態
if head==tail

Accepted:
type MyCircularQueue struct {
data []int
head int
tail int
cap int
len int
}
/** Initialize your data structure here. Set the size of the queue to be k. */
func Constructor(k int) MyCircularQueue {
q := MyCircularQueue{data: make([]int, k+1), head: 0, tail: 0, cap: k, len: k+1}
return q
}
/** Insert an element into the circular queue. Return true if the operation is successful. */
func (this *MyCircularQueue) EnQueue(value int) bool {
if this.IsFull() {
return false
}
this.data[this.tail] = value
this.tail=(this.tail+1) % this.len
return true
}
/** Delete an element from the circular queue. Return true if the operation is successful. */
func (this *MyCircularQueue) DeQueue() bool {
if this.IsEmpty() {
return false
}
//res:=this.data[head]
this.head=(this.head+1) % this.len
return true
}
/** Get the front item from the queue. */
func (this *MyCircularQueue) Front() int {
if this.IsEmpty() {
return -1
}
return this.data[this.head]
}
/** Get the last item from the queue. */
func (this *MyCircularQueue) Rear() int {
if this.IsEmpty() {
return -1
}
if this.tail==0 {
return this.data[this.len-1]
}
return this.data[(this.tail-1)%this.len]
}
/** Checks whether the circular queue is empty or not. */
func (this *MyCircularQueue) IsEmpty() bool {
if this.head==this.tail {
return true
}
return false
}
/** Checks whether the circular queue is full or not. */
func (this *MyCircularQueue) IsFull() bool {
if (this.tail+1)%this.len==this.head {
return true
}
return false
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結