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 }