标签:
struct Lnode *next中,为什么struct Lnode 可以重复定义呢?括号外已经有struct Lnode ,怎么里面还能用这种类型?
在括号外面定义的是结构体,意思就是我要定义一个结构体了,里面有什么什么数据,而在里面定义的*next结构体类型的指针,意思是,我定义的结构体每个结点里面有个指针指向的是结构体类型的数据,不是重新定义了。一个指针类型的成员是可以指向自己所在的结构体类型的数据的
*Linklist相当于一个数组头指针,只是这个数组的元素是结构体
*next则是构成链表的一个基本元素,指向该结点下一个结点的地址
从某种意义上讲,*Linklist是指定了这段空间在内存中的位置(可以申请连续的结点空间),而*next则对结点进行了一定的空间排序
为什么要采用链式存储(链表)存在的意义 为什么要采用链式存储:
与数组相比,链式存储(即链表)有如下两个优点:
1、数据元素的个数不确定,随时可能增减。采用固定大小的数组浪费空间。
2、方便排序,对于数组来说,每次插入一个元素都可能导致大量数据的移动。
有缺点吗:
与数组相比,链式存储有一个很大的缺点——读取数据!
对于读取其中指定第N个数据,链表必须从头结点用p = p->next(头结点不存储数据);一直遍历N次或N-1次(头结点存储数据)。所以在需要频繁索取某些指定数据的情况下,牺牲空间为代价换取更优的性能就需要采取数组这种数据结构了。
标签:
原文地址:http://www.cnblogs.com/wangmengmeng/p/4654848.html