简单队列的改进——————循环队列

16:28:59 1 front=near=0; 
 2 
 3 //在入队列时,应该先判断是否满队列
 4 //即下一个元素的地址和队列前端front是否相等 
 5 void addcq(int front,int *rear, element item )
 6 {
 7     *rear=(*rear+1)%MAX_QUEUE_SIZE;
 8     if(*rear==front){
 9         printf("队列满"); 
10     }
11     queue[*rear]=item;
12  } 
13  //因为front指向的是队头的前一个位置
14  //如:queue[0front 12345 6near]        其中123456存储着数据 
15  //出队列时,应该先判断front==rear
16  //然后在加1 
17  element deleteq(int *front ,int near)
18  {
19      
20      if(*front==rear){
21          printf("队列空");
22      }
23      *front=(*front+1)%MAX_QUEUE_SIZE;
24      return queue[*front];
25   } 
26  

用一维数组模拟成圆形数组

1.

最多只能存储MAX_QUEUE_SIZE --1 个元素

因为当存储MAX_QUEUE_SIZE时  front 也等于rear  ,这样就不知道是队列空还是队列满啦

2.

即当队列尾rear 指针走到队列最大值时,若front != near 则rear置为0..(通过对最大值取余进行转换)

这种队列 rear 和front被初始化为0 而不是-1;

front 始终指向队列头部的前一个位置,而rear 始终指向队列的尾部

原文地址:https://www.cnblogs.com/hysz/p/7151235.html