#include <stdio.h>
#include "windows.h"
typedef int E;
struct Queue {
E *arr;
int front, rear;
int capacity;
};
typedef struct Queue *LQueue;
BOOL initQueue(LQueue queue) {
queue->arr = malloc(sizeof(E) * 10);
if (queue->arr == NULL) return 0;
queue->capacity = 10;
queue->front = 0;
queue->rear = 0;
return 1;
}
BOOL ifFull(LQueue queue) {
int tmp = queue->rear + 1;
tmp = tmp % queue->capacity;
if (tmp == queue->front) return 1;
return 0;
}
void circulate(LQueue queue, int *e) {
*e = *e+1;
if (*e > queue->capacity - 1) *e = 0;
}
void circulate1(int* e) {
*e = *e+1;
}
BOOL pushQueue(LQueue queue, E element) {
if (ifFull(queue)) return 0;
queue->arr[queue->rear] = element;
circulate(queue, &queue->rear);
return 1;
}
BOOL isEmpty(LQueue queue) {
return queue->rear == queue->front;
}
E popQueue(LQueue queue) {
if (isEmpty(queue)) return -1;
circulate(queue, &queue->front);
return queue->arr[queue->front-1];
}
void f(LQueue queue) {
printf(">>>");
for (int i = queue->front+1; queue->rear+1 != i; i = (i + 1) % queue->capacity) {
printf("%d ", queue->arr[i]);
}
printf("<<<\n");
}
int main() {
struct Queue queue;
initQueue(&queue);
for (int i = 1; i < 6; ++i) {
pushQueue(&queue,i*100);
}
f(&queue);
while (!isEmpty(&queue)){
printf("%d ",popQueue(&queue));
}
f(&queue);
}