请首先看上文:C语言线性表之队列算法一:链式队列 

四、循环队列

1. 我们上文中提到的静态队列就是用循环队列实现的,那为什么静态队列必须要用循环队列来实现呢?比如说一个队列可以容纳5个元素,此时队列满的情况下,我依次出队,等5个元素均出队完成后,再入队也入不进去,那前边已出队元素所占用的空间就白白学浪费了,比如下图所示,如果队头与队尾均指向最后的一个,那前边的空间怎么办呢?
C语言线性表之队列算法二:循环队列
C语言线性表之队列算法二:循环队列
2.初始化,队列的初始化分为以下的三步:
第一步:为数组(此处我们用数组来演示)分配相应的空间,但请注意,如果要分配的元素为n个,则请为数组分配n+1个空间,这样做是为了方便判断空及判断是否已满
第二步:设定队头指向第0个元素
第三步:设定队尾指向第0个元素 
 1 typedef struct Queue{
 2     int * pBase;
 3     int front;
 4     int rear;
 5 } QUEUE;
 6 //初始化
 7 void init(QUEUE * pq){
 8     pq->pBase=(int *)malloc(sizeof(int)*6);
 9     if(pq->pBase==NULL){
10         printf("动态内存分配失败,程序退出!");
11         exit(-1);
12     }
13     pq->front=0;
14     pq->rear=0;
15 }
View Code

3.入队,在入队时,我们只需要在Rear(队尾)入队即可,

 

首选判断是否已满(稍后说明);

第二步:在rear处插入元素(因为rear指向队列最后一个元素的下一个元素,所以是在rear处插入元素,而非在rear+1处插入;

相关文章:

  • 2021-10-13
  • 2022-01-11
  • 2021-04-27
  • 2022-12-23
  • 2021-11-05
  • 2022-12-23
  • 2021-11-26
猜你喜欢
  • 2022-12-23
  • 2021-06-06
  • 2021-04-16
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案