循环队列基本操作

#include<stdio.h>
#include<stdlib.h>

#define MaxSize 10

typedef struct{
    int *base;
    int front;
    int rear;
}SqQueue;

int InitSqQueue(SqQueue *Q){
    Q->base=(int*)malloc(MaxSize*sizeof(int));
    Q->front=0;
    Q->rear=0;
    return 1;
}

int DestorySqQueue(SqQueue *Q){
    if(Q->base)
        free(Q->base);
    Q->front=0;
    Q->rear=0;
    return 1;
}

int ClearSqQueue(SqQueue *Q){
    Q->front=0;
    Q->rear=0;
    return 1;
}

int EnQueue(SqQueue *Q,int e){
    if((Q->rear+1)%MaxSize==Q->front) {
        printf("Q is FULL\n");
        return 0;
    }
    Q->base[Q->rear]=e;
    Q->rear=(Q->rear+1)%MaxSize;
    return 1;
}

int Dequeue(SqQueue *Q,int &e){
    if(Q->front==Q->rear) return 0;
    e=Q->base[Q->front];
    Q->front=(Q->front+1)%MaxSize;
    return 1;
}

void QueueEmpty(SqQueue *Q){
    if(Q->front==Q->rear){
        printf("Q is Empty\n");
    }
    else{
        printf("Q isn't Empty\n");
    }
}

int GetHead(SqQueue *Q){
    if(Q->front==Q->rear){
        printf("Q is Empty\n");
        return 0;
    }
    return Q->base[Q->front];
}

int QueueLength(SqQueue *Q){
    return (Q->rear-Q->front+MaxSize)%MaxSize;
}

int main() {             //测试代码,可随意更改
    SqQueue Q;
    InitSqQueue(&Q);
    int n,i,e;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        EnQueue(&Q, i);
    }
    e=QueueLength(&Q);
    printf("%d\n",e);
    for(i=1;i<=n;i++){
        Dequeue(&Q, e);
        printf("%d ",e);
    }
    printf("\n");
    e=QueueLength(&Q);
    printf("%d\n",e);
    DestorySqQueue(&Q);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_46200758/article/details/108271333