配列による両端キューの実現(C++)

983 ワード


/*
 *                        
 */

static const int nLength = 5;
static int deque[nLength];
static int nIdxHead = 0;
static int nIdxTail = 0;

enum Err
{
	NoErr,
	errOverFlow,
	errUnderFlow,
};

//    
Err EnDequeHead(int x)
{
	if (((nIdxHead + nLength - 1) % nLength) == nIdxTail)
		return errOverFlow;
	nIdxHead = ((nIdxHead + nLength - 1) % nLength);
	deque[nIdxHead] = x;
	return NoErr;
}

//    
Err DeDequeHead(int *pX)
{
	if (nIdxHead == nIdxTail)
		return errUnderFlow;
	if (NULL != pX)
		*pX = deque[nIdxHead];
	nIdxHead = (nIdxHead + 1) % nLength;
	return NoErr;
}

//    
Err EnDequeTail(int x)
{
	if (((nIdxTail + 1) % nLength) == nIdxHead)
		return errOverFlow;
	deque[nIdxTail] = x;
	nIdxTail = ((nIdxTail + 1) % nLength);
	return NoErr;
}

//    
Err DeDequeTail(int *pX)
{
	if (nIdxHead == nIdxTail)
		return errUnderFlow;
	nIdxTail = (nIdxTail + nLength - 1) % nLength;
	if (NULL != pX)
		*pX = deque[nIdxTail];
	return NoErr;
}