搞懂408数据结构中的结构体的定义

2023-05-16

        对于一些跨考408的同学来说,是不是经常会出现看见一些结构体的定义却不懂是什么意思,或者让你定义一个节点类型时,不懂各个部分的具体含义。

        希望这篇文章能够让你搞懂结构体到底是什么,各个部分是什么含义。

        我们以一个单链表的结点为例:

 

        对于这个单链表的结点类型,他一共包含两个东西,数据域和指针域,那这个数据域和指针域就是结构体的成员变量。下面是对这个结点的数据结构的定义,以及各个部分含义的解释。

图中对typedef 和 struct 没有解释,在这里说明一下。

        首先定义一个结构体(也就是结点的数据结构),可以没有typedef但是一定不能没有structstruct关键字就像是定义整型变量的 int,他是不可缺少的,只有在struct的声明之下才知道定义的是一个结构体类型,所以在定义数据结构时,一定不能丢掉这个struct。

        对于typedef,它的作用就是起别名,例如:

       typedef  int  A;

        就是给int起了个小名叫做A,你可以通过 A代替int定义整形变量如:A s = 5;

        所以在结构体前面加个typedef 就是为了给结构体起小名,如上面那个图所示,这个结构体被取了个小名叫做LNode(他取的小名和结构体的本名struct LNode一样,是为了方便理解,所以你在取小名的时候也可以取一样的),对于另一个小名叫做 LinkList,就像我图上写的一样,他加了个星号,他是把 struct LNode *  类型取个名字叫做Linklist。

        那为什么取两个名字呢?就是为了方便理解,当我们定义一个单链表的时候,头结点不光是一个结点,他还是这个链表的代表,我们是不是可以用LinkList来区分。

        用LinkList定义的这个结点,他的结构和其他结点一样,而且形象的告诉我们这个结点是个头结点,看到他就相当于我定义了一个链表。

 

下面通过对一个孩子兄弟表示法的树结点,我们实践一下。

        对于孩子兄弟表示法的树形结构,结点是不是如上图所示,其中一个数据域data,两个指针域(指针域存放的就是指向其它结点的指针,在定义时用指针类型),所以我们就确定了结构体中的成员

        data、child、brother。接下来起名字,可以将结构体的大名起为 CBNode,其中一个小名和大名一样,也是CBNode,另一个小名起名为CBTree

        所以结构体(数据结构)的定义如下:

typedef struct BCNode
{
    int data; //数据域的类型视情况而定
    struct BCNode * child;  //指向的其它结点的类型是什么就写什么 后面再加个*
    struct BCNode * brother; //同上
}BCNode,* BCTree;


BCTree head = (BCTree)malloc(sizeof(BCNode)); //定义头结点的时候使用的就是BCTree

 

 

 

        

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搞懂408数据结构中的结构体的定义 的相关文章

  • 深拷贝和浅拷贝

    浅拷贝和深拷贝的区别 浅拷贝是复制原数据的数据内容 xff0c 引用原数据的地址 xff1b 当改变复制之后的数据时 xff0c 原数据的数据内容也会被改变 xff0c 因为这是引用原来数据的地址 xff0c 改变的是原数据地址的数据内容
  • Set集合和Map集合

    Set集合 用于存放不重复的数据 xff0c 通过构造函数的形式 参数必须是一个可迭代对象 创建Set对象 span class token keyword const span s1 span class token operator 6
  • js树型结构处理

    span class token comment 获取树形结构并处理 span span class token comment 当child为null时处理 span span class token comment 如果是childre

随机推荐