链式队列基本操作

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

typedef struct QNode{
    int data;
    struct QNode *next;
}QNode,*QueuePtr;

typedef struct{
    QueuePtr front;
    QueuePtr rear;
}LinkQueue;

int InitQueue(LinkQueue &Q){
    Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
    if(!Q.front) exit (OVERFLOW);
    Q.front->next=NULL;
    return 1;
}

int DestoryQueue(LinkQueue &Q){
    while(Q.front){
        Q.rear=Q.front->next;
        free(Q.front);
        Q.front=Q.rear;
    }
    return 1;
}

int ClearQueue(LinkQueue &Q){
    Q.rear=Q.front;
    return 1;
}

int QueueEmpty(LinkQueue Q){
    if(Q.front==Q.rear){
        printf("Q is Empty\n");
        return 1;
    }
    else{
        printf("Q isn't Empty\n");
        return 0;
    }
}

void QueueLength(LinkQueue Q){
    int length=0;
    while(Q.front){
        length++;
        Q.front=Q.front->next;
    }
    printf("The length of Q is %d\n",length-1);
}

int EnQueue(LinkQueue &Q,int e){
    QueuePtr P;
    P=(QueuePtr)malloc(sizeof(QNode));
    if(!P) exit (OVERFLOW);
    P->data=e;
    P->next=NULL;
    Q.rear->next=P;
    Q.rear=P;
    return 1;
}

int DeQueue(LinkQueue &Q,int &e){
    QueuePtr P;
    if(Q.front==Q.rear) return 0;
    P=Q.front->next;
    e=P->data;
    Q.front->next=P->next;
    if(Q.rear==P) Q.rear=Q.front;
    free(P);
    return 1;
}

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

猜你喜欢

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