循环队列

来源:互联网 发布:windows安全性 编辑:程序博客网 时间:2024/06/08 07:01
#include<stdio.h>#define maxsize 10typedef int Datatype;typedef struct cycqueue{   Datatype data[maxsize];  /*循环队列大小*/   int front;               /*队列头指针*/   int rear;                /*队列尾指针*/}CycQue;void InitQueue(CycQue *CQ)   /*队列实始化*/{    CQ->front=0;    CQ->rear=0;}int EmptyQueue(CycQue *CQ)   /*判队列空*/{    if(CQ->rear==CQ->front)        return 1;            /*队列为空,返回1.*/    else        return 0;            /*队列不为空,返回0.*/}int EnQueue(CycQue *CQ,Datatype x) /*入队列*/{    if((CQ->rear+1)%maxsize==CQ->front)    {        printf("队列满!\n");/*队列满,入队失败。*/        return 0;    }    else    {        CQ->rear=(CQ->rear+1)%maxsize;        CQ->data[CQ->rear]=x;/*入队成功*/        return 1;    }}int OutQueue(CycQue *CQ)   /*出队列*/{    if(EmptyQueue(&CQ))    /*判断队列是否为空*/    {        printf("队列空!\n");        return 0;    }    else    {        CQ->front=(CQ->front+1)%maxsize;/*不为空,出队列。*/        return 1;    }}Datatype Gethead(CycQue *CQ)    /*取队列首元素*/{    if(EmptyQueue(&CQ))         /*判断队列是否为空*/    {        printf("NullData!\n");        return 0;    }    else    {        return CQ->data[(CQ->front+1)%maxsize];    }}main(){    CycQue CQ;    InitQueue(&CQ);    int i,temp;    printf("------创建队列------\n");    for(i=1;i<maxsize;i++)    {        printf("请输入第%d个队列元素:\n",i);        scanf("%d",&temp);        EnQueue(&CQ,temp);    }    printf("------输出队列------\n");    while(!EmptyQueue(&CQ))    {        temp=Gethead(&CQ);        OutQueue(&CQ);        printf("%d\t",temp);    }}