- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构实验报告
实验目的
1、提高用C语言编写算法、进行程序设计的能力;
2、掌握各种查找和排序算法及其实现技术,了解它们在时间和空间复杂性方面的性能,熟悉各种查找和排序方法的适用性;
3、熟悉哈夫曼树的构造与编码方法,体会哈夫曼编码的优点,了解其在通信工程中的应用。
实验内容和要求
1、试设计一算法,从包括n个元素的数组中,求最大和最小元素,并使得当n个元素为有序排列时,元素之间的比较次数仅为n-1次。
2、在给出的Huffman编码源程序基础上,要求画出Huffman树,求出与等长编码相比时的压缩比。
要求根据实验内容编写算法,并用 C 语言进行程序设计;然后将所编程序在计算机上调试通过,并全面测试;最后整理完成实验报告,包括:姓名、学号、实验日期等。
程序清单
实验内容1:
解法一:
#include<stdio.h>
#include<malloc.h>
void main()
{
printf("请输入数组长度n:\n");
int n,min,max,x=1,*p; //x为元素间的比较次数,赋初值1是因为下面if语句中元素比较了一次
scanf("%d",&n); //给n输入具体值
printf("请输入%d",n);
p=(int*)malloc(n*sizeof(int)); //开辟一段动态空间,p指向其首地址
printf("个数组元素:\n");
for(int i=0;i<n;i++) //从键盘输入数据初始化数组
scanf("%d",&p[i]);
if(p[0]<p[1]) //p[0]<p[1],则有可能是升序排列
{
min=p[0]; //给最大最小值赋初值
max=p[1];
for(i=2;i<n;i++)
{
x+=2;
if(max<=p[i]) //如果是升序排列,则if条件满足,else if不会再执行
{ //则for循环执行n-2次,加上上面的一次,共n-1次,满足要求
x--; //如果if条件满足,则else if不会再执行,减去多加的一次x
max=p[i];
}
else if(min>p[i])
min=p[i];
else
continue; //结束本次循环
}
}
else //p[0]<p[1],则有可能是降序排列
{
max=p[0]; //给最大最小值赋初值
min=p[1];
for(i=2;i<n;i++)
{
x+=2;
if(min>=p[i]) //如果是降序排列,则if条件满足,else if不会再执行
{ //则for循环执行n-2次,加上上面的一次,共n-1次,满足要求
x--; //如果if条件满足,则else if不会再执行,减去多加的一次x
min=p[i];
}
else if(max<p[i])
max=p[i];
else
continue; //结束本次循环
}
}
printf("最大值为:%d\n",max); //输出数组元素最大值
printf("最小值为:%d\n",min); //输出数组元素最小值
printf("元素之间的比较次数为:%d\n",x); //输出数组元素之间的比较次数
free(p); //释放p指向的空间
p=NULL; //释放堆内存后,p为野指针,为避免p指向不明空间,让p成为空指针
}
解法二:
#include<stdio.h>
#include<malloc.h>
int wzc(int*,int,int*,int*); //声明函数wzc
void main()
{
int n,x,max,min,*p; //n为数组元素个数,max、min分别是数组元素的最大值和最小值,p指向数组首地址
printf("请输入数组长度n:\n");
scanf("%d",&n);
文档评论(0)