#include <stdio.h> #include <stdbool.h> #define MAX_SIZE 100001 //循环队列 typedef struct { int data[MAX_SIZE]; int front; //队首指针 int rear; //队尾指针 } Queue; //typedef struct //{ // Node* front; // Node* rear; //} Queue; //初始化队列 void initQueue(Queue* q) { q->front = q->rear = 0; } //判断队列是否为空 bool isEmpty(Queue* q) { return q->front == q->rear; } //判断队列是否为满 bool isFull(Queue* q) { return (q->rear + 1) % MAX_SIZE == q->front; } //入队 int enqueue(Queue* q, int data) { if(isFull(q)) { printf("Queue is full\n"); return -1; } q->data[q->rear] = data; q->rear = (q->rear + 1) % MAX_SIZE; return 0; } //出队 int dequeue(Queue* q) { int temp; if(isEmpty(q)) { printf("Queue is empty!\n"); return -1; } temp = q->data[q->front]; q->front = (q->front + 1) % MAX_SIZE; return temp; } //获取队首元素 int peekFront(Queue* q) { if(isEmpty(q)) { printf("Queue is Empty!\n"); return -1; } return q->data[q->front]; } //计算队列当前元素数量 int lengthQueue(Queue* q) { if(q->rear >= q->front) { return q->rear - q->front; } else { return q->rear - q->front + MAX_SIZE; } } //释放队列内存 void freeQueue(Queue* q) { while(!isEmpty(q)) { int val; dequeue(q); } } int main() { int n = 0;//操作总数 int order = 0;//操作指令 int num = 0;//要入队输入的数据 Queue q; initQueue(&q); scanf("%d",&n); while(n--) { scanf("%d",&order); if(order == 1) { scanf("%d",&num); enqueue(&q, num); } else if(order == 2) { if(isEmpty(&q)) { printf("ERR_CANNOT_POP\n"); } else { dequeue(&q); } } else if(order == 3) { if(isEmpty(&q)) { printf("ERR_CANNOT_QUERY\n"); } else { printf("%d\n",peekFront(&q)); } } else if(order == 4) { printf("%d\n",lengthQueue(&q)); } } return 0; }