循环队列

纵然是瞬间 提交于 2020-01-19 14:00:25

循环队列

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<malloc.h>
  4 
  5 typedef struct Queue
  6 {
  7     int * pBase;
  8     int front;
  9     int rear;
 10 }QUEUE;
 11 
 12 void init_Queue(QUEUE *);
 13 bool en_Queue(QUEUE *,int val);   //入队
 14 void traverse_Queue(QUEUE *);
 15 bool full_Queue(QUEUE *);
 16 bool out_Queue(QUEUE *,int*);   //出队
 17 bool empty_Queue(QUEUE *Qu);
 18 
 19 int main(void)
 20 {
 21     QUEUE Q;
 22     int val;
 23 
 24     init_Queue(&Q);
 25 
 26     printf("入队元素是:");
 27     en_Queue(&Q,1);
 28     en_Queue(&Q,2);
 29     en_Queue(&Q,3);
 30     en_Queue(&Q,4);
 31     en_Queue(&Q,5);
 32     en_Queue(&Q,6);
 33     en_Queue(&Q,7);
 34     en_Queue(&Q,8);
 35     traverse_Queue(&Q);
 36 
 37     if( out_Queue(&Q,&val) )
 38     {
 39         printf("\n队列出队元素是:%d\n",val);    //只是出队一个元素
 40     }
 41     else
 42     {
 43         printf("队列为空");
 44     }
 45     printf("队列元素为:");
 46     traverse_Queue(&Q);  //输出剩余队列元素
 47 
 48     return 0;
 49 }
 50 
 51 void init_Queue(QUEUE *Qu)
 52 {
 53     Qu->pBase = (int *)malloc(sizeof(int)*6);
 54     Qu->front = 0;
 55     Qu->rear = 0;
 56 }
 57 
 58 bool full_Queue(QUEUE *Qu)
 59 {
 60     if( (Qu->rear+1)%6 == Qu->front )
 61     {
 62         return true;
 63     }
 64     else
 65     {
 66         return false;
 67     }
 68 }
 69 
 70 bool en_Queue(QUEUE *Qu,int val)
 71 {
 72     if( full_Queue(Qu) )
 73     {
 74         return false;
 75     }
 76     else
 77     {
 78         Qu->pBase[Qu->rear] = val;
 79         Qu->rear = (Qu->rear+1)%6;
 80         return true;
 81     }
 82 }
 83 
 84 void traverse_Queue(QUEUE *Qu)
 85 {
 86     int i = Qu->front;
 87     while( i != Qu->rear )
 88     {
 89         printf("%d ",Qu->pBase[i]);
 90         i = (i+1)%6;
 91     }
 92     return;
 93 }
 94 
 95  bool empty_Queue(QUEUE *Qu)
 96  {
 97      if(Qu->front == Qu->rear)
 98      {
 99          return true;
100      }
101      else
102      {
103          return false;
104      }
105  }
106 
107 bool out_Queue(QUEUE *Qu,int * pVal)
108 {
109     if( empty_Queue(Qu) )
110     {
111         return false;
112     }
113     else
114     {
115         *pVal = Qu->pBase[Qu->front];
116         Qu->front = (Qu->front+1)%6;
117         return true;
118     }
119 }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!