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 为单链表的头指针,是一个地址
为何要采用链式存储(链表)存在的意义 为何要采用链式存储: 与数组相比,链式存储(即链表)有以下两个优势: 一、数据元素的个数不肯定,随时可能增减。采用固定大小的数组浪费空间。 二、方便排序,对于数组来讲,每次插入一个元素均可能致使大量数据的移动。 有缺点吗: 与数组相比,链式存储有一个很大的缺点——读取数据! 对于读取其中指定第N个数据,链表必须从头结点用p = p->next(头结点不存储数据);一直遍历N次或N-1次(头结点存储数据)。因此在须要频繁索取某些指定数据的状况下,牺牲空间为代价换取更优的性能就须要采起数组这种数据结构了。