免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3102 | 回复: 8
打印 上一主题 下一主题

[算法] 数据结构的的书说链表需要1个特殊的头节点,但是std::list并没有这么一个元素啊! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-03 20:35 |只看该作者 |倒序浏览
list需要一个所谓的头节点,这个头节点是链表的开始,它指向链表的第一个元素,本身不存储任何东西。这个我能理解。
但是我看std::list并没有一个这么所谓的头节点。

而且,我觉得,知道第一个节点就能访问链表了,这个所谓的头节点好像就是一种多余的存在啊。
求解释

论坛徽章:
15
2015七夕节徽章
日期:2015-08-21 11:06:172017金鸡报晓
日期:2017-01-10 15:19:56极客徽章
日期:2016-12-07 14:07:30shanzhi
日期:2016-06-17 17:59:3115-16赛季CBA联赛之四川
日期:2016-04-13 14:36:562016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-01-28 06:20:0015-16赛季CBA联赛之新疆
日期:2016-01-25 14:01:34IT运维版块每周发帖之星
日期:2016-01-07 23:04:26数据库技术版块每日发帖之星
日期:2016-01-03 06:20:00数据库技术版块每日发帖之星
日期:2015-12-01 06:20:00IT运维版块每日发帖之星
日期:2015-11-10 06:20:00
2 [报告]
发表于 2015-12-03 21:36 |只看该作者
c++ stl库文件可读性不是很好,但理论是不会错的,虽然我也没有看过代码,所谓的头结点其实就是一个指针而已

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-12-23 06:20:00每日论坛发贴之星
日期:2015-12-23 06:20:00
3 [报告]
发表于 2015-12-03 21:38 |只看该作者
头节点存放或者不存放数据都可以,这看实现者自己的定义;
头节点不存放数据可以令一些链表操作更方便,比如删除连表中某个节点x:
假设头节点不存放数据:

p = head;
q = head->next;
while (q) {
        if (q == x) {
                 p->next = q->next;
                 delete x;
                 break;
        }
        p = q;
        q = q->next;
}
return;

如果头节点存放数据,那删除节点的操作需要单独处理头节点:

if (x == head) {
        head = head->next;
        delete x;
        return;
}
p = head;
q = head->next;
while (q) {
        if (q == x) {
                 p->next = q->next;
                 delete x;
                 break;
        }
        p = q;
        q = q->next;
}
return;

不用纠结头节点是否需要存数据,按照自己的想法定义就好

评分

参与人数 1信誉积分 +5 收起 理由
Ruckus优科 + 5 很给力!

查看全部评分

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
4 [报告]
发表于 2015-12-03 22:14 |只看该作者
你看的那是什么数据结构的书啊?链表这种东西都搞得这么复杂?

你有个指针指向第一个节点不就行了,还要什么“特殊的头结点”?

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
5 [报告]
发表于 2015-12-06 14:13 |只看该作者
本帖最后由 dorodaloo 于 2015-12-06 14:14 编辑
windoze 发表于 2015-12-03 22:14
你看的那是什么数据结构的书啊?链表这种东西都搞得这么复杂?

你有个指针指向第一个节点不就行了,还要 ...


windoze
是不会错的

论坛徽章:
223
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:10操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
6 [报告]
发表于 2015-12-07 23:11 |只看该作者
head本身是存在内容的,要么为nil
也是个指针

论坛徽章:
223
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:10操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
7 [报告]
发表于 2015-12-07 23:15 |只看该作者
本帖最后由 action08 于 2015-12-07 23:16 编辑

代码语义翻译一下,链表的指针不是用pq
这里数据结构推荐用n next,p previous,代码看起来规范些,当然编译器无所谓

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
8 [报告]
发表于 2015-12-08 23:04 |只看该作者
回复 7# action08

pn……猛一看还以为说三极管……

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:032015年亚洲杯之中国
日期:2015-04-22 15:52:45
9 [报告]
发表于 2015-12-09 00:13 |只看该作者
本帖最后由 hanxin83 于 2015-12-09 00:16 编辑

我也看过类似的说法, 只不过说是"可以有"而不是"需要".
有这个空的头节点, 只是为了避免:
1. 插入节点, 每次都要额外判断一下"链表是不是空".
2. 删除节点, 每次都要额外判断一下"是不是删了头节点".

没有当然也是很好的, 我应届生毕业出来的时候弄个空的头节点还被人说是奇技淫巧呢~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP