当前位置:文档之家› 华科数据结构实验

华科数据结构实验

scanf("%d",&n);
}while(n <= 1);
for(i = 1;i<=n;i++)
{
getchar();
system("CLS");
printf("\n\t\t====================================\n");
printf("\t\t\t第%d个元素的=>\n\t\t\t\t结点的值:",i);
getch();
continue;
}
flag = 1;
switch(select)
{
case 1:n = HuffmanCreate(ht);break;
case 2:HuffmanCode(ht,hcd,n);break;
case 3:Huffmandecode(ht,hcd,n);break;
case 4:printf("\n\t\t\t谢谢使用!再见^ _ ^\n\n\t");
if(d.begin == 0) break;
}
hcd[i] = d;
}
printf("\t输出哈夫曼编码:\n");
for(i = 1;i <= n; i++)
{
printf("%c:",ht[i].data);
for(k = hcd[i].begin;k <= n; k++)
printf("%c",hcd[i].cd[k]);
ht[i].parent = ht[i].lchild = ht[i].rchild = 0;
for(i = n+1;i<= 2 * n - 1;i++)//产生新的Huffman节点
{
min1 = min2 = 32767;//min1和min2开始赋最大值
p1=p2=1;
for(k = 1;k<=i-1;k++)//在输入的节点中选取权值最小的值min1和min2
{
int min1,min2,p1,p2,i,k,n;
system("CLS");
printf("\t请输入要编码的数据的个数:");
scanf("%d",&n);
if(n <= 1)
do
{
printf("\n输入的数据元素个数太少!请重新输入!\n\n");
printf("\t请输入要编码的数据的个数:");
数据结构课程设计
哈夫曼编码和译码的实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define MAXNUM 100
/*哈夫曼结点的结构*/
typedef struct
{
char data;
int weight;
k = 1;
printf("\t输出哈夫曼译码:\n");
printf("\n");
while(k < m)
{
while(ht[f].lchild != 0)
{
if(ch[k] == '0')
f = ht[f].lchild;
if(ch[k] == '1')
f = ht[f].rchild;
k++;
exit(0);
}
}
return 0;
}
int parent;
int lchild;
int rchild;
}HuffNode;
/*哈夫曼编码存储结构*/
typedef struct
{
int cd[MAXNUM];//存放HUFFMAN编码的数组
int begin;
}HuffCode;
/*哈夫曼树的构造函数*/
int HuffmanCreate(HuffNode *ht)
printf("\t* *\n");
printf("\t* 1----------建立哈夫曼树*\n");
printf("\t* 2----------编码*\n");
printf("\t* 3----------译码*\n");
printf("\t* 4----------退出系统*\n");
printf("\t* *\n");
printf("\t请选择你所要实现的功能(请输入1~4数字):[ ]\b\b");
scanf("%d",&select);
if(select != 1 && select != 4 && flag == 0)
{
printf("\n\t~_~输入有误!请先选择建立哈夫曼树再选择其它功能!\n\n");
system("color 0A");
int n,select,flag = 0;
HuffNode ht[2*MAXNUM];
HuffCode hcd[MAXNUM];
while(1)
{
system("CLS");
fflush(stdin);
printf("\t\t\t哈夫曼编码译码系统");
printf("\n\t************************菜单***********************\n");
{
if(ht[k].parent == 0)
if(ht[k].weight < min1)//运用选择排序生成HUFFMAN树
{
min2 = min1;
p2 = p1;
min1 = ht[k].weight;
p1 = k;
}
else if(ht[k].weight < min2)
{
min2 =ht[k].weight;
{
d.begin = n + 1;
c = i;
f = ht[i].parent ;
while(f!=0)
{
if(ht[f].lchild == c)
d.cd[--d.begin] = '0';
else
d.cd[--d.begin] = '1';
c = f;
f = ht[i].parent ;
//printf("aaaaa=%d",d.begin);
scanf("%c",&ht[i].data);
printf("\t\t\t\t节点权重:");
scanf("%d",&ht[i].weight);
printf("\n\t\t====================================\n");
}
for(i = 1;i<= 2 * n - 1; i++)
printf("\t***************************************************\n");
printf("\t*电信班* U20 * *\n");
printf("\t***************************************************\n");
p2 = k;
}
}
ht[p1].parent = i;
ht[p2].parent = i;
ht[i].weight = min1 + min2;
ht[i].lchild = p1;
ht[i].rchild = p2;
}
printf("\n\n\n\t\t\t提示:哈夫曼树构建成功!\n\n\n\n");
printf("\t\n");
}
printf("\n提示:编码成功!\n");
printf("\t\n\n\n\n\n");
system("PAUSE");
}
/*哈夫曼译码函数*/
void Huffmandecode(HuffNode ht[],HuffCode hcd[], int n)
{
system("CLS");
}
printf("%c",ht[f].data);
f = 2 * n - 1;
}
printf("\t\n\n\n");
printf("提示:译码成功!\n\n");
system("PAUSE");
}
/*主函数*/
int main(int argc ,char *argv[])
{
system("CLS");
system("PAUSE");re Nhomakorabeaurn n;
}
/*哈夫曼编码函数*/
void HuffmanCode(HuffNode ht[],HuffCode hcd[],int n)
相关主题