使用顺序表实现循环队列
时间: 2023-05-13 15:06:44 浏览: 80
可以使用两个指针front和rear分别指向队头和队尾,当队列为空时,front和rear都指向0,当队列满时,front和rear相等但不指向同一个元素。具体实现可以参考以下代码:
#define MAXSIZE 100 //队列的最大长度
typedef struct {
int data[MAXSIZE];
int front, rear;
} SqQueue;
void InitQueue(SqQueue *Q) {
Q->front = Q->rear = 0;
}
int QueueLength(SqQueue Q) {
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
bool EnQueue(SqQueue *Q, int x) {
if ((Q->rear + 1) % MAXSIZE == Q->front) {
return false; //队列已满
}
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAXSIZE;
return true;
}
bool DeQueue(SqQueue *Q, int *x) {
if (Q->front == Q->rear) {
return false; //队列为空
}
*x = Q->data[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return true;
}
int GetHead(SqQueue Q) {
if (Q.front == Q.rear) {
return -1; //队列为空
}
return Q.data[Q.front];
}