目前正在准备考试,无法弄清楚示例代码中 queue[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];
}
最佳答案
这里的 queue
是指向 struct Node pointers
数组的指针。
数组中的每个 node
指针都将指向 NewNodes。
node 1 node2
^ ^
| .... |
+--------+---------+--------+
queue -->| node * | node * |node * |
+--------+---------+--------+
当你做的时候
queue[*rear] = new_node;
您将 queue
数组中 *rear
位置的 node *
分配给 NewNode
我能想到的维护 Node *
数组的唯一原因是避免复制 NewNode
的内容。
关于c - 双指针队列,deQueue,enQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53515608/