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

 

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

【分析】

两种情况:

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

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

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

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

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

【使用场合】

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

posted @ 2012-01-02 09:42  j2ee技术  阅读(504)  评论(0编辑  收藏  举报