进击的数据结构之六队列的基本操作-顺序结构
来源:互联网 发布:中国全面战争动员 知乎 编辑:程序博客网 时间:2024/05/29 07:00
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status; typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int *//* 循环队列的顺序存储结构 */typedef struct{QElemType date[MAXSIZE];int front; /* 头指针 */int rear;/* 尾指针,若队列不空,指向队列尾元素的下一个位置 */}SqQueue;Status InitQueue(SqQueue *Q){ Q->front=0; Q->rear=0; return 1;}Status ClearQueue(SqQueue *Q){ Q->front=0; Q->rear=0; return 1;}Status QueneEmpty(SqQueue Q){ if(Q.front==Q.rear) return 1; return 0;} Status GetHead(SqQueue Q,QElemType &e){ if(QueneEmpty(Q)) return 0; e=Q.date[Q.front]; return 1;}Status EnQueue(SqQueue *Q,QElemType e){ if((Q->rear+1)%MAXSIZE==Q->front) return 0; Q->date[Q->rear]=e; Q->rear=(Q->rear+1)%MAXSIZE; return 1; }Status DeQueue(SqQueue *Q,QElemType &e){ if( QueneEmpty(*Q)) return 0; e=Q->date[Q->front]; Q->front=(Q->front+1)%MAXSIZE; return 1;}int QueueLength(SqQueue Q){ return ((Q.rear-Q.front+MAXSIZE)%MAXSIZE); }Status QueueTraverse(SqQueue Q){ int i,e; if (QueneEmpty(Q)) return 0; while(!QueneEmpty(Q)) { GetHead(Q,e); printf("%d\n",e); Q.front=(Q.front+1)%MAXSIZE; } }