【问题标题】:Double Pointers Queue, deQueue, enQueue双指针队列、deQueue、enQueue
【发布时间】:2018-11-28 09:00:13
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    数组中的每个node指针都会指向NewNodes。

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

    当你这样做时

           queue[*rear] = new_node; 
    

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

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

    【讨论】:

      【解决方案2】:

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

      相当于例如

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

      它将变量new_node的值(即指针指向的地址)复制到queue[index]。从现在开始,new_nodequeue[index] 都指向同一个东西。

      我希望这样可以更清楚地了解正在发生的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-21
        • 1970-01-01
        • 2022-11-17
        • 1970-01-01
        • 1970-01-01
        • 2015-06-26
        • 2022-10-05
        相关资源
        最近更新 更多