数据结构之循环队列的实现

来源:互联网 发布:建网站做淘宝客 编辑:程序博客网 时间:2024/05/22 07:55
/********************循环队列(顺序存储结构)******************/#include"stdio.h"#include"stdlib.h"#define MAXSIZE 20#define ERROR 0#define OK 1#define FALSE 0#define TRUE 1typedef int ElemType;typedef int Status;typedef struct{ElemType data[MAXSIZE];int front;int rear;}SqQueue;/****************Operator***********************/void InitQueue(SqQueue *Q)//初始化队列{Q->front=Q->rear=0;}void ClearQueue(SqQueue *Q)//清空队列{Q->front=Q->rear;}void DestroyQueue(SqQueue *Q)//销毁队列{free(Q);}Status EmptyQueue(SqQueue Q)//判断队列是否为空{if(Q.front==Q.rear)return TRUE;return FALSE;}int QueueLength(SqQueue Q)//返回队列的长度{return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;}Status EnQueue(SqQueue *Q, ElemType e)//入队操作{if((Q->rear+1)%MAXSIZE==Q->front)//判断队列是否满了return ERROR;Q->data[Q->rear]=e;Q->rear=(Q->rear+1)%MAXSIZE;return OK;}Status DeQueue(SqQueue *Q,ElemType *e)//出队操作,将队头元素返回给e{if(EmptyQueue(*Q))return ERROR;*e=Q->data[Q->front];Q->front=(Q->front+1)%MAXSIZE;return OK;}void PrintQueue(SqQueue Q)//打印队列{int i;if(!EmptyQueue(Q)){for(i=Q.front;i<Q.rear;i++){printf("%6d",Q.data[i]);}printf("\n");}}main(void){SqQueue *Q;ElemType *e;e=(ElemType*)malloc(sizeof(ElemType));Q=(SqQueue *)malloc(MAXSIZE * sizeof(SqQueue));InitQueue(Q);EnQueue(Q,12);EnQueue(Q,14);EnQueue(Q,13);PrintQueue(*Q);DeQueue(Q,e);PrintQueue(*Q);printf("%6d\n",*e);}

0 0
原创粉丝点击