C编程哈夫曼树的建立和运动会分数统计 求高手啊 发到563437701@qq.com 40

实验一:哈夫曼树的建立任务:设计建立最优二叉树函数;要求:可以建立函数输入二叉树,并输出其哈夫曼树。实验二:运动会分数统计任务:参加运动会有n个学校,学校编号为1……n。... 实验一:哈夫曼树的建立
任务:设计建立最优二叉树函数;
要求:可以建立函数输入二叉树,并输出其哈夫曼树。
实验二:运动会分数统计
任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)
(2)功能要求:
可以输入各个项目的前三名或前五名的成绩;
能统计各学校总分;
可以按学校编号、学校总分、男女团体总分排序输出;
可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三
或前五名的学校。
(3)规定:
〈1〉 输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称);
〈2〉 输出形式:有中文提示,各学校分数为整形;
〈3〉 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能的要求;
〈4〉 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
展开
 我来答
KS王默哀
2012-03-16 · TA获得超过113个赞
知道答主
回答量:64
采纳率:0%
帮助的人:8.1万
展开全部
运动会分数统计

一、 任务
参加运动会有n个学校,学校编号为1……n。比赛分成m个项目,项目编号为1……m。项目取前五名积分;积分分别为:7、5、3、2、1;(m<=20,n<=20)
功能要求:
1).可以输入各个项目的前五名的学校编号;
2).能统计各学校总分;
3).可以按学校编号输出、学校总分排序输出,输出内容包括学校编号,总分和名次。
规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称);各学校分数为整形。
界面要求:有合理的提示,根据提示,可以完成相关的功能要求。

二、 存储分析
由于学校个数、项目个数是确定的,并不会随时需要增加或减少,所以采用顺序存储结构较好,并且能随机存取。即采用数组作为存储结构。
学校个数为数组长度,每个数组元素必须包含如下信息:学校编号,项目1成绩,项目2成绩,……,项目m成绩,总分,名次。(方便完成功能1,2,4和3部分)
由于功能3要求能按学校总分排序输出,宜另外按总分顺序存储学校的总分信息。
综合前面分析,需要两个数组,数组1按学校编号顺序存放学校编号,项目1成绩,项目2成绩,……,项目m成绩,总分,名次。数组2按学校总分存放学校编号,总分,名次。

三、 程序结构安排
1、 输入各个项目的前五名的学校编号,填写数组1;
2、 计算数组1的学校总分;
3、 对数组1按总分排序,结果存放在数组2。填写数组2的名次。
4、 将数组2的名次信息填回数组1。

四、 输出
1、 按学校编号输出:即输出数组1相关信息;
2、 按学校总分排序:即输出数组2相关信息;
3、 按学校编号查询学校各个项目的情况:即输出数组1相应学校信息。

五、 举例
有10个学校,5个项目。
数组1:
数组下标 学校编号 项目1 项目2 项目3 项目4 项目5 总分 名次
0 1 7 3 2 12 3
1 2 1 7 2 10 4
2 3 5 3 8 6
3 4 5 1 7 3 16 1
4 5 1 1 7
5 6 2 7 9 5
6 7 5 2 5 1 13 2
7 8 3 2 5 10 4
8 9 1 1 7
9 10 3 7 10 4

数组2:
数组下标 学校编号 总分 名次
0 4 16 1
1 7 13 2
2 1 12 3
3 2 10 4
4 8 10 4
5 10 10 4
6 6 9 5
7 3 8 6
8 5 1 7
9 9 1 7
步行者way
2012-03-16 · TA获得超过218个赞
知道小有建树答主
回答量:199
采纳率:100%
帮助的人:172万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct node{
int data;
struct node *lchild,*rchild,*next;
}Hufnode;

/*创建不带头结点的单链表*/
Hufnode *creat(Hufnode *head) /*尾插法创建单链表*/
{
int x;
Hufnode *p,*s;
head=(Hufnode *)malloc(sizeof(Hufnode)); /*此句不可以删除*/
head->next=NULL;
head->lchild=NULL;
head->rchild=NULL;

s=head;
scanf("%d",&x);
while(x!=0)
{
p=(Hufnode *)malloc(sizeof(Hufnode)); /*此句不可以删除*/
p->data=x;
p->next=NULL;
p->lchild=NULL;
p->rchild=NULL;
s->next=p;
s=p;
scanf("%d",&x);
}
head=head->next;
return head;
}

int IsEmpty(Hufnode *head) /*判断链表是否为空*/
{
Hufnode *p=NULL;
p=head->next;
if(!p)
return 1;
return 0;
}

void Display(Hufnode *head) /*打印链表*/
{
Hufnode *p;
p=head;
if(IsEmpty(head))
{
printf("The node is empty!");
}
while(p)
{
printf("%-5d",p->data);
p=p->next;
}
}
Hufnode *Insert(Hufnode *head,Hufnode *s)
{
Hufnode *p,*pre;
if(head==NULL)
head=s;
else
{
pre=NULL;
p=head;
while(p && p->data <s->data) /*从当前的head开始,如果不为空,找到指定位置插入*/
{
pre=p;
pre=p->next;
}
s->next=p; /*如果s是最后一个结点,那么p=NULL,s->next=NULL*/
if(pre==NULL)
head=s;
else
pre->next=s;
}
return head;
}

/*创建Huffman树*/
Hufnode *CreatHuffman(Hufnode *head)
{
Hufnode *s,*rl,*rr;
while(head && head->next)
{
rl=head;
rr=head->next;
head=rr->next; /*head为第三个结点*/
s=(Hufnode *)malloc(sizeof(Hufnode));/*生成结点*/
s->next=NULL;
s->data=rl->data+rr->data;
s->lchild=rl; /*左孩子*/
s->rchild=rr; /*右孩子*/
rl->next=rr->next=NULL;
head=Insert(head,s);
}
return head;
}

/*二叉树的前序遍历,递归方式*/
void Preorder(Hufnode *t)
{
if(t)
{
printf("%3d",t->data);
Preorder(t->lchild);
Preorder(t->rchild);
}
}

main()
{
Hufnode *head;
printf("\n请输入结点创建Huffman树(以0结束):");
head=creat(head);

Display(head);
head=CreatHuffman(head);
printf("\n\n前序遍历Huffman树的结果为:");
Preorder(head);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式