一,队列的顺序实现
#define MaxSize 10
typedef struct {
ElemType data[MaxSize];
int front, rear;
}SqQueue;
二,循环队列
1)初始化
void InitQueue(SeQueue &Q)
{
Q.front = Q.rear = 0;
}
2)判队空
bool isEmpty(SqQueue Q)
{
if (Q.front == Q.rear)
return true;
return false;
3)入队
//只能从队尾入队
//留一个空位
bool EnQueue(SqQueue &Q, ElemType x)
{
if ((Q.rear + 1) % MaxSize ==Q.front)//队列已满
return false;
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1)%MaxSize;
return true;
}
4)出队
//只能让队头元素出队
bool DeQueue(SqQueue &Q, ElemType &x)
{
if (Q.rear==Q.front)//判断队空
return false;
指针变量x=Q.data[Q.front];
Q.front =(Q.front + 1)%MaxSize;
return true;
}
*队列元素个数:
(rear+MaxSize-front)%MaxSize
方案一:判断队列已满/已空
(Q.rear + 1) % MaxSize ==Q.front//队列已满
Q.rear==Q.front//队列已空
方案二:判断队列已满/已空
插入成功size++;队满 size==MaxSize;
删除成功size–;队空 size==0;
#define MaxSize 10
typedef struct {
ElemType data[MaxSize];
int front, rear;
int size;//队列当前长度
}SqQueue;
方案三:判断队列已满/已空
删除成功,tag=0;
插入成功,tag=1;
#define MaxSize 10
typedef struct {
ElemType data[MaxSize];
int front, rear;
int tag;//队列当前长度
}SqQueue;