资源简介

数据结构哈夫曼编码带译码功能,C语言版程序加完成版实验报告,完全可运,供大家参考。

资源截图

代码片段和文件信息

#include 
#include 

#define MaxValue 10000
//设定的权值最大值
#define MaxN 27
//设定的最大结点个数
#define Maxsc 500
//设定存放字符串编码数组的大小

#include “Haffman.h“ //包含头文件“Haffman.h“

void main(void)
{
int i j n = 27 k l; //定义n为结点个数
int weight[MaxN] =
{18664132232103211547571532205763151485180238181161}; //存放各个结点的权值
char str[Maxs]; //存放字符串
char letter[MaxN] = 
{‘ ‘‘a‘‘b‘‘c‘‘d‘‘e‘‘f‘‘g‘‘h‘‘i‘‘j‘‘k‘‘l‘‘m‘‘n‘‘o‘‘p‘‘q‘‘r‘‘s‘‘t‘‘u‘‘v‘‘w‘‘x‘‘y‘‘z‘};
//结点对应字母
char hcode[MaxN][MaxBit]; 
//存放每个结点的对应编码
int count[MaxN] = {0};
//存放每个结点的对应编码位数
char strcode[Maxsc];
//存放字符串的编码结果
/*
//输入结点个数n
printf(“请输入结点个数(不能超过%d):“ MaxN);
scanf(“%d“ &n);
getchar(‘\n‘);

//判断n的值最大不能超过MaxN
if(n > MaxN)
{
printf(“\n给出的n越界修改MaxN的值!\n“);
exit(0);
}
*/
//输入字符串
printf(“请输入要编码的字符串(最大长度为%d): “ Maxs);
scanf(“%c“ &str[0]);
if(str[0] == ‘\n‘)
{
printf(“没有输入字符串!\n“);
exit(0);
}
i = 0;
while(str[i] != ‘\n‘)
{
i++;
scanf(“%c“ &str[i]);
if(i >= Maxs)
{
printf(“输入的字符串过大!\n“);
exit(0);
}
}
str[i] = ‘\0‘;
/*
//输入各个结点的的字母和对应的权值
printf(“\n请输入各个结点对应的字母:\n“);
for(i = 0; i < n; i++)
{
printf(“letter[%d] = “ i + 1);
scanf(“ %c“ &letter[i]);
}
printf(“\n请输入各个结点的权值:\n“);
for(i = 0; i < n; i++)
{
printf(“weight[%d] = “ i + 1);
scanf(“%d“ &weight[i]);
}
*/
HaffNode *myHaffTree = (HaffNode *)malloc(sizeof(HaffNode) * (2 * n + 1));
Code *myHaffCode = (Code *)malloc(sizeof(Code) * n);

Haffman(weight n myHaffTree);
HaffmanCode(myHaffTree n myHaffCode);

//输出每个叶结点的哈夫曼编码
printf(“\n对26个小写英文字母和空格进行哈夫曼编码结果如下:\n“);
for(i = 0; i < n; i++)
{
printf(“Letter = %c   Weight = %d   Code = “ letter[i] myHaffCode[i].weight);
for(j = myHaffCode[i].start; j < n; j++)
{
printf(“%d“ myHaffCode[i].bit[j]);
count[i]++;
}
putchar(‘\n‘);
}
putchar(‘\n‘);

//存放每个结点对应的编码
for(i = 0; i < n; i++)
for(k = 0; k < count[i]; k++)
{
for(j = myHaffCode[i].start l = 0; j < n; j++ l++)
hcode[i][l] = myHaffCode[i].bit[j] + 48;
hcode[i][l] = ‘\0‘;
}

//存放字符串哈夫曼编码结果
k = 0;
l = 0;
while(str[k] != ‘\0‘)
{
for(i = 0; i < n; i++)
{
if(str[k] == letter[i])
for(j = 0; j < count[i]; j++)
strcode[l++] = hcode[i][j];
}
k++;
}
strcode[l++] = ‘\0‘;

//读取字符串并且显示字符串哈夫曼编码结果
printf(“对您输入的字符串“);
i = 0;
while(str[i] != ‘\0‘)
{
printf(“%c“ str[i]);
i++;
}
printf(“进行哈夫曼编码的结果为:\n“);
for(i = 0; i < strlen(strcode); i++)
printf(“%c“ strcode[i]);
putchar(‘\n‘);

//调用译码函数进行译码
HaffmanCoding(strcode hcode letter n str);

//输出译码结果
printf(“\n进行哈夫曼译码的结果为:“);
for(i = 0; i < strlen(strcode); i++)
printf(“%c“ strcode[i]);
printf(“\n\n“);
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        530  2010-01-02 19:04  哈弗曼编码\Huffman编码\Huffman编码.dsw

     文件      33792  2010-01-02 19:55  哈弗曼编码\Huffman编码\Huffman编码.ncb

     文件        326  2010-01-02 18:18  哈弗曼编码\Huffman编码\BFChang.h

     文件       1561  2010-01-02 19:55  哈弗曼编码\Huffman编码\Huffman编码.plg

     文件       3178  2010-01-02 19:06  哈弗曼编码\Huffman编码\Haffman.h

     文件       4464  2010-01-02 19:06  哈弗曼编码\Huffman编码\Huffman编码.dsp

     文件       3205  2010-01-02 19:55  哈弗曼编码\Huffman编码\Huffman.cpp

     文件      48640  2010-01-02 19:55  哈弗曼编码\Huffman编码\Huffman编码.opt

     文件      33792  2010-01-02 19:55  哈弗曼编码\Huffman编码\Debug\vc60.idb

     文件      53248  2010-01-02 19:55  哈弗曼编码\Huffman编码\Debug\vc60.pdb

     文件     228312  2010-01-02 19:06  哈弗曼编码\Huffman编码\Debug\Huffman编码.pch

     文件     193528  2010-01-02 19:55  哈弗曼编码\Huffman编码\Debug\Huffman编码.ilk

     文件     188505  2010-01-02 19:55  哈弗曼编码\Huffman编码\Debug\Huffman编码.exe

     文件     451584  2010-01-02 19:55  哈弗曼编码\Huffman编码\Debug\Huffman编码.pdb

     文件      12028  2010-01-02 19:55  哈弗曼编码\Huffman编码\Debug\Huffman.obj

     文件     233984  2010-06-27 21:14  哈弗曼编码\数据结构设计性实验报告译码.doc

     目录          0  2010-06-27 21:12  哈弗曼编码\Huffman编码\Debug

     目录          0  2010-06-27 21:12  哈弗曼编码\Huffman编码

     目录          0  2010-06-27 21:12  哈弗曼编码

----------- ---------  ---------- -----  ----

              1490677                    19


评论

共有 条评论