链表结构体问题

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次(头结点存储数据)。所以在需要频繁索取某些指定数据的情况下,牺牲空间为代价换取更优的性能就需要采取数组这种数据结构了。

转载于:https://www.cnblogs.com/wangmengmeng/p/4654848.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值