队列(先进先出)
定义
#define MaxSize 50
typedef struct
{
int data[MaxSize];
int front,rear;//front指向第一个元素,尾指针指向最后一个元素的下一个位置
}Queue;
初始化,判断是否为空
void InitQueue(Queue &q)
{
q.front=q.rear=0;
}
bool IsEmpty(Queue q)
{
if(q.front==q.rear) return true;
return false;
}
判满
1 最常用的是牺牲一个存储单元
(q.rear+1)%MaxSize==q.front;
2
增加变量size记录队列中元素个数,队空q.size0,队满q.sizeMaxSize
3
q.tag初始值为零,tag=0表示删除,tag=1表示增加
入队
bool Push(Queue &q,int e)
{
if((q.rear+1)%MaxSize==q.front) return false;//队满
q.data[q.rear]=e;
q.rear=(q.rear+1)%MaxSize;
return true
}
出队
bool Pop(Queue &q,int &e)
{
if(q.rear==q.front) return false;//队空
e=q.data[q.front];
q.front=(q.front+1)%MaxSize;
return true
}