题解 | 【模板】队列操作
【模板】队列操作
https://www.nowcoder.com/practice/1137c8f6ffac4d5d94cc1b0cb08723f9
#include <stdio.h>
#include<stdlib.h>
#define INITIAL_COUNT 1000
int main() {
int* queue = NULL;
int front = 0, rear = 0, count = 0;
int n;
scanf("%d", &n);
getchar();
count = INITIAL_COUNT;
queue = (int*)malloc(count * sizeof(int));
if (queue == NULL) {
free(queue);
return 1;
}
for (int i = 0; i < n; i++) {
char line[20];
int operation;
if (fgets(line, sizeof(line), stdin) == NULL) {
continue;
}
sscanf(line, "%d", &operation);
switch (operation) {
case 1: {
int x;
sscanf(line, "%d %d", &operation, &x);
if (rear + 1 >= count) {
count = count * 2;
int* new_queue = (int*)realloc(queue, count * sizeof(int));
if (new_queue == NULL) {
free(queue);
return 1;
}
queue = new_queue;
}
queue[rear++] = x;
break;
}
case 2:
if (front == rear) {
printf("ERR_CANNOT_POP\n");
} else {
//printf("%d\n", queue[front++]);
front++;
}
break;
case 3:
if (front == rear) {
printf("ERR_CANNOT_QUERY\n");
} else {
printf("%d\n", queue[front]);
}
break;
case 4: {
int size;
if (front <= rear) {
size = rear - front;
}
else {
size = (count - front) + rear;
}
printf("%d\n", size);
break;
}
}
}
free(queue);
return 0;
}
安克创新 Anker公司福利 771人发布

