双指针队列,deQueue,enQueue

Double Pointers Queue, deQueue, enQueue

目前正在准备考试,无法弄清楚此示例代码中队列[rear*] = new_node背后的原因。

你不是把 new_node 的地址而不是值放进去吗?

另外,这个队列是一个Node**队列,因为它是一个指向节点指针列表的指针吗?

非常感谢,我真的很感激,无论我花了多少时间在双指针上,它们总是突然出现并重新测试我的理解,我以为我终于有了!

void enQueue(struct node **queue, int *rear, struct node *new_node) 
{ 
queue[*rear] = new_node; 
(*rear)++; 
} 

struct node *deQueue(struct node **queue, int *front) 
{ 
(*front)++; 
return queue[*front - 1]; 
} 

变量 rear 是指向 int 的指针。使用 *rear 可以得到 int 的值。然后将该值用作索引。

相当于

int index = *rear;
queue[index] = new_node;
index++;
*rear = index;

它将变量new_node的值(即指针指向的地址)复制到queue[index]。从这一点开始,new_nodequeue[index] 都指向同一件事。

我希望这能让我们更清楚地了解正在发生的事情。

这里queue是指向struct Node pointers数组的指针。

数组中的每个 node 指针将指向新节点。

              node 1              node2
               ^                  ^
               |       ....       |
           +--------+---------+--------+
  queue -->| node * | node *  |node *  |
           +--------+---------+--------+

当你这样做时

       queue[*rear] = new_node; 

您将 queue 数组中 *rear 位置的 node * 分配给 NewNode

我能想到的维护 Node * 数组的唯一原因是避免复制 NewNode.

的内容