| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 932 人关注过本帖
标题:[求助]一道单链表的题
只看楼主 加入收藏
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
结帖率:100%
收藏
 问题点数:0 回复次数:9 
[求助]一道单链表的题

有两个按元素值递增有序的单链表A和B,编一程序将A表和B表归并成一个新的递增有序的单链表C(值相同的元素只保留一个在C表中)

#include <stdio.h>
typedef struct node
{ int data;
struct node *next;
} LINKLIST;

LINKLIST *creat ( *void) ;
merger (LINKLIST *head_a,LINKLIST *head_b,LINKLIST *head_c) ;
void print (LINKLIST *head_c) ;

main()
{ LINKLIST a={1,3,8,19,26};
LINKLIST b={2,3,10,11,19,23,29,35};
LINKLIST *head_a=&a,*head_b=&b;
LINKLIST *head_c;
head_c=creat ();
merger ( head_a, head_b,head_c) ;
print ( head_c);

}

LINKLIST *creat ( *void)
{ LINKLIST *r,*head_c,*last;

r=malloc (sizeof(LINKlIST)); // 建立表头节点
head_c=r;last=r;
t->next=NULL;
return (head_c);
}

merger(LINKLIST *head_a,LINKLIST *head_b,LINKLIST *head_c) // 合并链表
{ LINKLIT *p,*q,*r,*last;
p=head_a,q=head_b,r=head_c ,last=r;
while (p!=NULL&&q!=NULL)
{ r=malloc(sizeof(LINKLIST));
if (p->data<q->data)
{
r->data=p->data;
last->next=r;
last=r;
r->next=NULL;
p=p->next;
r=r->next; //这里好象很有问题,因为后面没有节点了,可是不知道该怎么弄
}
else if (p->data>q->data)
{
r->data=q->data)
last->next=r;
last=r;
t->next=NULL;
q=q->next;
r=r->next;

}
else {
r->data=p->data;
last->next=r;
last=r;
t->next=NULL;
p=p->next;
q=q->next;
r=r->next;
}

}

while (p!=NULL)
{ r=malloc (sizeof(LINKLIST));
r->data=p->data;
last->next=r;
last=r;
t->next=NULL;
p=p->next;
r=r->next;
}

while (q!=NULL)
{ r=malloc (sizeof(LINKLIST));
r->data=q->data;
last->next=r;
last=r;
t->next=NULL;
q=q->next;
r=r->next;
}
}

void print (LINKLIST *head_c) // 链表C的输出
{ LINKLIST *r;
printf("The new LINKLIST:\n");
r=head_c;
r=r->next;
while (r!=NULL)
{ printf("%6d",r->data);
r=r->next;
}
}

好象写的很不对,谁能帮我写个,让我对照一下

PS:可以再附加一个问题吗?

点分十进制表示的IP地址131.107.2.89的二进制表示是________

[此贴子已经被作者于2006-10-14 11:08:59编辑过]

搜索更多相关主题的帖子: 单链 
2006-10-14 09:49
mnlmng
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-10-1
收藏
得分:0 

上面的同学,你写程序怎么不注释呀,看得不爽,改下吧,不注释,很少人愿意帮你看的

2006-10-14 10:47
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
确实很乱

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-10-14 11:09
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
点分十进制表示的IP地址131.107.2.89的二进制表示是________

///////////////////////////////////////

10000011011010110000001001011001

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-10-14 15:47
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
nodelink link_head12(nodelink head1,nodelink head2)
{ nodelink q,head3,s,p;
head3=(nodelink)malloc(sizeof(node));/*建head3表*/
head3->next=NULL;
q=NULL;
s=head1->next;
p=head2->next;
while(p&&s) /*排序*/
{ if(s->info<p->info)
{ q=s->next;
s->next=head3->next;
head3->next=s;
s=q;
}
else
{ q=p->next;
p->next=head3->next;
head3->next=p;
p=q;
}
}
if(s)
{
while(s->next!=NULL)
{ q=s;
s->next=head3->next;
head3->next=s;
s=q->next;
}
s->next=head3->next;
head3->next=s;
}
else
{ while(p->next!=NULL)
{ q=p;
p->next=head3->next;
head3->next=p;
p=q->next;
}
p->next=head3->next;
head3->next=p;
}
return head3;
}
/*总是将A,B两表的第一个指针比较,将较小者用尾插法插到C链表中,若相同则随便插入一个,同时将另一表的这个指针删除,当其中有一表为空时,则直接将另一表链到C中.*/
/*我写的没有包括删除相同结点,楼主改改吧*/
/**/

