21xrx.com
2025-04-02 02:11:35 Wednesday
文章检索 我的文章 写文章
C++实现队列的基本操作代码
2023-06-27 20:09:28 深夜i     21     0
C++ 队列 基本操作 代码 实现

队列是一种常用的数据结构,它遵循先进先出(FIFO)的原则。C++中可以使用数组或链表实现队列,常用的基本操作有插入元素、删除元素、获取队首元素和获取队列长度等。下面是C++实现队列的基本操作代码。

1. 队列的结构体定义

struct Queue {
  int head, tail;
  int size;
  int *data;
};

队列使用结构体定义,其中head指向队首元素,tail指向队尾元素的下一个位置,size表示队列长度,data为队列存储数据的数组。

2. 队列的初始化

void initQueue(Queue *q, int n) {
  q->head = q->tail = 0;
  q->size = n;
  q->data = new int[n + 1];
}

队列的初始化函数需要传入队列的指针和队列的大小n。队列的头尾指针初始化为0,数据数组大小为n+1,因为需要一个空余的位置用于区分队列为空和队列已满。

3. 入队操作

bool enqueue(Queue *q, int x) {
  if ((q->tail + 1) % (q->size + 1) == q->head)
    return false// 队列已满,无法入队
  q->data[q->tail] = x;
  q->tail = (q->tail + 1) % (q->size + 1);
  return true;
}

入队操作需要传入队列指针和待插入的元素x,如果队列已满则返回false,否则将元素x插入队尾,tail指针后移一位。需要注意的是,tail指针加1后需要模上数组大小+1,以防tail超出数组边界。

4. 出队操作

bool dequeue(Queue *q, int *x) {
  if (q->head == q->tail)
    return false// 队列已空,无法出队
  *x = q->data[q->head];
  q->head = (q->head + 1) % (q->size + 1);
  return true;
}

出队操作需要传入队列指针和一个指向输出元素的指针x,如果队列已空则返回false,否则将队首元素输出并将head指针后移一位。同样需要注意head指针加1后需要模上数组大小+1。

5. 获取队首元素

bool getFront(Queue *q, int *x) {
  if (q->head == q->tail)
    return false// 队列已空
  *x = q->data[q->head];
  return true;
}

获取队首元素需要传入队列指针和一个指向输出元素的指针x,如果队列已空则返回false,否则将队首元素输出。

6. 获取队列长度

int getSize(Queue *q) {
  return (q->tail - q->head + q->size + 1) % (q->size + 1);
}

获取队列长度只需要计算tail和head之间的距离即可,需要注意tail和head间距需要模上数组大小+1。

7. 队列的销毁

void destroyQueue(Queue *q) {
  delete[] q->data;
}

队列使用完毕后需要释放动态分配的数组空间。

以上是C++实现队列的基本操作代码,通过这些代码可以实现队列的常用操作。在实际应用中,根据不同的需求可以对队列进行更详细的封装和扩展。

  
  

评论区