21xrx.com
2024-12-22 22:35:15 Sunday
登录
文章检索 我的文章 写文章
C++实现队列的基本操作代码
2023-06-27 20:09:28 深夜i     --     --
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++实现队列的基本操作代码,通过这些代码可以实现队列的常用操作。在实际应用中,根据不同的需求可以对队列进行更详细的封装和扩展。

  
  

评论区

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