设计循环双端队列
题目如下
解题思路
使用数组,来开拓空间,实现队列的存储。
public class MyCircularDeque
{
private int _length;
private int _maxSize;
private int _pFront;
private int _pRear;
private readonly int[] _dataset;
/** Initialize your data structure here. Set the size of the deque to be k. */
public MyCircularDeque(int k)
{
_dataset = new int[k];
_maxSize=k;
_length=0;
_pFront=0;
_pRear=0;
}
/** Adds an item at the front of Deque. Return true if the operation is successful. */
public bool InsertFront(int value)
{
if(_maxSize==_length)
return false;
if(_length==0)
_dataset[_pFront]=value;
else
{
_pFront=(_pFront-1+_maxSize)%_maxSize;
_dataset[_pFront]=value;
}
_length++;
return true;
}
/** Adds an item at the rear of Deque. Return true if the operation is successful. */
public bool InsertLast(int value)
{
if(_maxSize==_length)
return false;
if(_length==0)
_dataset[_pRear]=value;
else
{
_pRear=(_pRear+1)%_maxSize;
_dataset[_pRear]=value;
}
_length++;
return true;
}
/** Deletes an item from the front of Deque. Return true if the operation is successful. */
public bool DeleteFront()
{
if(IsEmpty())
return false;
else
{
_pFront=(_pFront+1)%_maxSize;
_length--;
}
if(_length==0)
_pFront=_pRear;
return true;
}
/** Deletes an item from the rear of Deque. Return true if the operation is successful. */
public bool DeleteLast()
{
if(IsEmpty())
return false;
else
{
_pRear=(_pRear-1+_maxSize)%_maxSize;
_length--;
}
if(_length==0)
_pFront=_pRear;
return true;
}
/** Get the front item from the deque. */
public int GetFront()
{
if(IsEmpty())
return -1;
else
return _dataset[_pFront];
}
/** Get the last item from the deque. */
public int GetRear()
{
if(IsEmpty())
return -1;
return _dataset[_pRear];
}
/** Checks whether the circular deque is empty or not. */
public bool IsEmpty()
{
return _length==0;
}
/** Checks whether the circular deque is full or not. */
public bool IsFull()
{
return _length==_maxSize;
}}
/** * Your MyCircularDeque object will be instantiated and called as such: * MyCircularDeque obj = new MyCircularDeque(k); * bool param_1 = obj.InsertFront(value); * bool param_2 = obj.InsertLast(value); * bool param_3 = obj.DeleteFront(); * bool param_4 = obj.DeleteLast(); * int param_5 = obj.GetFront(); * int param_6 = obj.GetRear(); * bool param_7 = obj.IsEmpty(); * bool param_8 = obj.IsFull(); */