队列(queue):先进先出(FIFO)的线性序列,称为队列,队列也是一种线性表,只不过是操作受限的线性变,只能在两端操作,一端进一端出,进的一段称为队尾(rear),出的一端称为队头(front)。
typedef struct SqQueue{
int *base; //基地址
int front,rear; //头指针,尾指针
}SqQueue;
队列的常见操作:
初始化:
bool InitQueue(SqQueue &Q)//注意使用引用参数,否则出了函数,其改变无效
{
Q.base=new int[Maxsize];//分配空间
if(!Q.base) return false;
Q.front=Q.rear=0; //头指针和尾指针置为零,队列为空
return true;
}
入队:
bool EnQueue(SqQueue &Q,int e)//将元素e放入Q的队尾
{
if((Q.rear+1)%Maxsize==Q.front) //尾指针后移一位等于头指针,表明队满
return false;
Q.base[Q.rear]=e; //新元素插入队尾
Q.rear=(Q.rear+1)%Maxsize; //队尾指针加1
return true;
}
出队:
bool DeQueue(SqQueue &Q, int &e) //删除Q的队头元素,用e返回其值
{
if (Q.front==Q.rear)
return false; //队空
e=Q.base[Q.front]; //保存队头元素
Q.front=(Q.front+1)%Maxsize; //队头指针加1
return true;
}
取队头元素:
int GetHead(SqQueue Q)//返回Q的队头元素,不修改队头指针
{
if (Q.front!=Q.rear) //队列非空
return Q.base[Q.front];
return -1;
}
队列长度:
int GetHead(SqQueue Q)//返回Q的队头元素,不修改队头指针
{
if (Q.front!=Q.rear) //队列非空
return Q.base[Q.front];
return -1;
}
STL容器queue常见操作:
push(elem):向队尾添加元素
pop():从队头移除第一个元素
back():返回最后一个元素
front():返回第一个元素
empty():判断是否为空
size():返回队列大小