我不明白这C++代码的开头发生了什么,这些代码会向我解释如何使用动态数组实现堆栈。我确定代码是正确的,因为程序运行正确(正确的结果),但我不明白!
struct Node {
char Info;
Node *Link;
};
typedef Node *Stack;
我看看:
- 有一个名为
Node
的struct
,它Info
和*Link
为"字段",就像表单纸上的字段一样。所以Node
是带有空"字段"的 *Link
本身就是另一个Node
!但是,struct
的指针("*")部分如何成为同一struct
的另一个实例?指针没有像表单纸那样的"字段"!它们只能有一个地址作为值,因此只有一个字段,就像任何其他变量一样。此代码没有意义;- 然后
*Stack
typedef
为一个指针("*"),它是一个struct
("节点"),里面有一个指针("*链接"),实际上是另一个结构("节点*链接")。我什么都不懂了!!帮助!
struct
)的名称。每次我们在这个程序上使用Node
,比如说,Node StackOverflow
,就像复印这张表格纸并填写它的字段一样;
让我们从代码开始。
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 *
。