人类与发展 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 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥30 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动