C++ 动态堆栈:类型定义指针结构?



我不明白这C++代码的开头发生了什么,这些代码会向我解释如何使用动态数组实现堆栈。我确定代码是正确的,因为程序运行正确(正确的结果),但我不明白!

struct Node {
char Info;
Node *Link;
};
typedef Node *Stack;

我看看:

  1. 有一个名为Nodestruct,它Info*Link为"字段",就像表单纸上的字段一样。所以Node是带有空"字段"的
  2. "模板">(struct)的名称。每次我们在这个程序上使用Node,比如说,Node StackOverflow,就像复印这张表格纸并填写它的字段一样;
  3. *Link本身就是另一个Node!但是,struct的指针("*")部分如何成为同一struct的另一个实例?指针没有像表单纸那样的"字段"!它们只能有一个地址作为值,因此只有一个字段,就像任何其他变量一样。此代码没有意义;
  4. 然后*Stacktypedef为一个指针("*"),它是一个struct("节点"),里面有一个指针("*链接"),实际上是另一个结构("节点*链接")。我什么都不懂了!!帮助!

让我们从代码开始。

struct Node {
char Info;
Node *Link;
};
typedef Node * Stack;

你写了这个:

有一个名为 Node 的结构,它有 Info 和 *Link 作为"字段", 就像表单纸上的字段一样。所以节点是一个"模板"的名称 (结构)与空"字段"。每次我们在这个程序上使用 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 *的别名。也就是说,堆栈是指向 Node 对象的指针。

所以这两行代码是完全相同的:

Node * nodePtr1 = nullptr;
Stack  nodePtr2 = nullptr;

它们都定义了一个初始化为 nullptr 的Node *

最新更新