酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

给定一个初始为空的队列和一系列入队、出队操作,请编写程序输出每次出队的元素。队列的元素值均为整数。 输入格式: 输入第1行为1个正整数n,表示操作个数;接下来n行,每行表示一个操作,格式为1 d或0。1 d表示将整数d入队,0表示出队。n不超过20000。 输出格式: 按顺序输出每次出队的元素,每个元素一行。若某出队操作不合法(如在队列空时出队),则对该操作输出invalid。 用c语言回答

```c #include <stdio.h> #include <stdlib.h> // 定义队列结构体 typedef struct Queue { int *data; int front, rear, size, capacity; } Queue; // 创建队列 Queue *createQueue(int capacity) { Queue *queue = (Queue *)malloc(sizeof(Queue)); queue->data = (int *)malloc(capacity * sizeof(int)); queue->front = 0; queue->rear = -1; queue->size = 0; queue->capacity = capacity; return queue; } // 判断队列是否为空 int isEmpty(Queue *queue) { return queue->size == 0; } // 判断队列是否已满 int isFull(Queue *queue) { return queue->size == queue->capacity; } // 入队操作 void enqueue(Queue *queue, int item) { if (isFull(queue)) { printf("Queue is full!\n"); return; } queue->rear = (queue->rear + 1) % queue->capacity; queue->data[queue->rear] = item; queue->size++; } // 出队操作 int dequeue(Queue *queue) { if (isEmpty(queue)) { printf("invalid\n"); return -1; } int item = queue->data[queue->front]; queue->front = (queue->front + 1) % queue->capacity; queue->size--; return item; } int main() { int n; scanf("%d", &n); Queue *queue = createQueue(20000); for (int i = 0; i < n; i++) { int op, num; scanf("%d", &op); if (op == 1) { scanf("%d", &num); enqueue(queue, num); } else { dequeue(queue); } } free(queue->data); free(queue); return 0; } ``` 额外需要注意的逻辑点: 1. 注意队列容量的限制,防止入队时超出容量。 2. 出队时要先判断队列是否为空,避免非法操作。 3. 对队列的操作要注意循环利用存储空间,通过取模运算实现。 [2024-11-27 14:03:38 | AI写代码神器 | 567点数解答]

相关提问