题解 | #【模板】循环队列#
【模板】循环队列
https://www.nowcoder.com/practice/0a3a216e50004d8bb5da43ad38bcfcbf
循环队列
#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include <string.h> #define MaxSize 10000 struct queue { int* data; int front; int tail; }; void InitQueue(struct queue* q,int maxsize) { q->data = (int *)malloc(sizeof(int)*maxsize); q->front = 0; q->tail = 0; } bool pushQueue(struct queue* q, int temp,int maxsize) { if ((q->tail+1) % (maxsize) == q->front) { return false; } else { q->data[q->tail] = temp; q->tail = (q->tail +1)%maxsize; return true; } } bool popQueue(struct queue* q, int* temp,int maxsize) { if (q->front == q->tail) return false; else { *temp = q->data[q->front]; q->front = (q->front+1)%maxsize; return true; } } bool frontQueue(struct queue* q,int* temp) { if (q->front == q->tail) return false; else { *temp = q->data[q->front]; return true; } } int main() { int n,q; struct queue* que= (struct queue*)malloc(sizeof(struct queue)); scanf("%d %d",&n,&q); n++; InitQueue(que,n); for(int i = 0;i<q;i++){ char temp[6]; scanf("%s",temp); if(!strcmp(temp,"push")){ int temp_num; scanf("%d",&temp_num); if(!pushQueue(que,temp_num,n)) printf("full\n"); }else if(!strcmp(temp,"front")){ int temp; if(!frontQueue(que,&temp)) printf("empty\n"); else printf("%d\n",temp); }else{ int temp; if(!popQueue(que,&temp,n)) printf("empty\n"); else printf("%d\n",temp); } } }