You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于C++链表实现栈的代码开头struct与typedef的疑问求助

关于链表实现栈的C++代码疑问解答

先明确:你贴的这段代码不是动态数组实现栈,而是用单向链表实现栈——这是你误解的核心前提,理清这点再看代码就通顺了。

疑问1:Node结构体的理解

  • Node是普通的C结构体类型,不是“结构体模板”(C里的模板需要template关键字声明)。当你创建Node类型的对象时,内存会为该对象分配空间,每个对象独立拥有Info(存储栈元素的char类型值)和Link成员。

疑问2:结构体中的同类型指针为什么合法

  • 指针变量的大小是固定的(比如32位系统占4字节,64位占8字节),和它指向的类型无关。在声明struct Node时,即便Node还没完成完整定义(属于“不完全类型”),编译器也能确定Node*是指针类型、知道它的大小,所以允许在结构体内部声明指向自身类型的指针。
  • 这个Link指针的作用是把多个Node对象串成链式结构:每个节点通过Link指向链表中的下一个节点,链表栈就是靠这种结构存储元素,栈顶就是链表的头节点。

疑问3:typedef Node* Stack的含义

  • typedef的作用是给已有类型起别名,这里typedef Node* Stack;意味着**Stack就是Node*的同义词**。
  • 链表实现的栈,只需要记录栈顶节点的地址就能完成所有操作(压栈是在栈顶新增节点,弹栈是移除栈顶节点),用Stack作为栈顶指针的别名,写代码时更直观——比如Stack my_stack = nullptr;,比Node* my_stack = nullptr;更能体现这是一个栈,而非普通的节点指针。

内容的提问来源于stack exchange,提问作者BsAxUbx5KoQDEpCAqSffwGy554PSah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 10:45:44