如何实现循环队列

2020-01-06 13:24:56王旭
  • //e=*(Q.base +Q.rear);   Q.base[Q.rear]=e;  
  • Q.rear=(Q.rear+1)%MAXQSIZE;   return OK;//返回操作状态(成功:OK,失败:ERROR)  
  • //....................................   }  
  •   //删除队列Q的队头元素,并用e返回  
  • // 前提:队列Q存在且非空   Status DeQueue(SqQueue &Q, ElemType e)  
  • {   /* TODO (#9#): 出队列存入e */ 
  • if(Q.front==Q.rear)   return ERROR;  
  • //e=*(Q.base+Q.front);   e=Q.base[Q.front];  
  • Q.front=(Q.front+1)%MAXQSIZE;   return OK;//返回操作状态(成功:OK,失败:ERROR)  
  • //....................................   }  
  •   //////////////////////////////////////////  
  •    
  • //TODO: 定义好 SqQueue 类型后使用 QueueView 函数   /****** //TODO: 删除此行以便使用QueueView()  
  • #include <stdio.h>   //查看队列状态(调试用)  
  • void QueueView(SqQueue Q)   {  
  • extern void PrintElem(ElemType e);//打印数据用   int i=0;  
  • if(Q.front<0||Q.front>=MAXQSIZE||Q.rear<0||Q.rear>=MAXQSIZE){   printf("队列未初始化n");  
  • return ;   }  
  • printf("---Queue View---n");   printf("front=%d , rear=%dn", Q.front, Q.rear);  
  • if(Q.rear>=Q.front) {   printf("..... ......n");  
  • for(i=Q.front; i<Q.rear; i++) {   printf("%5dt", i);  
  • PrintElem(Q.base[i]);   printf("n");  
  • }   if(i<MAXQSIZE) printf("..... ......n");  
  • } else {   for(i=0; i<Q.rear; i++) {  
  • printf("%5dt", i);   PrintElem(Q.base[i]);  
  • printf("n");   }  
  • printf("..... ......n");   for(i=Q.front; i<MAXQSIZE; i++) {