链表结构体问题
2015-07-17 16:05
302 查看
struct Lnode *next中,为什么struct Lnode 可以重复定义呢?括号外已经有struct Lnode ,怎么里面还能用这种类型?
在括号外面定义的是结构体,意思就是我要定义一个结构体了,里面有什么什么数据,而在里面定义的*next结构体类型的指针,意思是,我定义的结构体每个结点里面有个指针指向的是结构体类型的数据,不是重新定义了。一个指针类型的成员是可以指向自己所在的结构体类型的数据的
*Linklist相当于一个数组头指针,只是这个数组的元素是结构体 *next则是构成链表的一个基本元素,指向该结点下一个结点的地址 从某种意义上讲,*Linklist是指定了这段空间在内存中的位置(可以申请连续的结点空间),而*next则对结点进行了一定的空间排序
Typedef struct LNode { ElemType data; // 数据域 struct Lnode *next; // 指针域 } LNode, *LinkList; LNode为结点 LinkList为指向链表的指针 LinkList L; // L 为单链表的头指针,是一个地址
为什么要采用链式存储(链表)存在的意义 为什么要采用链式存储: 与数组相比,链式存储(即链表)有如下两个优点: 1、数据元素的个数不确定,随时可能增减。采用固定大小的数组浪费空间。 2、方便排序,对于数组来说,每次插入一个元素都可能导致大量数据的移动。 有缺点吗: 与数组相比,链式存储有一个很大的缺点——读取数据! 对于读取其中指定第N个数据,链表必须从头结点用p = p->next(头结点不存储数据);一直遍历N次或N-1次(头结点存储数据)。所以在需要频繁索取某些指定数据的情况下,牺牲空间为代价换取更优的性能就需要采取数组这种数据结构了。
相关文章推荐
- 【笔记】ListView的使用
- 设计模式六大原则
- Android 混淆打包,阻止反编译
- 浅谈clientHeight、offsetHeight、scrollHeight的联系与区别
- freemarker中修改和添加功能中包含checkbox复选框默认选中需求的解决方式
- js倒计时天时分秒[转]
- 一个简易makefile教程
- HashMap, TreeMap, Hashtable的区别
- 收藏网站9
- Nginx+Php-fpm+MySQL+Redis源代码编译安装指南
- python中的继承
- 获取多段线的所有顶点
- (cocos2dx)使用__Array容器检测碰撞时间
- JAVE中String.lastIndexOf的用法及延伸
- 浏览图片
- 测试
- 收藏网站7
- java之数组中出现次数超过一半的数字
- 关于ESXI更改管理网络IP注意事项
- GCD