如果用一个循环数组表示队列,并且只设队列头指针Front,不设队列尾指针Rear,而是另设Count记录队列中的元素。请编写算法实现队列的入队和出队操作。C语言实现
时间: 2024-03-10 12:47:36 浏览: 108
设一循环队列Queue,只有头指针front,不设尾指针,另设一个内含元素个数的计数器,试写出相应的进队、出队算法。
好的,C语言实现如下:
```
#include <stdio.h>
void Enqueue(int data, int size, int* front, int* arr, int* count) {
if (*count == size) {
printf("队列已满,无法入队!\n");
return;
}
arr[*front] = data;
*front = (*front + 1) % size;
(*count)++;
}
int Dequeue(int size, int* front, int* arr, int* count) {
if (*count == 0) {
printf("队列已空,无法出队!\n");
return -1;
}
int data = arr[(*front - *count + size) % size];
(*count)--;
return data;
}
int main() {
int arr[5];
int front = 0, count = 0;
Enqueue(1, 5, &front, arr, &count);
Enqueue(2, 5, &front, arr, &count);
Enqueue(3, 5, &front, arr, &count);
Enqueue(4, 5, &front, arr, &count);
Enqueue(5, 5, &front, arr, &count);
Enqueue(6, 5, &front, arr, &count); // 队列已满,无法入队!
printf("%d\n", Dequeue(5, &front, arr, &count)); // 1
printf("%d\n", Dequeue(5, &front, arr, &count)); // 2
printf("%d\n", Dequeue(5, &front, arr, &count)); // 3
printf("%d\n", Dequeue(5, &front, arr, &count)); // 4
printf("%d\n", Dequeue(5, &front, arr, &count)); // 5
printf("%d\n", Dequeue(5, &front, arr, &count)); // 队列已空,无法出队!
return 0;
}
```
在main函数中,我们定义了一个长度为5的数组arr,用于存储队列中的数据。然后,我们进行了一些入队操作,最后进行了一些出队操作并输出了结果。可以看到,当队列已满或已空时,入队或出队操作都会失败。
阅读全文