我无法理解这段 C++ 代码的开头发生了什么,它向我解释了如何使用动态数组实现堆栈。我确信代码是正确的,因为程序运行正确(正确的结果),但我不明白!
struct Node {
char Info;
Node *Link;
};
typedef Node *Stack;
让我们看看:
struct
称为 Node
,它有 Info
和 *Link
作为“字段”,就像表格纸上的字段一样。所以 Node
是带有空“字段”的 struct
) 的名称。每次我们在这个程序上使用Node
,就像,Node StackOverflow
,就像复印这张表格并填写它的字段;*Link
本身就是另一个Node
!但是 struct
的指针(“*”)部分怎么可能是同一个 struct
的另一个实例呢?指针不像表格纸那样有“字段”!它们只能有一个地址作为值,因此只有一个字段,就像任何其他变量一样。这段代码没有意义;*Stack
被 typedef
作为一个指针(“*”),它是一个 struct
(“Node”),里面有一个指针(“*Link”),实际上是另一个结构体(“Node *Link”) ”)。我什么都看不懂了!!!帮助!让我们从代码开始。
struct Node {
char Info;
Node *Link;
};
typedef Node * Stack;
你写了这个:
有一个名为 Node 的结构,它有 Info 和 *Link 作为“字段”, 就像表格纸上的字段一样。所以 Node 是一个“模板”的名称 (结构)带有空“字段”。每次我们在这个程序上使用 Node 时, 就像 Node StackOverflow 一样,就像复印此表单 纸并填充它的字段;
很接近了。你没有
* Link
,你有一个 Link
字段,它是指向另一个节点的指针。这是一个重要的概念,称为链表。第一项指向第二项,该项指向第三项,依此类推。 (它还可以用于更多事情)。
所以你可以这样做:
Node myNode;
myNode.Info = 'A';
myNode.Link = nullptr;
您现在有一个只有一个项目的链表,它的信息是“A”。
然后你可以这样做:
Node * anotherNode = new Node();
myNode.Link = anotherNode;
anotherNode->Info = 'B';
anotherNode->Link = nullptr;
现在您有一个包含两个项目的链表,其值为“A”和“B”。
链接本身就是另一个节点!但是结构体的指针(“”)部分怎么可能是同一结构体的另一个实例呢?指针没有 “字段”就像表格一样!他们只能有一个地址作为值,所以 与任何其他变量一样,只有一个字段。这段代码不会使 感觉;
不。该字段称为
Link
,类型为 Node *
。也就是说,它是指向另一个节点的指针。
然后 Stack 被类型定义为一个指针(“”),它是一个结构体 (“Node”)内部有一个指针(“*Link”),这实际上是另一个 struct(“节点*链接”)。我什么都看不懂了!!!帮助!
这也是同样的困惑。类型是
Stack
,它是 Node *
的别名。也就是说,Stack 是指向 Node 对象的指针。
所以这两行代码是完全一样的:
Node * nodePtr1 = nullptr;
Stack nodePtr2 = nullptr;
它们都定义了一个初始化为 nullptr 的
Node *
。