【问题标题】:Confusion regarding nodes in a Linked List关于链表中节点的混淆
【发布时间】:2016-09-26 12:34:37
【问题描述】:

我有一个关于链接列表的问题。我和一个朋友谈过,现在很困惑。 假设有两个结构节点类型的变量。一个是ptr,一个是header节点。

struct node
{
  int data;
  struct node *link;
};
struct node *ptr,*header;

有什么区别

ptr=header

ptr->link=header

ptr->link=header->link

? 编辑:我的意思是语义上。

【问题讨论】:

  • 您的要求不清楚。你具体指的是什么区别?语义上还是句法上?
  • @Downvoter 我的意思是语义上。
  • @Jean-FrançoisFabre 哈哈,谢谢。
  • 如果你想要节目语义,你需要展示一个节目。孤立的这 3 行仅具有语言语义,具体而言:右侧表达式分配给左侧表达式产生的对象。我猜你并没有真正问作业是什么意思。
  • "假设有两个 struct node 类型的变量。..." - 没有一个是 struct node 类型的。他们是struct node *。指针与其指向的对象不同!

标签: c linked-list nodes


【解决方案1】:

假设 header 最初指向一个分配的节点,它看起来像

                       +----------------+-----------+
                       |                |           |
header  +----------->  |   data         |  link+-----------> other node/NULL
                       |                |           |
                       +----------------+-----------+

ptr=header之后,ptrheader都指向同一个节点

                       +----------------+-----------+
pointer +----------->  |                |           |
header  +----------->  |   data         |  link+-----------> other node/NULL
                       |                |           |
                       +----------------+-----------+

ptr->link=header之后,

                       +----------------+-----------+
pointer +----------->  |                |           |
header  +----------->  |   data         |  link+----------+ 
                +--->  |                |           |     |
                |      +----------------+-----------+     |
                +-----------------------------------------+  

ptr->link=header->link 之后,这取决于headerptr 指向的位置

  • 如果它们指向同一个节点,则此语句将无效。
  • 如果它们指向一些不同的节点,那么ptrheader 指向的两个节点的link 指针将指向同一个节点(或NULL)。

                           +----------------+-----------+
                           |                |           |
    header  +----------->  |   data         |  link+--------------+                                                       |
                           |                |           |         |
                           +----------------+-----------+         +------> |
                                                                           |other node/NULL 
                                                                  +------> |
                           +----------------+-----------+         |
                           |                |           |         |
    ptr     +----------->  |   data         |  link+--------------+ 
                           |                |           |
                           +----------------+-----------+
    

【讨论】:

    【解决方案2】:

    假设您只执行以下一种情况:

    • ptr=header 将创建一个指向 header 节点的指针。这意味着ptr 的数据将与header 中的数据相同。 ptr->link 也将与 header->link 相同
    • ptr->link=header 在列表中移动ptr 前面的header
    • ptr->link = header->link 使ptrheader 平行,例如:

      ptr->data != header->data; // TRUE
      a = ptr->link;
      b = header->link;
      a->data == b->data // TRUE
      

    其中ab 的类型为struct node*

    【讨论】:

      【解决方案3】:

      最好的理解方式就是画出来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 2016-06-27
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 2016-06-28
        • 1970-01-01
        相关资源
        最近更新 更多