C语言实现循环队列

来源:互联网 发布:自制mac安装盘 编辑:程序博客网 时间:2024/05/21 09:53

循环队列常用于已知数据存储的大致数量的场合,使用之前需要事先申请好空间,使用期间不得释放。
它的数据结构可如下表示:

#define MAXQSIZE 100                       /*设置队列可以存储99个数据,                     因为为了区别队满有一个不能用*/typedef int QElemType;/*循环队列数据结构*/typedef struct{   QElemType *base;   int front;   int rear;}SqQueue,*SqQueuePtr;SqQueuePtr InitQueue_Sq();int Push_Sq(SqQueuePtr Q,QElemType data);QElemType DeSqueue_Sq(SqQueuePtr Q);int QueueLength_Sq(SqQueuePtr Q);

基本的入队和出队函数:

/*功能:初始化一个循环队列  返回值:指向循环队列的一个指针*/SqQueuePtr InitQueue_Sq(){    SqQueuePtr Q;    Q=(SqQueuePtr)malloc(sizeof(SqQueue));//为队列结构分配内存    Q->base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));//为队列的数据存储空间分配内存    if(Q->base==NULL)    {       printf("there is not enough memory aviable\n");       exit(0);    }    else        Q->front=0;        Q->rear=0;        return Q;}/*功能:将数据压入堆栈  返回值:0:压入成功*/int Push_Sq(SqQueuePtr Q,QElemType data){    if((Q->rear+1)%MAXQSIZE==Q->front)//判断队列是否已经满了    {        printf("the queue is full\n");        exit(0);    }    else        Q->base[Q->rear]=data;//数据存入队列        Q->rear=(Q->rear+1)%MAXQSIZE;//队尾后移        return 0;}/*功能:出队,数据从队头出队  返回值:队头的数据*/QElemType DeSqueue_Sq(SqQueuePtr Q){    QElemType data;    if(Q->front==Q->rear)//判断队列是否是空的    {        printf("the queue is empty\n");        exit(0);    }    else        data=Q->base[Q->front];//获取队头的数据        Q->front=(Q->front+1)%MAXQSIZE;//队头后移一位    return data;}/*功能:获得队列当前存储的长度  返回值:当前长度值*/int QueueLength_Sq(SqQueuePtr Q){    return (Q->rear-Q->front+MAXQSIZE)%MAXQSIZE;}

检测验证:

void main(){  /*队列的测试*/   SqQueuePtr Q;    QElemType data,dat;    int length=0,i;    data=10;    Q=InitQueue_Sq();   printf("push data to queue\n");   while(data>0)   {       printf("%d\t",data);       Push_Sq(Q,data);       data--;   }   printf("\n");   length=QueueLength_Sq(Q);   printf("the length of queue is %d\n",length);   printf("the datas go out of queue is\n");   for(i=0;i<length;i++)   {       dat=DeSqueue_Sq(Q);       printf(" %d\t",dat);   }   printf("\n");}

结果如下:
这里写图片描述

0 0
原创粉丝点击