86 lines
1.3 KiB
Go
86 lines
1.3 KiB
Go
package main
|
|
|
|
type MyCircularDeque struct {
|
|
maxSize int
|
|
|
|
deque []int
|
|
size int
|
|
i int
|
|
}
|
|
|
|
func Constructor(k int) MyCircularDeque {
|
|
return MyCircularDeque{
|
|
maxSize: k,
|
|
deque: make([]int, k),
|
|
size: 0,
|
|
i: 0,
|
|
}
|
|
}
|
|
|
|
func (this *MyCircularDeque) InsertFront(value int) bool {
|
|
if this.IsFull() {
|
|
return false
|
|
}
|
|
|
|
this.i = (this.i - 1 + this.maxSize) % this.maxSize
|
|
this.deque[this.i] = value
|
|
this.size++
|
|
|
|
return true
|
|
}
|
|
|
|
func (this *MyCircularDeque) InsertLast(value int) bool {
|
|
if this.IsFull() {
|
|
return false
|
|
}
|
|
|
|
this.deque[(this.i+this.size)%this.maxSize] = value
|
|
this.size++
|
|
|
|
return true
|
|
}
|
|
|
|
func (this *MyCircularDeque) DeleteFront() bool {
|
|
if this.IsEmpty() {
|
|
return false
|
|
}
|
|
|
|
this.size--
|
|
this.i = (this.i + 1) % this.maxSize
|
|
|
|
return true
|
|
}
|
|
|
|
func (this *MyCircularDeque) DeleteLast() bool {
|
|
if this.IsEmpty() {
|
|
return false
|
|
}
|
|
|
|
this.size--
|
|
|
|
return true
|
|
}
|
|
|
|
func (this *MyCircularDeque) GetFront() int {
|
|
if this.IsEmpty() {
|
|
return -1
|
|
}
|
|
|
|
return this.deque[this.i]
|
|
}
|
|
|
|
func (this *MyCircularDeque) GetRear() int {
|
|
if this.IsEmpty() {
|
|
return -1
|
|
}
|
|
|
|
return this.deque[(this.i+this.size-1)%this.maxSize]
|
|
}
|
|
|
|
func (this *MyCircularDeque) IsEmpty() bool {
|
|
return this.size == 0
|
|
}
|
|
|
|
func (this *MyCircularDeque) IsFull() bool {
|
|
return this.size == this.maxSize
|
|
}
|