循环队列程序演示

  1 #include<stdio.h>
  2 #include<malloc.h>
  3 
  4 typedef struct Queue{
  5     int * pBase;//数组名就是第一个数组元素的地址
  6     int front;//队首第一个元素下标
  7     int rear;//队尾最后一个有效元素的下一个元素
  8 }QUEUE;
  9 
 10 //函数声明,此处可不写形参
 11 void init(QUEUE *);//初始化队列,此处使用指针!!
 12 bool en_queue(QUEUE *,int);//入队(从最后一个元素开始),两个形参代表着往哪个数组里放、放入的元素是什么
 13 bool out_queue(QUEUE *,int *);//出队(从第一个元素开始),后面的int *表示删除的元素会返回
 14 void traverse_queue(QUEUE *);//遍历
 15 bool full_queue(QUEUE *);//判断队列是否满
 16 bool empty_queue(QUEUE *);//判断队列是否满
 17 
 18 int main(){
 19     int val;
 20     
 21     QUEUE Q;//声明一个结构体变量Q
 22     
 23     init(&Q);//传递实参结构体变量Q的地址
 24     
 25     en_queue(&Q,1);//存放元素
 26     en_queue(&Q,11);
 27     en_queue(&Q,123);
 28     en_queue(&Q,15);
 29     en_queue(&Q,16);
 30     en_queue(&Q,19);
 31     
 32     traverse_queue(&Q);//遍历输出
 33     
 34     if( out_queue(&Q,&val) ){
 35         printf("出队成功,出队元素是:%d",val);
 36     }
 37     else{
 38         printf("出队失败");
 39     }
 40     
 41     
 42     return 0;
 43 }
 44 
 45 void init(QUEUE *pQ){
 46     //长度为6的数组,动态分配内存24个字节
 47     pQ->pBase = (int *)malloc(sizeof(int)*6);
 48    //队列的初始状态,队首和队尾的下标都是0
 49     pQ->front = 0;
 50     pQ->rear = 0;
 51 }
 52 
 53 full_queue(QUEUE *PQ){
 54     if((pQ->rear + 1) % 6 == pQ->front){
 55         return true;
 56     }
 57     else{
 58         return false;
 59     }
 60 }
 61 
 62 bool en_queue(QUEUE * pQ,int val){
 63     if( full_queue(pQ)){
 64         return false;
 65     }
 66     else{
 67         pQ -> pBase[pQ->rear] = val;
 68         //因为rear的位置是在队尾最后一个有效元素的下一个元素,
 69         //所以将val存入rear的位置
 70         pQ->rear = (pQ->rear+1) % 6;//rear后移一位
 71         return true;
 72     }
 73 }
 74 
 75 void traverse_queue(QUEUE *pQ){
 76     int i = pQ->front;
 77     while(i != pQ->rear){
 78         printf("%d ",pQ->pBase[i]);
 79         i = (i+1) % 6;
 80     }
 81     return;
 82 }
 83 
 84 bool empty_queue(QUEUE *pQ){
 85     if( pQ->fromt == pQ->rear){
 86         return true;
 87     }
 88     else{
 89         return false;
 90     }
 91 }
 92 
 93 bool out_queue(QUEUE *pQ, int *pVal){
 94     if( emput_queue(pQ)){
 95         return false;
 96     }
 97     else{
 98         pVal = pQ->pBase[pQ->front];
 99         pQ->front = (pQ->front + 1) % 6 ;
100         return true;
101     }
102 }

 

posted @ 2019-08-14 19:19  孙晨c  阅读(277)  评论(0编辑  收藏  举报