当前正在为考试做准备,在此示例代码中无法弄清队列[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];
}
答案 0 :(得分:1)
变量rear
是指向int
的指针。使用*rear
,您可以获得该int
的价值。然后将该值用作索引。
相当于例如
int index = *rear;
queue[index] = new_node;
index++;
*rear = index;
它将变量new_node
的值(即指针指向的地址)复制到queue[index]
中。从这一点开始,new_node
和queue[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
的内容。