-
#include <stdio.h> #include <stdlib.h> #define MAX_SIZE 10 typedef int element; typedef struct { int front; int rear; element data[MAX_SIZE]; } queuetype; void init_queue(queuetype *q) { q->front = -1; q->rear = -1; } int underflow(queuetype *q) { return (q->rear == q->front); } int overflow(queuetype *q) { return (q->rear == MAX_SIZE - 1); } int queue_attach(queuetype *q, int n) { if (overflow(q) == 1) return 0; else q->data[++(q->rear)] = n; return 1; } int dequeue(queuetype *q) { if (underflow(q) == 1) return 0; else ++(q->front); return 1; } void queue_printf(queuetype *q) { for (int i = 0; i <= q->rear; i++) { if (i > q->front) printf("%d ", q->data[i]); } } void error_printf(queuetype *error) { for (int i = 0; i <= error->rear; i++) { if (i > error->front) { if (error->data[i] == 1) { printf("overflow\n"); } else if (error->data[i] == 0) { printf("underflow\n"); } } } } int main() { queuetype queue; queuetype error; char check; int qelement; int datacounter; int pushelement; init_queue(&queue); init_queue(&error); scanf_s("%d", &datacounter); if (datacounter > 10) return 0; for (int i = 0; i < datacounter; i++) { scanf_s(" %c", &check); if (check == 'e' || check == 'E') { scanf_s("%d", &pushelement); if (queue_attach(&queue, pushelement) == 0) queue_attach(&error, 1); } else if (check == 'd' || check == 'D') { if (dequeue(&queue) == 0) { queue_attach(&error, 0); } } else break; } error_printf(&error); queue_printf(&queue); return 0; }