最近在学数据结构链表这块,我比较疑惑的点就是定义链表节点结构时对指针的定义,为什么用的是struct node *next 而不是 某种Elemtype ,比如int ; 这样定义的话系统是如何知道指针的大小的呢?是采用data的数据类型吗?这个问题可能有点幼稚,但我确实是有点迷惑,希望得到解答。
Struct Node{
ElemType data ;
Struct Node *next ; //就是这个地方
} ;
这上边的代码是看不出来的,少了一个模板(泛型的定义),通常还需要在结构体定义前面加上模板定义。通常是
template<typename ElemType>
struct Node{
ElemType data ;
struct Node *next ; //就是这个地方
} ;
或者
template<class ElemType>
struct Node{
ElemType data ;
struct Node *next ; //就是这个地方
} ;
那么系统是如何知道泛型的大小的呢?编译器使用模板,通过更换模板参数来创建数据类型。这个过程就是模板实例化。模板实例化取决于编译器能够找到可用代码来创建特例。编译器可以解析模板定义并检查语法。如果一个对象的数据类型在当前文件中没有定义,那么就会利用符号表,在多个文件做链接的时候找到相应的定义,找不到就会报错。如果找的到就会对象(特例)就会替换到泛型中。所以,首先要让编译器找到合适的"特例",在做完文件链接、模板实例化后,才知道对象的具体大小是多少。注意:结构体(类)的定义是不分配内存的,创建对象时,才分配内存。
你好啊,你可以理解为Struct Node *next代表指向这个结构体的指针,这个结构体中啊可以放不同类型的数据元素,如果你定义为单一类型是不匹配的,所以定义为结构体类型了,这样是最合适的。
另外啊,如果有疑惑可以看这里
https://daodaozi.blog.csdn.net/article/details/117905176
我之前学习这个写的笔记注释
这个指针的数据类型就是:struct Node * 。理解结构体就是一种新定义的数据类型,和 int* 型一样是一种数据类型。
题主你好!通常情况下(32位编译系统)中C语言的指针类型**(struct note *next,next是个指针类型的数据)**在内存中都占4个字节,我们知道,指针用来存放变量或者字符串常量的地址,地址是有类型的,但是任何类型数据的地址都只占4个字节!题主题目中的指针next是结构体类型的,当然也是占4个字节。关于链表我写了一篇详细的文章,针对初学者非常友好,链接在这里:https://blog.csdn.net/qq_41796226/article/details/125980808?spm=1001.2014.3001.5502 对题主有帮助的话,希望采纳,谢谢!