求C数据结构高手解答!!! 20

1、赫夫曼树的建立任务:建立最优二叉树函数要求:可以建立函数输入二叉树,并输出其赫夫曼树在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、输入输出、源程序、测... 1、 赫夫曼树的建立
  任务 :建立最优二叉树函数
  要求:可以建立函数输入二叉树,并输出其赫夫曼树
在上交资料中请写明:存储结构、 基本算法(可以使用程序流程图) 、输入输出、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
求大侠给解答一下吧。。。。 我只有20分了。。。。努力争取搞到点分数
拜谢帮忙。。。。。。急用!!
展开
 我来答
确杉啦K
2011-06-07 · TA获得超过295个赞
知道小有建树答主
回答量:614
采纳率:100%
帮助的人:391万
展开全部

请仔细对比!!!,你的程序有很多不对的地方。看我是哪些地方和你不一样的!!!

此程序我已经调试并测试通过了。
如果你要运行这个程序,注意把汉字全部去掉!!!
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>

typedef struct node
{
int data;
node *next;
}node;//你结构体定义错误!!!!

struct node *creat(int num)
{
struct node *p,*q,*head;
int i;
p = (struct node *)malloc(sizeof(struct node));
head = p;
q = p;
for(i=0;i<num-1;i++)
{
p = (struct node *)malloc(sizeof(struct node));
q->next = p;
q = p;
}
p->next = NULL;
return head;
}

void input(struct node *head)
{
struct node *p;
p = head;
while(p->next != NULL)
{
scanf("%d",&(p->data));
p = p->next;
}
scanf("%d",&(p->data));
}

void output(struct node *head)
{
struct node *q;
q = head;
while(q->next != NULL)
{
printf("%d ",q->data);
q = q->next;
}
printf("%d\n",q->data);
}

void main()
{
struct node *A,*B,*C;
struct node *head=NULL;//先给一个初始值,头结点只赋值一次。用空判断
int a,b,i;

printf("请输入A链表的元素个数:\n");
scanf("%d",&a);
A = creat(a);
printf("请按从小到大的顺序输入A链表元素:\n");
input(A);
output(A);
printf("请输入B链表的元素个数:\n");
scanf("%d",&b);
B = creat(b);
printf("请按从小到大的顺序输入B链表元素:\n");
input(B);
output(B);

for(;;)//退出循环用空来判断
{
if(A!= NULL && B!= NULL)
{

if(A->data < B->data)
{
if(!head)//判断头结点指向哪个,只执行一次!! 下同
{
head=A;
C=head;
}
else
{
C->next=A;//此处应该这样;
C=C->next;
}

A = A->next;
}
else if(A->data == B->data)
{
if(!head)
{
head=A;
C=head;
}

else
{
C->next=A;
C=C->next;
}
A = A->next;
B = B->next;
}
else if(A->data > B->data)
{
if(!head)
{
head=B;
C=head;
}

else
{
C->next=B;
C=C->next;
}

B = B->next;
}
}
else
break;//跳出循环

}
//以下代码从循环拿出来,因为下面代码只执行一次就够了,没必要循环
if(A == NULL && B == NULL)
{
}

else if(A != NULL && B == NULL)
{
C ->next= A;//只需要这样就行了,。。。
}

else if(A == NULL && B != NULL)
{
C ->next= B;
}

printf("AB链表合并后的链表C中各元素依次为:\n");
output(head);//必须先输出再释放,不然你节点都释放了,怎么输出啊!!!
free(head);//此时不能free(A),free(B),因为此时A,B,节点的次序已经完全打乱了,节点已经完全链接到head了,只需要释放head就行了。

}
如有不对,欢迎赐教!!!
风扬信息科技
2024-10-17 广告
广州市风扬信息科技有限公司,专注于技术创新和解决方案提供,我们致力于将人工智能的无限潜力转化为实际的解决方案,为各行各业的客户提供智能化的产品和服务。使命与愿景我们的使命是通过前沿的人工智能技术,推动社会进步和商业发展。我们的愿景是成为全球... 点击进入详情页
本回答由 风扬信息科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式