题解 | #【模板】循环队列#
【模板】循环队列
https://www.nowcoder.com/practice/0a3a216e50004d8bb5da43ad38bcfcbf
#include <stdio.h> #include<string.h> typedef struct Queue QU; struct Queue { int hand; int back; }; //初始化 void Initialization(QU* qu) { qu->hand = -1; qu->back = 0; } //加入元素 void Push(QU* qu, int num,int n,int *arr) { if (n == 1)//栈的空间为1时 { if ((qu->hand != qu->back) && (qu->hand != -1) && ((qu->back) % n == (qu->hand) % n))//判断栈是否为满 { printf("full\n"); return; } } else//栈的空间不为为1时 { if ((qu->hand != qu->back) && ((qu->back) % n == (qu->hand) % n))//判断栈是否为满 { printf("full\n"); return; } } if (qu->hand == -1) { qu->hand = 0; } arr[(qu->back) % n] = num; qu->back++; } //删除元素 void Pop(QU* qu,int n,int *arr) { if (qu->hand == qu->back||qu->hand==-1) { printf("empty\n"); return; } else { printf("%d\n", arr[(qu->hand)%n]); qu->hand++; } } void Front(QU* qu,int n,int *arr) { if (qu->hand == qu->back||qu->hand==-1) { printf("empty\n"); return; } else { printf("%d\n", arr[(qu->hand)%n]); } } int main() { int n = 0; int q = 0; scanf("%d %d", &n,&q); QU qu; Initialization(&qu); int arr[n]; for (int i = 0; i < q; i++) { int num = 0; char charr[6]; scanf("%s", charr); if (!strcmp(charr, "push")) { scanf("%d", &num); Push(&qu, num,n,arr); } else if (!strcmp(charr, "pop")) { Pop(&qu,n,arr); } else if (!strcmp(charr, "front")) { Front(&qu,n,arr); } } return 0; }