利用循环队列的基本运算和循环队列元素个数的算法
时间: 2023-09-04 16:06:37 浏览: 122
循环队列算法
循环队列的基本运算包括入队、出队、判断队列是否为空、判断队列是否已满、获取队列长度等。下面是循环队列的基本运算的实现:
1. 入队操作
入队操作需要先判断队列是否已满,如果已满则无法入队。如果队列未满,则将元素插入队尾,并将队尾指针后移一位,如果队尾指针已经到达队列末尾,则将其置为0。
```
void Enqueue(CQueue *queue, int data) {
if (IsFull(queue)) {
printf("Queue is full!\n");
return;
}
queue->data[queue->tail] = data;
queue->tail = (queue->tail + 1) % MAXSIZE;
}
```
2. 出队操作
出队操作需要先判断队列是否为空,如果为空则无法出队。如果队列不为空,则将队头元素出队,并将队头指针后移一位,如果队头指针已经到达队列末尾,则将其置为0。
```
int Dequeue(CQueue *queue) {
if (IsEmpty(queue)) {
printf("Queue is empty!\n");
return -1;
}
int data = queue->data[queue->head];
queue->head = (queue->head + 1) % MAXSIZE;
return data;
}
```
3. 判断队列是否为空
队列为空的条件是队头指针和队尾指针相等。
```
int IsEmpty(CQueue *queue) {
return queue->head == queue->tail;
}
```
4. 判断队列是否已满
队列已满的条件是队尾指针的下一位为队头指针。
```
int IsFull(CQueue *queue) {
return (queue->tail + 1) % MAXSIZE == queue->head;
}
```
5. 获取队列长度
队列长度可以通过队尾指针和队头指针的差值来计算,需要注意的是,如果队尾指针在队头指针前面,需要加上队列长度。
```
int GetQueueLength(CQueue *queue) {
int length = (queue->tail - queue->head + MAXSIZE) % MAXSIZE;
return length;
}
```
6. 循环队列元素个数的算法
循环队列元素个数的算法可以通过队尾指针和队头指针的差值来计算,需要注意的是,如果队尾指针在队头指针前面,需要加上队列长度。
```
int GetQueueLength(CQueue *queue) {
int length = (queue->tail - queue->head + MAXSIZE) % MAXSIZE;
return length;
}
```
阅读全文