CircularQueue.h #ifndef SQQUEUE_H_H #define OK 0 #define ERROR -1 #define MAX_SIZE 5 typedef int type; typedef struct SNode { type date[MAX_SIZE]; int front; //队头指针 int rear; //对尾指针 int queue_length; int queue_size; }SqQueue; int init_queue(SqQueue*); int clear_queue(SqQueue*); int queue_empty(SqQueue*); int queue_length(SqQueue*); int get_head(SqQueue*, type*); int insert_queue(SqQueue*, type); int delete_queue(SqQueue*, type*); int create_queue(SqQueue*); int print_queue(SqQueue*); #endif CircularQueue.cpp #include<stdio.h> #include<stdlib.h> #include"CircularQueue.h" /* ** 约定数组最后一个位置用来判断队列是否已满 */ int init_queue(SqQueue *queue) { queue->front = queue->rear = 0; queue->queue_length = 0; queue->queue_size = MAX_SIZE; return OK; } int clear_queue(SqQueue *queue) { queue->front = queue->rear = 0; queue->queue_length = 0; return OK; } int queue_empty(SqQueue *queue) { if(queue->queue_length == 0) return true; return false; } int queue_length(SqQueue *queue) { return queue->queue_length; } int get_head(SqQueue *queue, type *e) { *e = queue->date[queue->front]; return OK; } int insert_queue(SqQueue *queue, type e) { //判断循环队列是否已经满 if((queue->rear + 1) % queue->queue_size == queue->front) return ERROR; queue->date[queue->rear] = e; queue->rear = (queue->rear + 1) % queue->queue_size; queue->queue_length++; return OK; } int delete_queue(SqQueue *queue, type *e) { //判断队列是否为空 if(queue->front == queue->rear) return ERROR; *e = queue->date[queue->front]; queue->front = (queue->front + 1) % queue->queue_size; queue->queue_length--; return OK; } int create_queue(SqQueue *queue) { type num; printf("input num: "); scanf("%d",&num); while(num) { insert_queue(queue,num); scanf("%d",&num); } return OK; } int print_queue(SqQueue *queue) { int index = queue->front; while(index != queue->rear) { printf("%d ",queue->date[index]); index = (index + 1) % queue->queue_size; } printf("/n"); return OK; }