21xrx.com
2024-06-03 03:19:24 Monday
登录
文章检索 我的文章 写文章
C/C++实现循环队列
2023-07-05 03:57:01 深夜i     --     --
C/C++ 循环队列 实现

循环队列是一种常用的数据结构,常用于实现操作系统中的缓冲区或线程池。 C/C++ 实现循环队列的方法是将队列的容量设为一个固定值,而不是使用动态数组来实现。 在下面的文章中,我们将讨论如何用 C/C++ 语言实现循环队列。

定义

循环队列是一种特殊的队列,其元素在物理上是连续排列的,但逻辑上仍然是一个环形的,将队列头和队列尾相连。将队列的容量设为一个固定值,而不是使用动态数组来实现。在 C/C++ 中,循环队列的实现类似于数组的实现,并需要额外的指针来跟踪队列的头和尾。

实现步骤

1. 声明一个结构体来表示循环队列,包含以下元素:

a)一个数组,存储队列中元素的值;

b)队列头指针,指向队列中第一个元素;

c)队列尾指针,指向队列中最后一个元素后面的位置。

typedef struct {

  int queue[MAX_SIZE];

  int front;

  int rear;

} CircularQueue;

2. 初始化循环队列,即在队列前面和后面保留一个空间。

void init_queue(CircularQueue *q)

  q->front = 0;

  q->rear = 0;

3. 入队操作,在队尾插入元素。

void enqueue(CircularQueue *q, int value) {

  if ((q->rear + 1) % MAX_SIZE == q->front) {

    printf("Queue is full.\n");

  } else {

    q->queue[q->rear] = value;

    q->rear = (q->rear + 1) % MAX_SIZE;

  }

}

4. 出队操作,在队头删除元素。

int dequeue(CircularQueue *q) {

  if (q->front == q->rear) {

    printf("Queue is empty.\n");

    return -1;

  } else {

    int value = q->queue[q->front];

    q->front = (q->front + 1) % MAX_SIZE;

    return value;

  }

}

5. 获取队列中元素的个数。

int size(CircularQueue *q) {

  return (q->rear - q->front + MAX_SIZE) % MAX_SIZE;

}

6. 输出循环队列中的所有元素。

void print_queue(CircularQueue *q) {

  int i = q->front;

  while (i != q->rear) {

    printf("%d\n", q->queue[i]);

    i = (i + 1) % MAX_SIZE;

  }

}

7. 测试循环队列的代码。下面的代码演示了如何创建循环队列并对其进行插入和删除操作。

int main() {

  CircularQueue q;

  init_queue(&q);

  enqueue(&q, 1);

  enqueue(&q, 2);

  enqueue(&q, 3);

  dequeue(&q);

  print_queue(&q);

  return 0;

}

总结

循环队列是一种常用的数据结构,其能够高效地插入和删除元素。在 C/C++ 中,循环队列的实现类似于数组的实现,并需要额外的指针来跟踪队列的头和尾。通过实现循环队列,我们能够更好地理解数据结构的使用和实现。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复