队列简称队,它是一种操作受限的线性表,仅允许在一端进行插入操作,而在另一端进行删除操作。
进行插入的一端叫做队尾; 进行删除的一端叫做队首。 插入操作叫做入队或进队;删除操作叫出队或离队。
与栈的先进后出 不同,元素进出队的次序是先进先出。 队根据数据存储结构的不同也分为顺序队和链队。
一、顺序队
1.对顺序队操作四个非常重要的要素。
- 队空的条件:q->front == q->rear。
- 队满的条件:q->rear == MaxSize-1(data数组的最大下标)。
- 元素e的进队操作:先将rear增1,然后将元素e放在data数组的rear位置。
- 出队操作:先将front增1,然后取出data数组中front位置的元素。
顺序队操作过程示意图
2.顺序队核心算法实现
#define MaxSize 50
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int front,rear;//队首和队尾指针
}SqQueue;
void InitQueue(SqQueue * &q)
{
q = (SqQueue*)malloc(sizeof(SqQueue));
q->front = q->rear = -1;
}
void DestoryQueue(SqQueue * &q)
{
free(q);
}
bool QueueEmpty(SqQueue * q)
{
return (q->front == q->rear);
}
//进队
bool enQueue(SqQueue * &q, ElemType e)
{
if (q->rear == MaxSize - 1)<