#include<stdio.h> #define size 10 //最大队列长度,实际上只能存入(size-1)个数据 typedef char DataType; //循环队列可以解决顺序队列的假满现象 //循环队列的类型定义 typedef struct { DataType data[size];//存储队列的数据空间 int front,rear;//队头和队尾指针 }circleQueue; //初始化队列 void init(circleQueue * q) { q->front=q->rear=0; } //判断队列是否为空 int isEmpty(circleQueue *s) { return s->front==s->rear; } //判断队列是否为满 int isFull(circleQueue *q) { return (q->rear+1)%size==q->front; } //元素入队,rear所指的单元始终未空 void inQueue(circleQueue *q,DataType e) { if(isFull(q)) { printf("Over Flow !"); } else { q->data[q->rear]=e; q->rear=(q->rear+1)%size;//队尾指针上移一位 } } //元素出队 DataType outQueue(circleQueue *q) { DataType x; if(isEmpty(q)) { printf("Under Flow !"); return NULL; } else { x=q->data[q->front]; q->front=(q->front+1)%size;//队头指针上移一位 return x; } } //打印队列 void printQueue(circleQueue q) { while(q.front!=q.rear) { printf("%c ",q.data[q.front]); q.front=(q.front+1)%size; } printf("\n"); } //取得队头元素 DataType getFirst(circleQueue q) { if(isEmpty(&q)) { printf("Under Flow !"); return NULL; } else { return q.data[q.front]; } } void main() { circleQueue q; DataType c; init(&q); while((c=getchar())!='\n') { inQueue(&q,c); } printf("出队顺序为:"); printQueue(q); outQueue(&q); printf("出队顺序为:"); printQueue(q); printf("队头元素为:%c",getFirst(q)); printf("\n"); }
循环队列的实现

最新推荐文章于 2025-09-12 20:11:40 发布
