:smile
好得很
看看
来学习
这段时间看看链表
for( i=1; i <= n; i++ )
{
scanf("%d", &e);
p = (dbLinkList)malloc(sizeof(dbLNode));
p->data = e;
p->freq = 0;
p->next = NULL;
p->prior = NULL;
if( !list->next ) // 如果是头结点的话
{
list->next = p;
p->prior = list;
}
else
{
r->next = p;
p->prior = r;
}
r = p;
}
这个代码写的妙
{:10_266:}
{:10_257:}
999999999999
我郁闷,这个链表,自己写的代码老师有问题
源代码
1
学习
对老师这道题给出的代码有一些疑问,产生疑问的代码部分如下图:(就是访问双向链表指定元素并改变权重函数中最重要的这部分)
http://xxx.fishc.com/album/201705/31/235127h4gn44kgdj8xg8d4.png
我自己画了一个这部分代码的执行一次while循环的完整过程变化图,图中每个链表的名称完全按照老师定义的变量来命名,如下图:
http://xxx.fishc.com/album/201705/31/233847h2t020rmrto2y9tr.png
http://xxx.fishc.com/album/201705/31/233857akarlm2zt3bmzm29.png
这个流程图完全按照人类习惯的思考方式从左到右将权重高的链表往左侧移动移位,若按照此流程图的顺序转换成代码,如下所示:
s->next = p;
p->prior = s;
p->next = q;
q->prior = p;
q->next = r;
if( r )
{
r->prior = q;
}
用这部分替换我第一张图中标红的部分(老师原始版本的代码),执行结果也完全没问题。
我的疑问如下:
老师实现那部分代码时是怎么的逻辑思维,还是那样写有什么更加深奥的好处,期盼小甲鱼老师或感兴趣的同学帮助解我心头之祸,感谢!
{:5_92:}
看看看看看看看看看
学习学习
666
很不错,谢谢分享
//