码迷,mamicode.com
首页 > 其他好文 > 详细

循环队列

时间:2014-09-26 23:00:59      阅读:334      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   sp   div   on   c   

#include<stdio.h>
#include<stdlib.h>
typedef int  QEleType;
typedef int Status;
#define  OK  1
#define  ERROR  0
#define  OVERLOW  -2
#define  TRUE  1
#define  FALSE  0
//#define  Qsize 100  如果写了就错了一定要注意
//#define  size 100  //不能随便宏定义
typedef struct{
    QEleType *base;//QEleType为队列元素类型,base为表示循环队列空间的动态数组
    int front,rear;//队列指针front 指示队列元素的位置,队尾指针rear指示下一次入队位置
    int queuesize;//循环队列存储空间大小
}CirQueue;//循环队列类型
Status InitCirQueue(CirQueue &Q,int Qsize){
//构造一个空间大小为Qsize的初始空队列Q
 Q.base=(QEleType *)malloc(Qsize*sizeof(QEleType));
 if(!Q.base)return    OVERLOW;
 Q.queuesize=Qsize;
 Q.front=Q.rear=0;//置为空队列
 return OK;
}
Status queueIsEmpty(CirQueue &Q){
    if(Q.front==Q.rear) return TRUE;//队列为空
    else return FALSE;//队列非空

}
void clearQueue(CirQueue &Q){
    //将循环队列Q清空
    Q.front=Q.rear=0;
}
Status insertQueue(CirQueue &Q,QEleType &e){
 if((Q.rear+1)%Q.queuesize==Q.front)return     OVERLOW;//队满,空间溢出,入队失败
 Q.base[Q.rear]=e;
 Q.rear=(Q.rear+1)%Q.queuesize;//队尾指针后移一个位置
 return OK;
}
Status deleteQueue(CirQueue &Q,QEleType &e){
 if(Q.front==Q.rear)return ERROR;//队空,操作出错
 e=Q.base[Q.front];
 Q.front=(Q.front+1)%Q.queuesize;//队头指针后移一个位置
 return OK;
}
Status getFront(CirQueue &Q,QEleType &e){
    //取队列Q的队头元素值
 if(Q.front==Q.rear)return ERROR;//队空,操作出错
 e=Q.base[Q.front];
 return OK;
}
int queueLength(CirQueue &Q){
    return(Q.rear-Q.front+Q.queuesize)%Q.queuesize;//返回队长
}
int main()
{CirQueue Q;
 int e; int size=100;
 InitCirQueue(Q,size);
 queueIsEmpty(Q);
 clearQueue(Q);
 insertQueue(Q,e);
 deleteQueue(Q,e);
 getFront(Q,e);
 queueLength(Q);
 return 0;
}

 

循环队列

标签:style   blog   color   io   ar   sp   div   on   c   

原文地址:http://www.cnblogs.com/leijiangtao/p/3995491.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!