• 链表结构体问题


    struct Lnode *next中,为什么struct Lnode 可以重复定义呢?括号外已经有struct Lnode ,怎么里面还能用这种类型?
    在括号外面定义的是结构体,意思就是我要定义一个结构体了,里面有什么什么数据,而在里面定义的*next结构体类型的指针,意思是,我定义的结构体每个结点里面有个指针指向的是结构体类型的数据,不是重新定义了。一个指针类型的成员是可以指向自己所在的结构体类型的数据的

    *Linklist相当于一个数组头指针,只是这个数组的元素是结构体
    *next则是构成链表的一个基本元素,指向该结点下一个结点的地址
    从某种意义上讲,*Linklist是指定了这段空间在内存中的位置(可以申请连续的结点空间),而*next则对结点进行了一定的空间排序

    1 Typedef  struct  LNode { 
    2       ElemType      data;  // 数据域 
    3       struct Lnode   *next;  // 指针域 
    4    } LNode, *LinkList;    
    5 LNode为结点      LinkList为指向链表的指针 
    6 LinkList  L;  // L 为单链表的头指针,是一个地址 


    为什么要采用链式存储(链表)存在的意义 为什么要采用链式存储: 
    与数组相比,链式存储(即链表)有如下两个优点: 
    1、数据元素的个数不确定,随时可能增减。采用固定大小的数组浪费空间。 
    2、方便排序,对于数组来说,每次插入一个元素都可能导致大量数据的移动。 
    有缺点吗: 
    与数组相比,链式存储有一个很大的缺点——读取数据! 
    对于读取其中指定第N个数据,链表必须从头结点用p = p->next(头结点不存储数据);一直遍历N次或N-1次(头结点存储数据)。所以在需要频繁索取某些指定数据的情况下,牺牲空间为代价换取更优的性能就需要采取数组这种数据结构了。
  • 相关阅读:
    [Tool]使用ConfuserEx混淆代码
    Python_安装官方whl包和tar.gz包
    0017_集合的补充
    0016_练习题d2
    0015_各数据类型方法代码实现
    0014_基本数据类型及常用方法剖析
    0013_运算符
    0012_编码转换
    0011_练习题d1
    0010_while循环
  • 原文地址:https://www.cnblogs.com/wangmengmeng/p/4654848.html
Copyright © 2020-2023  润新知