计算机软件技术基础实验报告_第1页
计算机软件技术基础实验报告_第2页
计算机软件技术基础实验报告_第3页
计算机软件技术基础实验报告_第4页
计算机软件技术基础实验报告_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.计算机软件基础实验报告。学号实验的目的1 .掌握c语言程序的设计方法,学习机器调试。2 .精通霍夫曼编码源程序,构建霍夫曼树。实验内容1 .根据包含n个元素的阵列求最大和最小元素,且设计算法以使得在n个元素是规则阵列的情况下,元素之间的比较次数为n-1次。2 .根据所提供的霍夫曼编码源程序,描绘哈夫曼树,并求出与等长编码进行比较时的压缩率。实验要求1 .根据实验内容制作算法,用c语言进行编程。2 .在计算机上通过调试并全面测试编写的程序。实验结果1 .以包含8个要素的一维排列 1,2,3,5,7,8,9,12 为例,设计程序如下#includeint max阵列(int y,int y )最小阵列(int y,int y )PK PS (PS )举止int i=0;intarray 8= 1,2,3,5,7,8,9,12 ;printf;PS举止扫描( % d ,arrayi );I; while(i 8)int maxTemp=array0;int minTemp=array0;int maxIndex=0;int minIndex=0;for(i=1; i8; PS )举止maxTemp=maxArray(arrayi,maxTemp )minTemp=minArray(arrayi,minTemp )以下for(i=0; i8; PS )举止if (最大值=array I )举止maxIndex=i;以下if (minTemp=arrayi )举止minIndex=i;以下以下printf;返回0;以下执行结果如下:2 .霍夫曼编码源程序#include#include#include#include#includetypedef struct未签名的输入权重; /节点权重未指定父件、液晶、液晶; /节点的父指针,左右的孩子指针HTNode、*霍夫曼树; /动态分配数组存储哈夫曼树typedefchar*霍夫曼代码/动态分配数组,存储霍夫曼编码表voidcreatehuffmantree (哈夫曼树,unsigned int*,int ); /生成霍夫曼树对void霍夫曼编码(霍夫曼树、霍夫曼代码、int) /霍夫曼树进行编码voidprinthuffmancode (霍夫曼编码,unsigned int*,int ); 显示/霍夫曼符号在voidselect (哈夫曼树、int、int、int) /数组中查找权重值最小的两个节点void main ()哈夫曼树ht; /哈夫曼树HT霍夫曼编码HC; /霍夫曼编码表HCint n,I; /n是霍夫曼树的叶节点数unsigned int *w; /w存储叶节点的权重char j=y;printf (演示结构霍夫曼树.n );printf (输入需要编码的字符数。 n例如:8n );在printf (之后,输入每个字符的出现次数/权重值。n );printf (例如:578142311n );printf (自动生成霍夫曼树并显示霍夫曼符号.n );printf (5- 0110n29-10n7-1110n8-1111n14-110n );printf ( 23-00n3-0111n11-010n );while(j!=Nj!=n )printf (字符数: );扫描( % d ,n ); /输入字符数if(n=1) printf (此数不合理! n ); continue; 以下w=(unsigned int * ) malloc (n * sizeof (unsigned int ) ); /打开空间存储权值请输入printf (各字符的出现次数/权重:n )for(i=0; iweight=*w;p-parent=0;p-lchild=0;p-rchild=0;以下for (; i=m; I,p )p-weight=0;p-parent=0;p-lchild=0;p-rchild=0;以下for(i=n 1; i=m; i) /哈夫曼树选择(ht,i-1,s1,s2);从HT1.i-1中选择父节点为0且权重最小的两个节点,其编号分别为s1和s2HTs1.parent=i; HTs2.parent=i; 修改/s1和s2节点的父指针parentHTi.lchild=s1; PS;PS=S2; 修改/I节点左右的孩子指针weight=ht S1 .weight ht S2 .weight; /修正权值以下以下void霍夫曼编码(霍夫曼树ht、霍夫曼编码hc、int n )对具有个叶节点的哈夫曼树HT进行编码,将编码后的代码存储在HC中./方法是从叶到根反向求出每个叶节点的霍夫曼码int i、c、f、start;char *cd;hc=(霍夫曼代码) malloc(n1)*sizeof(char* ) ); 分配/n个编码的开头指针矢量cd=(char *)malloc(n*sizeof(char ) ); /打开要求编码的工作区cdn-1=0; /编码结束符for(i=1; i=n; i) /各求一个霍夫曼码start=n-1; /编码结束位置for(c=i,f=HTi.parent; f!=0; c=f,f=HTf.parent) /从叶向根反向求出代码PS (PS ).PS=c ) CD - start =0; /如果是左边的孩子的话,就设为0else CD -开始=1; /如果是右边的孩子的话1HC I =(char * ) malloc (n-start ) * sizeof (char ) );/为第I个代码分配一个空格strcpy (PS,cdstart ); 将代码从/cd复制到HC以下free(cd) /释放工作区以下voidprinthuffmancode (霍夫曼代码HC,unsigned int *w,int n )表示具有个叶节点的哈夫曼树的编码表PS;printf (霍夫曼代码is :n );for(i=1; i=n; PS )打印(=- -,wi-1 );puts (PS );以下printf(n );以下voidselect (霍夫曼树ht,int,ints1,ints2 )在/ht1.t中,选择父节点不为0且权重最小的两个节点,其编号分别为s1和s2int i、m、n;m=n=10000;for(i=1; i=t; PS ) if (ht I .parent=0(ht I .weights2)/S1使用较小的编号i=s1; s1=s2; s2=i; 以下以下驾驶结果是:输入数据后的运行结果:实验须知要熟练编写程序,没有一定的想象力和多的机会,是完成不了的。首先,仔细看程序,制定程序。 完全写正确严密的程序绝非易事。 大量阅读程序有助于把握编程的一般语法和基本要领。 随着阅读量的增加,我们的大脑里知识的积累越来越丰富,对编程的感觉也越来越敏感。 渐渐地,在基本掌握了编程方法之后,我们大脑的“数据库”变得越来越大,写各种各样的程序变得熟练,像以前那样看编程的话就不会出雾了。 在某种程度上掌握了程序之后,我们可以试着纠正别人程序中的一些缺陷。 这不仅

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论