单链表中为什么要有next指针?

 

【问题描述】 单链表结构中有一个指向该结构的next节点指针,为什么要有这个节点指针呢?

【分析】

两种情况:

(1) 调用1次malloc,要求保存300个相同的结构;

(2) 调用300次malloc,要求保存1个相同的结构;

这两种情况有什么区别呢?

第一种情况将分配一个连续的内存块,通过数组符号(记录了首地址),就可以访问每个结构。而第二种情况,分配的内存不是连续的,这意味着这些结构不一定会被连续存储,因此,不能通过数组符号实现对每个结构的访问。

包括单链表的链表结构就属于第二种情况,为了实现对整个结构的访问,单链表有个聪明的办法,那就是在每个结构中,利用一个名为next的指针,记录下一个结构的首地址。这样,只要知道了一个结构的首地址和结构的大小,就可以实现对全部结构的访问。

【使用场合】

单链表等链表结构,都需要建立类似的指针,记录链接结构的地址。因此每个结构会占用4字节的指针空间。当数据量比较小时,采用第一种情况的方法,由于不需要额外的指针记录结构的地址,更节省内存空间。当数据量比较大时,第一种情况,由于只malloc一次,在malloc时,必须分配足够的空间供数据域使用,而结构的数据域大小本身是未知的,有大有小,势必造成内存的浪费,第二种情况不存在该缺陷,数据量越大,优势越明显。

转载于:https://www.cnblogs.com/J2EEPLUS/archive/2012/01/02/2487965.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值