c - 双指针队列,deQueue,enQueue

标签 c pointers data-structures queue double-pointer

目前正在准备考试,无法弄清楚示例代码中 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/

相关文章:

c++ - 指向 vector : getting segmentation fault 的指针

c - 在 C 中使用 scanf 进行解析

algorithm - 堆排序伪代码算法

java - 为什么这个表达式 i+=i++ 不同于 Java 和 C?

c - 返回语句在 C 中如何工作?

c++ - 在不同的文件中定义指针数组长度(C++)

python - 循环队列 Python

swift - 寻找在 Swift 中从字符串中过滤文本的最佳方法

c - 为什么第一个 sbrk 的返回值与后续调用不同?

c - 如何纠正扭曲的文档?