循环队列

来源:互联网 发布:设计头像软件 编辑:程序博客网 时间:2024/05/21 00:56
#include <stdio.h>/** * 时间:2016年6月12日 16:29:42 * 内容:循环队列 */#define QueueSize 40// 队列的最大长度 typedef char DataType;/* * 设立一个标志位,比如说是flag * 最开始时队列为空,设flag=0 * 当入队的时候让flag=1 * 出队的时候flag=0 * 然后再加上判断队头队尾指针是否重合 * 重合,且flag=0,则为空 * 重合,且flag=1,则为满 */ typedef struct SCQueue { DataType queue[QueueSize]; int front/*队头指针*/,rear/*队尾指针*/,flag; }SCQueue;void InitQueue(SCQueue*);// 初始化队列int QueueEmpty(SCQueue);// 判断队列是否为空int EnterQueue(SCQueue*,DataType);// 入队int DeleteQueue(SCQueue*,DataType*);// 删除队首int getHead(SCQueue,DataType*);void ClearQueue(SCQueue*);int main(void){SCQueue Q;int i,length=8;char str[]="ABCDEFGH";char x;InitQueue(&Q);for (int i=0;i<length;i++){if(EnterQueue(&Q,str[i]))printf("成功%d ", i+1);}printf("\n");DeleteQueue(&Q,&x);printf("出队列的元素为:%c\n", x);// 事实上,哪怕出队列了,但是在第一个内存空间还是未被释放的.// 这种现象叫做"假溢出",会造成内存浪费,所以一般使用循环队列printf("顺序队列中的元素为:");if (!QueueEmpty(Q))for (i=Q.front;i<Q.rear;i++)printf("%c ", Q.queue[i]);printf("\n");return 0;}/** * 初始化队列 * @param SCQ 队列指针 */ void InitQueue(SCQueue* SCQ) { SCQ->front=0; SCQ->rear=0; SCQ->flag=0; }/** * 判断队列是否为空 * @param  SCQ 队列指针 * @return     返回是否成功,成功为1,不成功为0 */ int QueueEmpty(SCQueue SCQ) { if (SCQ.front==SCQ.rear&&SCQ.flag==0) return 1; else  return 0; }/** * 入队 * @param  SCQ 队列指针 * @param  x   插入元素 * @return     返回是否成功,成功为1,不成功为0 */ int EnterQueue(SCQueue* SCQ,DataType x) { if (SCQ->rear==SCQ->rear&&SCQ->flag==1) { printf("循环队列已满,不能入队!\n"); return 0; } else  { SCQ->queue[SCQ->rear]=x; SCQ->rear+=1; SCQ->flag=1; return 1; } }/** * 删除队头指针 * @param  SCQ 队列指针 * @param  e   删除元素的值返回给*e * @return     返回是否成功,成功为1,不成功为0 */ int DeleteQueue(SCQueue* SCQ,DataType* e) {// 判断队列是否为空,一旦为空就不能删除队首 if (QueueEmpty(*SCQ)) { printf("循环队列已空,不能出队!\n"); return 0; } else  { *e=SCQ->queue[SCQ->front]; SCQ->front+=1; SCQ->flag=0; return 1; } } int getHead(SCQueue SCQ,DataType* e) { if (SCQ.front==SCQ.rear&&SCQ.flag==0) return 0; else  { *e=SCQ.queue[SCQ.front]; return 1; } } void ClearQueue(SCQueue* SCQ) { SCQ->front=0; SCQ->rear=0; SCQ->flag=0; }

1 0
原创粉丝点击