倚天照海花无数,流水高山心自知。
2006-10-14 16:01
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
这种程序还是自己想好,别人写了几十行估计也看不明白

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-10-14 16:14
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
收藏
得分:0 
以下是引用论坛在2006-10-14 15:47:12的发言:
点分十进制表示的IP地址131.107.2.89的二进制表示是________


///////////////////////////////////////


10000011011010110000001001011001

答案正确,怎么做的啊?

人生没有彩排,每天都是现场直播~~~
2006-10-14 16:20
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
IPv4地址是32位的,也就是4个字节,把131.107.2.89按照字节转换成2进制就行了

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-10-14 16:24
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

/*tlink.h*/

#include<stdio.h>
#define NULL 0
typedef int datatype;
typedef struct hlink{
datatype info;
struct hlink *next;
}node;
typedef node* nodelink;

/* 头插法建立带头节点的单链表*/
nodelink tcreathlink()
{ datatype x;
node *head,*s;
head=(node*)malloc(sizeof(node));
printf("please input the datas:");
scanf("%d",&x);
while(x)
{ s=(node*)malloc(sizeof(node));
s->info=x;
s->next=head->next;
head->next=s;
scanf("%d",&x);
}
return head;
}
nodelink tbuildhlink() /*带头节点的尾插法*/
{

datatype x;
node *head,*s;
node *p2;
head=(node *)malloc(sizeof(node));
p2=head;
printf("please input the datas:");
scanf("%d",&x);
while(x!=0)
{s=(node *)malloc(sizeof(node));
s->info=x;
p2->next=s;
p2=s;
scanf("%d",&x);
}
if(p2) p2->next=NULL;
return(head);
}

/*输出带头节点的单链表的值*/
void printtlink(nodelink head)
{ node *p;
p=head->next;
if(!p) printf("\nthe hlink is empty!");
else
{ printf("\nthe value of the hlink is:\n");
while(p)
{ printf("%5d--->",p->info);
p=p->next;
}
}
printf("\n");
}

/*程序*/

#include"tlink.h"

nodelink link_head12(nodelink head1,nodelink head2)/*让head1和head2的数排序*/
{ nodelink q,head3,s,p;
head3=(nodelink)malloc(sizeof(node));/*建head3表*/
head3->next=NULL;
q=NULL;
s=head1->next;
p=head2->next;
while(p&&s) /*排序*/
{ if(s->info<p->info)
{ q=s->next;
s->next=head3->next;
head3->next=s;
s=q;
}
else
{ q=p->next;
p->next=head3->next;
head3->next=p;
p=q;
}
}
if(s)
{
while(s->next!=NULL)
{ q=s;
s->next=head3->next;
head3->next=s;
s=q->next;
}
s->next=head3->next;
head3->next=s;
}
else
{ while(p->next!=NULL)
{ q=p;
p->next=head3->next;
head3->next=p;
p=q->next;
}
p->next=head3->next;
head3->next=p;
}
return head3;
}

main()
{ nodelink head1,head2,head3;
head1=tbuildhlink();
head2=tbuildhlink();
printtlink(head1);
printtlink(head2);
head3=link_head12(head1,head2);/*让head1和head2的数排序*/
printtlink(head3);
getch();
}



倚天照海花无数,流水高山心自知。
2006-10-14 19:06
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

/*写的函数有问题,改正一下*/
nodelink link_head12(nodelink head1,nodelink head2)/*让head1和head2的数排序*/
{
nodelink p,r,head3;
head3=(nodelink)malloc(sizeof(node));/*建head3表*/
head3->next=NULL;
r=head3;
while(head1->next&&head2->next) /*排序*/
{
if(head1->next->info<head2->next->info)
{
p=head1->next;
head1->next=p->next;
p->next=NULL;
r->next=p;
r=r->next;
}
else
{
p=head2->next;
head2->next=p->next;
p->next=NULL;
r->next=p;
r=r->next;
}
}
if(head1->next!=NULL)
{
r->next=head1->next;

}
else if(head2->next!=NULL)
{

r->next=head2->next;
}
else
{
r->next=NULL;
}
return head3;
}

main()
{
nodelink head1,head2,head3;
head1=tbuildhlink();
head2=tbuildhlink();
printtlink(head1);
printtlink(head2);
head3=link_head12(head1,head2);/*让head1和head2的数排序*/
printtlink(head3);
getch();
}


倚天照海花无数,流水高山心自知。
2006-10-14 20:58
快速回复:[求助]一道单链表的题
数据加载中...
 
   



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

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