| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1142 人关注过本帖
标题:请教合并问题...
取消只看楼主 加入收藏
haroldi
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2006-7-22
收藏
 问题点数:0 回复次数:8 
请教合并问题...
请教各位:这个合并怎么错了啊?
LinkList Merge(LinkList La,LinkList Lb)
{
LinkList p,q,s=La;
s->data = La->data + Lb->data;
p = La->next; q = Lb->next;
while(p && q)
{
if(p->data <= q->data)
{
s->next = p;
s = p;
p = p->next;
}
else
{
s->next = q;
s = q;
q = q->next;
}
}
s->next = p?p:q;
// Free(Lb); //这句加上就死循环,,,不知什么原因??(Free函数正常)
return La;
}
搜索更多相关主题的帖子: next data LinkList 
2006-09-05 09:37
haroldi
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2006-7-22
收藏
得分:0 

我是学习单链表操作,,,在合并上总出错,原理看了好多次,也查看了一些网上的解答,
可一做就出问题.请问应该怎样编写好.(是不是C的基础差啊)
......
#define SIZE sizeof(LinkList)
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LinkList;

.......

int main(void)
{
LinkList *sa,*sb;
sa = Creat_L(sa);
sb = Creat_L(sb);
printf("合并:\n");
sa = Merge(sa,sb);
Disp(sa);
Free(sa);
return 0;
}

LinkList *Creat_L(LinkList *L)
{
int ip = 0; //统计结点数量;
LinkList *p,*s;
if(!(L = (LinkList *)malloc(SIZE))) {printf("\n\tOut of Memory!\n"); return 0;}
L->next = NULL;
p = L;
printf("输入:");
if(!(s = (LinkList *)malloc(SIZE))) {printf("\n\tOut of Memory!\n"); return 0;}
while(scanf("%d",&s->data)==1)
{
++ ip;
s->next = NULL;
p->next = s;
p = s;
if(!(s = (LinkList *)malloc(SIZE))) {printf("\n\tOut of Memory!\n"); return 0;}
}
L->data = ip; //结点数量放入头结点;
while(getchar()!='\n') continue;
printf("\t创建完成。\n");
return L;
}

LinkList *Merge(LinkList *La,LinkList *Lb)
{
LinkList *p,*q,*s=La;
s->data = La->data + Lb->data; //将结点和放回La头结点;
p = La->next; q = Lb->next;
while(p && q)
{
if(p->data <= q->data)
{
s->next = p;
s = p;
if(p->data == q->data) q = q->next;
p = p->next;
}
else
{
s->next = q;
s = q;
q = q->next;
}
s->next = NULL;
}
s->next = p?p:q;
Free(Lb); //这个出错,不知什么问题,好象函数调用有问题?屏蔽就能通过.
return La;
}

int Disp(LinkList *L)
{
LinkList *p;
if(L->data == 0) {printf("\n这个是空链表。\n");return 0;}
else printf("有 %2d 个结点。",L->data);
p = L->next;
while(p->next)
{
printf("%3d ->",p->data);
p = p->next;
}
printf("%3d 。\n",p->data);
printf("\t显示完成。\n");
return 0;
}

void Free(LinkList *L)
{
int f = 0;
LinkList *p;
p = L;
while(p)
{
L = L->next;
free(p);
p = L;
++ f;
}
if(f) printf("\t删除完成。(含表头)共删除 %d 个。\n",f);
}


Do people want thick road ...
2006-09-05 10:55
haroldi
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2006-7-22
收藏
得分:0 
多谢两位!!

Free()出错是怎么回事呢?

Do people want thick road ...
2006-09-05 13:39
haroldi
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2006-7-22
收藏
得分:0 
还是不太明白,我调用的是Free()子程序,不是free()啊,
是不是哪儿有冲突呢?

我看了以前的帖子说:释放应该在打印里释放.
[URL=http://www.bc-cn.net/bbs/dispbbs.asp?BoardID=179&ID=72911&star=100][/URL]

那我就在程序结束前释放好了...

Do people want thick road ...
2006-09-06 20:51
haroldi
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2006-7-22
收藏
得分:0 
我觉得合并完后,Lb就用不到了吧,可怎么释放不掉啊...

可能我脑筋不转弯,理解不明白怎么回事.

Do people want thick road ...
2006-09-06 23:27
haroldi
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2006-7-22
收藏
得分:0 
以下是引用haroldi在2006-9-6 20:51:27的发言:
还是不太明白,我调用的是Free()子程序,不是free()啊,
是不是哪儿有冲突呢?

我看了以前的帖子说:释放应该在打印里释放.
[URL=http://www.bc-cn.net/bbs/dispbbs.asp?BoardID=179&ID=72911&star=100][/URL]

那我就在程序结束前释放好了...

奇怪,,,刚才粘上了,怎么没显示.就是这个连接:
http://www.bc-cn.net/bbs/dispbbs.asp?BoardID=179&ID=72911&star=100



Do people want thick road ...
2006-09-06 23:30
haroldi
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2006-7-22
收藏
得分:0 
哦,是不是函数返回之后,才能再释放,否则会破坏返回的链表.

Do people want thick road ...
2006-09-06 23:34
haroldi
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2006-7-22
收藏
得分:0 

明白了.多谢各位了!

[此贴子已经被作者于2006-9-7 0:17:22编辑过]


Do people want thick road ...
2006-09-07 00:03
haroldi
Rank: 1
等 级:新手上路
帖 子:158
专家分:0
注 册:2006-7-22
收藏
得分:0 
这回就对了,,,帮着看看\提提意见.

void Merge(LinkList *La,LinkList *Lb) //对有序链表归并并删除重复结点;
{
LinkList *h,*p,*q,*s = NULL;
h = La;
p = La->next;
q = Lb->next;
free(Lb);
while(p && q)
{
if(p->data <= q->data)
{
if(p->data == q->data)
{
s = q;
q = q->next;
free(s);
}
h->next = p;
h = p;
p = p->next;
}
else
{
h->next = q;
h = q;
q = q->next;
}
}
h->next = p?p:q;
}

Do people want thick road ...
2006-09-07 03:27
快速回复:请教合并问题...
数据加载中...
 
   



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

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