#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; }