| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | 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(); */
 |