计算机软件技术基础实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机软件基础实验报告

姓名学号实验目的

1. 掌握C语言程序设计方法,并学会上机调试。

2. 熟悉Huffman编码源程序,并构造Huffman树。

实验内容

1.试设计一算法,从包括n个元素的数组中,求最大和最小元素,并使得当n

个元素为有序排列时,元素之间的比较次数仅为n-1次。

2.在给出的Huffman编码源程序基础上,要求画出Huffman树,求出与等长编

码相比时的压缩比。

实验要求

1.根据实验内容编写算法,并用 C 语言进行程序设计。

2. 将所编程序在计算机上调试通过,并全面测试。

实验结果

1.以一个含有8个元素的一维数组{1,2,3,5,7,8,9,12}为例,设计程序如下:

#include

int maxArray(int x ,int y);

int minArray(int x ,int y);

int main(void)

{

int i = 0 ;

int array[8]={1,2,3,5,7,8,9,12} ;

printf;

do

{

scanf("%d",&array[i]);

i++;

} while(i < 8);

int maxTemp = array[0];

int minTemp = array[0];

int maxIndex = 0;

int minIndex = 0;

for(i=1;i<8;i++)

{

maxTemp = maxArray(array[i] , maxTemp);

minTemp = minArray(array[i] , minTemp);

}

for(i=0;i<8;i++)

{

if (maxTemp == array[i])

{

maxIndex = i;

}

if (minTemp == array[i])

{

minIndex = i;

}

}

printf;

return 0;

}

运行结果如下:

2.Huffman编码源程序

#include

#include

#include

#include

#include

typedef struct

{unsigned int weight; //结点权值

unsigned int parent,lchild,rchild; //结点的父指针,左右孩子指针

}HTNode,*HuffmanTree; //动态分配数组存储哈夫曼树

typedef char **HuffmanCode; //动态分配数组存储哈夫曼编码表

void CreateHuffmanTree(HuffmanTree &,unsigned int*,int ); //生成哈夫曼树

void HuffmanCoding(HuffmanTree,HuffmanCode &,int ); //对哈夫曼树进行编码

void PrintHuffmanCode(HuffmanCode,unsigned int*,int); //显示哈夫曼编码void Select(HuffmanTree,int,int&,int&); //在数组中寻找权值最小的两个结点void main()

{HuffmanTree HT; //哈夫曼树HT

HuffmanCode HC; //哈夫曼编码表HC

int n,i; //n是哈夫曼树叶子结点数

unsigned int *w; //w存放叶子结点权值

char j='y';

printf("演示构造哈夫曼树.\n");

printf("输入需要进行编码的字符数目.\n例如:8\n");

printf("然后输入每个字符出现的次数/权值.\n");

printf("例如:5 29 7 8 14 23 3 11\n");

printf("自动构造一棵哈夫曼树并显示哈夫曼编码.\n");

printf(" 5---0110\n 29---10\n 7---1110\n 8---1111\n 14---110\n");

printf(" 23---00\n 3---0111\n 11---010\n");

while(j!='N'&&j!='n')

{printf("请输入字符数目:");

scanf("%d",&n); //输入字符数目

if(n<=1) {printf("该数不合理!\n");continue;}

w=(unsigned int*)malloc(n*sizeof(unsigned int)); //开辟空间存放权值

printf("请输入各字符出现的次数/权值:\n");

for(i=0;i

CreateHuffmanTree(HT,w,n); //生成哈夫曼树

HuffmanCoding(HT,HC,n); //进行哈夫曼编码

PrintHuffmanCode(HC,w,n); //显示哈夫曼编码

printf("哈夫曼树构造完毕,还要继续吗?(Y/N)");

scanf(" %c",&j);

}

}

void CreateHuffmanTree(HuffmanTree &HT,unsigned int *w,int n)

{//w存放n个结点的权值,将构造一棵哈夫曼树HT

int i,m;

int s1,s2;

HuffmanTree p;

if(n<=1) return;

m=2*n-1; //n个叶子结点的哈夫曼树,有2*n-1个结点

HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); //开辟2*n各结点空间

for(p=HT+1,i=1;i<=n;++i,++p,++w) //进行初始化

{p->weight=*w;

p->parent=0;

p->lchild=0;

p->rchild=0;

}

for(;i<=m;++i,++p)

相关文档
最新文档