循环队列的相关操作

来源:互联网 发布:ios手游源码 编辑:程序博客网 时间:2024/05/22 10:43
#include <stdio.h>#include <stdlib.h>#define MAX 10 enum s{QUEUE_EMPTY,QUEUE_NOEMPTY,QUEUE_FULL,QUEUE_NOFULL,IN_NO,IN_OK,OUT_NO,OUT_OK};struct node{int queue[MAX];int rear;int front;};void init(struct node *p){p->front = 0;p->rear = 0;}int empty_queue(struct node *p){if(p->rear == p->front){printf("queue is empty\n");return QUEUE_EMPTY;}return QUEUE_NOEMPTY;}int full_queue(struct node *p){if(p->front == (p->rear+1)%MAX){printf("queue is full!\n");return QUEUE_FULL;}return QUEUE_NOFULL;}int in_queue(struct node *p,int num){if(full_queue(p) == QUEUE_FULL){printf("in fail!\n");return IN_NO;}p->rear = (p->rear+1)%MAX;p->queue[p->rear] = num;return IN_OK;}int out_queue(struct node *p,int *num){if(empty_queue(p) == QUEUE_EMPTY){printf("out fail!\n");return OUT_NO;}p->front = (p->front+1)%MAX;*num = p->queue[p->front];return OUT_OK;}int main(){struct node *p = (struct node *)malloc(sizeof(struct node));int i = 0;int num = 0;init(p);for(i = 0;i < 9;i++){if(full_queue(p) != QUEUE_FULL){in_queue(p,i+1);printf("queue[%d]:%d in queue!\n",i,p->queue[p->rear]);}else{printf("in fail!\n");}}for(i = 0;i < 5;i++){if(empty_queue(p) != QUEUE_EMPTY){out_queue(p,&num);printf("%d\n",num);}else{printf("out fail!\n");}}return 0;}