第一部分:顺序循环队列的实现
1 //循环队列的实现 2 #define OK 1 3 #define MAXSIZE_Q 10 4 //#define OVERFLOW -2 5 #define ERROR 0 6 7 typedef int Status; 8 typedef int QElemtype; 9 10 typedef struct{ 11 QElemtype *base; //初始化的动态分配存储空间 12 int front; //队头指针 13 int rear; //队尾指针 14 15 }SqQueue; 16 17 //---------------------循环队列的基本操作的算法描述----------------------------- 18 Status InitQueue(SqQueue *q) 19 { 20 //构造一个空队列Q 21 q->base=(QElemtype*)malloc(MAXSIZE_Q*sizeof(QElemtype)); 22 if(!q->base) exit(-1); //存储分配失败 23 q->front=q->rear=NULL; 24 return OK; 25 } 26 27 int queueLength(SqQueue q) 28 { 29 //返回Q的元素个数,队列的长度 30 return (q.rear-q.front+MAXSIZE_Q)%MAXSIZE_Q; 31 } 32 33 bool isFull(SqQueue *q) 34 { 35 if(q->front=(q->rear+1)%MAXSIZE_Q) 36 return true; 37 return false; 38 } 39 40 bool isEmpty(SqQueue *q) 41 { 42 if(q->front==q->rear) 43 return true; 44 return false; 45 } 46 47 Status EnQueue(SqQueue *q,QElemtype e) 48 { 49 //插入元素e为Q的新的队尾元素 50 if ((q->rear+1)%MAXSIZE_Q==q->front) 51 { 52 //队列满,不进行任何操作,不能再入队 53 return ERROR; 54 } 55 q->base[q->rear]=e; 56 //入队的操作 57 q->rear=(q->rear+1)%MAXSIZE_Q; 58 return OK; 59 } 60 61 Status DeQueue(SqQueue *q,QElemtype *e) 62 { 63 //若队列不空,则删除Q的队头元素,用e返回值,并返回ok,否则返回error 64 if(q->rear==q->front) return ERROR; //队列满 65 *e=q->base[q->front]; //找到删除的队头元素 66 q->front=(q->front+1)%MAXSIZE_Q; 67 return OK; 68 69 } 70 71 void displayQueue(SqQueue *q) 72 { 73 if (q->front==q->rear) 74 { 75 printf("队列已满\n"); 76 } 77 else{ 78 //遍历队列 79 int front=q->front; 80 int rear=q->rear; 81 while(front!=rear) 82 { 83 printf("%d\n",q->base[front]); 84 front++; 85 } 86 } 87 }
测试用例
1 int main() 2 { 3 SqQueue q; 4 InitQueue(&q); 5 int i; 6 for(i=0;i<11;i++){ 7 if(EnQueue(&q,i)==ERROR){ 8 printf("循环队列已满,该队列长度为9 \n"); 9 } 10 } 11 printf("the length of queue is %d \n",queueLength(q)); //the length of queue is 9 12 int e1,e2,e3,e4,e5; 13 DeQueue(&q,&e1); 14 DeQueue(&q,&e2); 15 DeQueue(&q,&e3); 16 DeQueue(&q,&e4); 17 DeQueue(&q,&e5); 18 printf("%d--%d--%d--%d--%d \n",e1,e2,e3,e4,e5); 19 printf("the length of queue is %d \n",queueLength(q)); 20 printf("循环队列的遍历\n"); 21 displayQueue(&q); 22 int e6; 23 DeQueue(&q,&e6); 24 printf("循环队列的遍历\n"); 25 displayQueue(&q); 26 system("pause"); 27 return 0; 28 }
时间: 2024-10-16 08:49:38