单向链表中的存值与存址、数据与p_next分离问题.doc
《单向链表中的存值与存址、数据与p_next分离问题.doc》由会员分享,可在线阅读,更多相关《单向链表中的存值与存址、数据与p_next分离问题.doc(4页珍藏版)》请在三一文库上搜索。
1、单向链表中的存值与存址、数据与p_next分离问题周立功教授数年之心血之作程序设计与数据结构以及面向AMetal框架与接口的编程(上),书本内容公开后,在电子行业掀起一片学习热潮。经周立功教授授权,本公众号特对程序设计与数据结构一书内容进行连载,愿共勉之。 3.2.1存值与存址1、存值2、存址 3.2.2 数据与p_next分离由于链表只关心p_next指针,因此完全没有必要在链表结点中定义数据域,那么只保留p_next指针就好了。链表结点的数据结构(slist.h)定义如下:由于结点中没有任何数据,因此节省了内存空间,其示意图详见图3.10。图3.10 链表示意图当用户需要使用链表管理数据时
2、,仅需关联数据和链表结点,最简单的方式是将数据和链表结点打包在一起。以int类型数据为例,首先将链表结点作为它的一个成员,再添加与用户相关的int类型数据,该结构体定义如下:由此可见,无论是什么数据,链表结点只是用户数据记录的一个成员。当调用链表接口时,仅需将node的地址作为链表接口参数即可。在定义链表结点的数据结构时,由于仅删除了data成员,因此还是可以直接使用原来的slist_add_tail()函数,管理int型数据的范例程序详见程序清单3.14。程序清单3.14 管理int型数据的范例程序由于用户需要初始化head为NULL,且遍历时需要操作各个结点的p_next指针。而将数据和p
3、_next分离的目的就是使各自的功能职责分离,链表只需要关心p_next的处理,用户只关心数据的处理。因此,对于用户来说,链表结点的定义就是一个“黑盒子”,只能通过链表提供的接口访问链表,不应该访问链表结点的具体成员。为了完成头结点的初始赋值,应该提供一个初始化函数,其本质上就是将头结点中的p_next成员设置为NULL。链表初始化函数原型为:由于头结点的类型与其它普通结点的类型一样,因此很容易让用户误以为,这是初始化所有结点的函数。实际上,头结点与普通结点的含义是不一样的,由于只要获取头结点就可以遍历整个链表,因此头结点往往是被链表的拥有者持有,而普通结点仅仅代表单一的一个结点。为了避免用户
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单向 中的 数据 p_next 分离 问题
链接地址:https://www.31doc.com/p-3398019.html