编辑代码

#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;
}

// index循环方法
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;  //在相应位置添加element
    circulate(queue, &queue->rear); //rear加1
    return 1;
}

BOOL isEmpty(LQueue queue) {
    return queue->rear == queue->front;
}

E popQueue(LQueue queue) {
    if (isEmpty(queue)) return -1; //判断队是否空,队空则返回-1
    circulate(queue, &queue->front);     //front++
    return queue->arr[queue->front-1];
}

//遍历方法
void f(LQueue queue) {
    printf(">>>");
    // i的位置问题
    for (int i = queue->front+1; queue->rear+1 != i; i = (i + 1) % queue->capacity) {
        printf("%d ", queue->arr[i]);
    }
//    int i = queue->front;
//    do {
//        i = (i+1)%queue->capacity;
//        printf("%d ", queue->arr[i]);
//    } while (i != queue->rear);
    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);
}