【问题标题】:Can someone explain to me what I'm doing when creating a list in C++?有人可以向我解释在 C++ 中创建列表时我在做什么吗?
【发布时间】:2021-04-19 21:24:27
【问题描述】:

虽然我了解了列表和指针背后的概念,但我只是不理解脚本,每个部分在说什么。这是我们在课堂上所做的一个例子:

struct Node
{
   int info;
   struct Node * next;
};

struct Node * first; 

first=NULL;

我确实得到了第二部分:简单地定义列表中的第一个元素并为其分配一个空值。但是struct Node 部分呢?

【问题讨论】:

  • 这似乎是 C,而不是 C++。在 C++ 中从不需要 struct Node * 符号。
  • @DrewDormann 所以是C?不过,我正在上 C++ 课程。也许我的老师正在做一些……偷偷摸摸的事情。
  • @drescherjm 与 struct Node * next; 相同 -> Node * next;
  • @agaminon "所以它是 C?不过我正在学习 C++ 课程" - C++ 起源于 C,但两者是不同的语言,而现代 C /C++ 有很大的不同。 C++ 教师在 C++ 环境中教授 C-ism 的情况并不少见。通常在引入更高层次的想法之前教授低层次的想法(有些人认为应该教授相反的方法)。创建链表的 C++ 方法是使用标准的std::list 类。您的老师可能希望您了解 std::list 在幕后所做的工作。

标签: c++ list pointers


【解决方案1】:
struct Node
{
   int info;
   struct Node * next;
};

定义一个名为Nodestruct type,其中包含2 个数据成员、一个int 和一个struct Node* 指针。 struct 是一种在内存中将相关数据组合在一起的方法。 class 是另一种方式。这些更正式地称为compound types

在节点链表中使用时,每个节点的next 成员将被设置为指向链表中的下一个节点。列表中的最后一个节点将其 next 成员设置为 NULL。从列表中的第一个节点开始,您可以将整个列表从一个节点迭代到下一个节点,直到达到 NULL。

struct Node * first; 

声明一个名为 first 类型为 struct Node * 的指针变量(struct 关键字在 C++ 中是可选的,但在 C 中是必需的)。

first=NULL;

将指针变量first 设置为NULL 的值(即,对于其中没有节点的链表)。

【讨论】:

  • 我很困惑为什么指针被写为'struct Node *',你能澄清一下吗?也感谢您的广泛回答。
  • 在 C 中,对结构类型名的任何引用都需要 struct 关键字,除非您使用 typedef 为其别名,即:typedef struct Node { ... } Node; 然后您可以使用 Node *first; 而不是 @987654343 @。 C++ 支持 C 语法,但它还通过在 struct 类型声明之外的任何地方使 struct 关键字可选,从而简化了语法,因此不需要 typedef
【解决方案2】:

买五个衣架。考虑每个变量Node 类型的变量(struct Node 是相同的,只是采用 C 风格的语法,C++ 编译器也接受)。
你的手是指针 first(在 C++ 语法中是 Node * 类型,在 C 风格中是 struct Node *)。
你的手还空着就像first 是NULL。

拿起你手中的一个衣架。 (把它放在一端,而不是钩子上。)
现在first 指向第一个衣架。 (握住第一个衣架,挂钩朝下。)

将第二个挂钩挂在第一个挂钩上,使第二个挂钩是空的并朝下。通过使第一个元素的钩子/指针保持第二个元素,您已将第二个元素添加到列表中。第二个的钩子是空的,NULL。

将第三个挂钩挂到第二个,第三个挂钩指向下方并空。

同样添加第四个。

如果你曾经使用过它,你的第二只手是一个辅助指针,你经常需要一个。

无论你被要求对链表做什么,先用你的五个衣架尝试一下,
这应该可以帮助您解决遇到的所有编程问题。

祝你好运。

我在想这样的衣架

\----------/
 \        /
  \      /
   --|-- 
     J

不是这样的

----   ----
    \ /
     J

如果您的衣架是用金属丝制成的,就像许多洗衣店使用的那样,您可以稍微弯曲一下,以方便挂入。

\----^-----/
 \        /
  \      /
   --|-- 
     J

【讨论】:

  • 感谢您澄清概念,这似乎是一个很好的类比!
  • 我的荣幸。 :-)
  • 我想我不知何故迷失在计算 0,1,2,3,4 等于 5 的 C-ish 方式中。嗯,第五个衣架仍然闲置未使用。不用担心。 ;-)
猜你喜欢
  • 1970-01-01
  • 2010-12-17
  • 2014-12-06
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 2011-12-13
  • 2019-06-19
  • 1970-01-01
相关资源
最近更新 更多