双指针队列,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_node
和 queue[index]
都指向同一件事。
我希望这能让我们更清楚地了解正在发生的事情。
这里queue
是指向struct Node pointers
数组的指针。
数组中的每个 node
指针将指向新节点。
node 1 node2
^ ^
| .... |
+--------+---------+--------+
queue -->| node * | node * |node * |
+--------+---------+--------+
当你这样做时
queue[*rear] = new_node;
您将 queue
数组中 *rear
位置的 node *
分配给 NewNode
我能想到的维护 Node *
数组的唯一原因是避免复制 NewNode
.
的内容
目前正在准备考试,无法弄清楚此示例代码中队列[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_node
和 queue[index]
都指向同一件事。
我希望这能让我们更清楚地了解正在发生的事情。
这里queue
是指向struct Node pointers
数组的指针。
数组中的每个 node
指针将指向新节点。
node 1 node2
^ ^
| .... |
+--------+---------+--------+
queue -->| node * | node * |node * |
+--------+---------+--------+
当你这样做时
queue[*rear] = new_node;
您将 queue
数组中 *rear
位置的 node *
分配给 NewNode
我能想到的维护 Node *
数组的唯一原因是避免复制 NewNode
.