type MyCircularDeque struct { deque []int size int length int beg int end int } /** Initialize your data structure here. Set the size of the deque to be k. */ func Constructor(k int) (deque MyCircularDeque) { deque.deque = make([]int, k) deque.size, deque.beg = k, 1 return } /** Adds an item at the front of Deque. Return true if the operation is successful. */ func (this *MyCircularDeque) InsertFront(value int) bool { if this.IsFull() { return false } this.beg = (this.beg + this.size - 1) % this.size this.deque[this.beg] = value this.length++ return true } /** Adds an item at the rear of Deque. Return true if the operation is successful. */ func (this *MyCircularDeque) InsertLast(value int) bool { if this.IsFull() { return false } this.end = (this.end + 1) % this.size this.deque[this.end] = value this.length++ return true } /** Deletes an item from the front of Deque. Return true if the operation is successful. */ func (this *MyCircularDeque) DeleteFront() bool { if this.IsEmpty() { return false } this.beg = (this.beg + 1) % this.size this.length-- return true } /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ func (this *MyCircularDeque) DeleteLast() bool { if this.IsEmpty() { return false } this.end = (this.end + this.size - 1) % this.size this.length-- return true } /** Get the front item from the deque. */ func (this *MyCircularDeque) GetFront() int { if this.IsEmpty() { return -1 } return this.deque[this.beg] } /** Get the last item from the deque. */ func (this *MyCircularDeque) GetRear() int { if this.IsEmpty() { return -1 } return this.deque[this.end] } /** Checks whether the circular deque is empty or not. */ func (this *MyCircularDeque) IsEmpty() bool { return this.length == 0 } /** Checks whether the circular deque is full or not. */ func (this *MyCircularDeque) IsFull() bool { return this.length == this.size } /** * Your MyCircularDeque object will be instantiated and called as such: * obj := Constructor(k); * param_1 := obj.InsertFront(value); * param_2 := obj.InsertLast(value); * param_3 := obj.DeleteFront(); * param_4 := obj.DeleteLast(); * param_5 := obj.GetFront(); * param_6 := obj.GetRear(); * param_7 := obj.IsEmpty(); * param_8 := obj.IsFull(); */