标题:分享:双链表的简单操作
只看楼主
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
以下是引用renkejun1942在2017-4-12 20:35:08的发言:

for( next = RootP->next; next != Root; next = next->next )
      ;
你这不是正向遍历吗 我说的是双链表的反向遍历

DO IT YOURSELF !
2017-04-12 20:36
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 11楼 wp231957
前向指针的名字是prev,所以正向遍历是next = next->prev;
next是后向指针,所以逆序遍历是 next= next->next;

所以我建议你画一个,随手就行。这两个指针的名字你就会很直观了。

好吧,也许我的这个遍历指针next让你会困扰,所以,换成this会不会更好?

我换一个名字:
前向指针的名字是prev,所以正向遍历是this = this->prev;
next是后向指针,所以逆序遍历是 this= this->next;


如果双向链表是一个循环链表的话,那么正向遍历的终止条件也将是: this != RootP;

[此贴子已经被作者于2017-4-12 20:43编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-12 20:39
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
链表的指针是有几乎约定成俗的名字的:

单链表是next 或link;
双链表是prev 和 next;

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-12 20:45
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
我在另一本书里看到的是prior  
双链表 难道不是这个样子吗


DO IT YOURSELF !
2017-04-12 20:58
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 14楼 wp231957
那就不知道为什么了。我是从一个职业程序员哪里获得这些信息的。以前我取变量名也乱来的。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-12 21:02
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 14楼 wp231957
另外,你发的图片里的资料并不好。

你的图片的意思是双向链表的结构应该是这样的:

struct XXX {
        struct XXX *Prior;
        int value;
        struct XXX *next;
};

如果value的类型是double,那么这个结构在某些系统上会占用24个字节,但如果按下面这样写,就只占16个字节。

struct XXX {
        int value;
        struct XXX *prior;
        struct XXX *next;
};

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-12 21:07
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
没有  这是我自己画的 主要是区别前后指针

我看c的资料都是
struct XXX {
        int value;
        struct XXX *prior;
        struct XXX *next;
};
而delphi的资料 一般都是
struct XXX {
        struct XXX *prior;
        struct XXX *next;
        int value;

};

DO IT YOURSELF !
2017-04-12 21:10
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 17楼 wp231957
不,对字节有严格要求的类型一定要放在最前面,按占用字节数,应该从大到小。这个你用自己的编译器做一下sizeof的测试就可以知道了。

当然节省的内存会根据系统不同而有所不同,但不会出现占用更大的可能性。

[此贴子已经被作者于2017-4-12 21:16编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-12 21:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475428-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.148577 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved