关于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
相关产品推荐
相关产品推荐

