MyQueue.h:
说明:nTai的下一个位置就是nHead的话,表示队满了,牺牲一个空间;
// nTail == nHead,表示队为空;入队的时候要判断队是否为满,出队的时候,要判断是否为空。
#define size 1000 //数组大小
class CMyQueue
{
public:
int nTail; //队列尾,末尾数据的下一个位置
int nHead; //队列头,首个数据的下标
CString strPcCommand[size]; //数组
public:
CMyQueue();
virtual ~CMyQueue();
bool IsEmpty(); //判断队列是否为空
bool IsFull(); //判断队列是否为满
void EnQueue(CString str);//入队
CString DeQueue(); //出队
};
MyQueue.cpp:
#include "stdafx.h"
#include "MyQueue.h"
CMyQueue::CMyQueue()
{
nTail=0;
nHead=0;
//memset(strPcCommand,0,sizeof(CString)*size); //数组 ??若队满后要覆盖值,如此初始化不行
for(int i=0;i<size;i++)
{
strPcCommand[i]=_T("");
}
}
CMyQueue::~CMyQueue()
{
}
//判断队列是否为空,true为空
bool CMyQueue::IsEmpty()
{
return (nHead == nTail); //如果尾等于头,则为空
}
//判断队列是否为满,true为满
bool CMyQueue::IsFull()
{
//如果nTail比nHead小1,则队列满。
return ((nTail + 1) % size == nHead);
}
//入队:普通队列
void CMyQueue::EnQueue(CString str)
{
assert(!IsFull()); //assert表示断言,断言!IsFull成立,如果不成立,则报告程序错误!
strPcCommand[nTail] = str;
nTail = (nTail + 1) % size;
}
//入队:循环队列
void CMyQueue::EnQueue(CString str)
{
if (IsFull())
{//如果队列满了
//先往队首覆盖,nHead指针后移,nTail后移
strPcCommand[nTail] = str;
nHead = (nHead + 1) % ArraySize;
nTail = (nTail + 1) % ArraySize;
}
else
{
strPcCommand[nTail]=str;
nTail = (nTail + 1)% ArraySize;
}
}
//出队
CString CMyQueue::DeQueue()
{
assert(!IsEmpty());
CString str = strPcCommand[nHead];
nHead = (nHead + 1) % size;
return str;
}