双指针队列,deQueue,enQueue

时间:2018-11-28 09:00:14

标签: c pointers data-structures queue double-pointer

当前正在为考试做准备,在此示例代码中无法弄清队列[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]; 
} 

2 个答案:

答案 0 :(得分:1)

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

相当于例如

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

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

我希望这样可以使事情更清楚。

答案 1 :(得分:1)

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

数组中每个node指针将指向NewNodes。

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

这样做的时候

       queue[*rear] = new_node; 

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

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