| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1194 人关注过本帖
标题:关于结构体指针函数插入例题的一个问题
只看楼主 加入收藏
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
结帖率:84.38%
收藏
已结贴  问题点数:20 回复次数:9 
关于结构体指针函数插入例题的一个问题
写一个函数,在链表中指定位置插入一个结点。在一个链表的指定位置插入结点, 要求链表本身必须是已按某种规律排好序的。例如,在学生数据链表中, 要求学号顺序插入一个结点。设被插结点的指针为pi。 可在三种不同情况下插入。
1. 原表是空表,只需使head指向被插结点即可。见图7.7(a)
2. 被插结点值最小,应插入第一结点之前。这种情况下使head指向被插结点,被插结点的指针域指向原来的第一结点则可。即:pi->next=pb;
head=pi; 见图7.7(b)
3. 在其它位置插入,见图7.7(c)。这种情况下,使插入位置的前一结点的指针域指向被插结点,使被插结点的指针域指向插入位置的后一结点。即为:pi->next=pb;pf->next=pi;
4. 在表末插入,见图7.7(d)。这种情况下使原表末结点指针域指向被插结点,被插结点指针域置为NULL。即:
pb->next=pi;
pi->next=NULL; TYPE * insert(TYPE * head,TYPE *pi)
{
TYPE *pf,*pb;
pb=head;
if(head==NULL) /*空表插入*/
(head=pi;
pi->next=NULL;}
else
{
while((pi->num>pb->num)&&(pb->next!=NULL))
{pf=pb;
pb=pb->next; }/*找插入位置*/
if(pi->num<=pb->num)
{if(head==pb)head=pi;/*在第一结点之前插入*/
else pf->next=pi;/*在其它位置插入*/
pi->next=pb; }
else
{pb->next=pi;
pi->next=NULL;} /*在表末插入*/
}
return head;}



我的问题就是
while((pi->num>pb->num)&&(pb->next!=NULL))
{pf=pb;
pb=pb->next; }/*找插入位置*/
这个语句到底这这函数里面是其啥作用?是不是之前判断了如果此链表不为空链表的话,那么他构造一个新的链表,那为什么要判断pi->num>pb->num这个的真假呢?那如果是构造新链表,这样行不行
pf=pb;
pb=pf->next;
pb=pb->next;
电子书上关于这链表的也表达的不是很仔细,所以如果哪位同学愿意讲仔细点最好了,论坛里同学都可以看看
搜索更多相关主题的帖子: 结构体 
2011-12-10 14:22
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:20 
pi->num>pb->num//查找到该学会插入的位置,因为是生序排列,所以直到等于或者小于的时候停止查找。
pb->next!=NULL//没找完则继续查找,否则停止查找
2011-12-10 14:41
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用laznrbfe在2011-12-10 14:41:50的发言:

pi->num>pb->num//查找到该学会插入的位置,因为是生序排列,所以直到等于或者小于的时候停止查找。
pb->next!=NULL//没找完则继续查找,否则停止查找
噢。看来我深深错解这道题目了,呵呵,我决定面壁思过10分钟

认为事物非黑即白是缺智慧的表现……
2011-12-10 14:52
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用laznrbfe在2011-12-10 14:41:50的发言:

pi->num>pb->num//查找到该学会插入的位置,因为是生序排列,所以直到等于或者小于的时候停止查找。
pb->next!=NULL//没找完则继续查找,否则停止查找
{pf=pb;
pb=pb->next;

那这句是啥意思呢

认为事物非黑即白是缺智慧的表现……
2011-12-10 15:10
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
我自己顶上去,来个兄弟给指导一下

认为事物非黑即白是缺智慧的表现……
2011-12-10 15:26
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
还有就是我觉得
while((pi->num>pb->num)&&(pb->next!=NULL))
{pf=pb;
pb=pb->next; }
就是构建一个链表

[ 本帖最后由 a271885843 于 2011-12-10 16:05 编辑 ]

认为事物非黑即白是缺智慧的表现……
2011-12-10 15:58
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
为理解错了。
while((pi->num>pb->num)&&(pb->next!=NULL))
{pf=pb;
pb=pb->next; }这

是个循环体,排序查找,为什么有个pf=pb呢


还有为想问一下,这个控制循环的语句可不可以改成如下
pb=pf->next;
pb=pb->next;
这样呢

[ 本帖最后由 a271885843 于 2011-12-10 16:34 编辑 ]

认为事物非黑即白是缺智慧的表现……
2011-12-10 16:19
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
懂了。结构体指针链表中,=不是赋值,而是指向,这样就容易理解了,如果按照赋值理解,我艹,我还真理解不了

认为事物非黑即白是缺智慧的表现……
2011-12-10 16:51
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:0 
回复 7楼 a271885843
...我很少上论坛了,你加我QQ:379504075.不过,我手机上线就很难帮你回答了。
2011-12-21 20:07
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用laznrbfe在2011-12-21 20:07:08的发言:

...我很少上论坛了,你加我QQ:379504075.不过,我手机上线就很难帮你回答了。
嗯。之前没注意,看到了。我加你QQ

认为事物非黑即白是缺智慧的表现……
2011-12-29 21:45
快速回复:关于结构体指针函数插入例题的一个问题
数据加载中...
 
   



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

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