人类与发展 2022-07-28 22:11 采纳率: 100%
浏览 52
已结题

关于单链表定义的疑惑

问题遇到的现象和发生背景

最近在学数据结构链表这块,我比较疑惑的点就是定义链表节点结构时对指针的定义,为什么用的是struct node *next 而不是 某种Elemtype ,比如int ; 这样定义的话系统是如何知道指针的大小的呢?是采用data的数据类型吗?这个问题可能有点幼稚,但我确实是有点迷惑,希望得到解答。

问题相关代码,请勿粘贴截图

Struct Node{
ElemType data ;
Struct Node *next ; //就是这个地方
} ;

  • 写回答

4条回答 默认 最新

  • superSmart_Dong 2022-07-28 23:20
    关注

    这上边的代码是看不出来的,少了一个模板(泛型的定义),通常还需要在结构体定义前面加上模板定义。通常是

    template<typename ElemType> 
    struct Node{
    ElemType data ;
    struct Node *next ; //就是这个地方
    } ;
    

    或者

    template<class ElemType> 
    struct Node{
    ElemType data ;
    struct Node *next ; //就是这个地方
    } ;
    

    那么系统是如何知道泛型的大小的呢?编译器使用模板,通过更换模板参数来创建数据类型。这个过程就是模板实例化。模板实例化取决于编译器能够找到可用代码来创建特例。编译器可以解析模板定义并检查语法。如果一个对象的数据类型在当前文件中没有定义,那么就会利用符号表,在多个文件做链接的时候找到相应的定义,找不到就会报错。如果找的到就会对象(特例)就会替换到泛型中。所以,首先要让编译器找到合适的"特例",在做完文件链接、模板实例化后,才知道对象的具体大小是多少。注意:结构体(类)的定义是不分配内存的,创建对象时,才分配内存。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月6日
  • 已采纳回答 7月29日
  • 创建了问题 7月28日

悬赏问题

  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab