对顺序循环队列,将自然数按序入队、出队。具体的操作是:队列未满时,入队、入队、出队(即做连续两次入队操作之后,做一次出队操作),输出出队元素的值;队列满时,执行连续的出队操作,输出出队元素的值(应与队列未满时所输出的有不同标识),直至队列为空。编写算法实现以上操作。用C语言实现。
时间: 2024-05-15 16:16:03 浏览: 104
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 5 // 队列的最大容量
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} SeqQueue;
// 初始化队列
void initQueue(SeqQueue *queue) {
queue->front = 0;
queue->rear = 0;
}
// 判断队列是否为空
int isEmpty(SeqQueue *queue) {
return queue->front == queue->rear;
}
// 判断队列是否已满
int isFull(SeqQueue *queue) {
return (queue->rear + 1) % MAX_SIZE == queue->front;
}
// 入队
void enQueue(SeqQueue *queue, int item) {
if (isFull(queue)) {
printf("Queue is full.\n");
exit(1);
}
queue->data[queue->rear] = item;
queue->rear = (queue->rear + 1) % MAX_SIZE;
}
// 出队
int deQueue(SeqQueue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
exit(1);
}
int item = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE;
return item;
}
int main() {
SeqQueue queue;
initQueue(&queue);
int i = 1;
while (1) {
if (!isFull(&queue)) {
enQueue(&queue, i);
enQueue(&queue, i + 1);
printf("%d ", deQueue(&queue));
} else {
printf("\nQueue is full. Dequeuing...\n");
while (!isEmpty(&queue)) {
printf("%d ", deQueue(&queue));
}
break;
}
}
return 0;
}
```
阅读全文