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语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构; 展开
任务:设计建立最优二叉树函数;
要求:可以建立函数输入二叉树,并输出其哈夫曼树。
实验二:运动会分数统计
任务:参加运动会有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语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构; 展开
2个回答
展开全部
运动会分数统计
一、 任务
参加运动会有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
一、 任务
参加运动会有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
展开全部
#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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询