- 19
- 0
- 约6.97千字
- 约 19页
- 2021-04-15 发布于天津
- 举报
专业
专业.专注
数据结构实验报告三
哈夫曼文件压缩
实验题目:哈夫曼文件压缩
实验目标:
,并计算压缩比输入一个有10k单词的英文文档。
,并计算压缩比
栈和哈夫曼树。
定义栈()
typedef struct{
char *elem;
int stacksize;
int top;}STACK;
定义哈夫曼树 ()
typedef struct{
int weight;
int left,right;
in t pare nt;}HTNode;
需要的操作有:
初始化栈 (Initstack )
void In itstack(STACK *s){
s-elem=(char *)malloc(sizeof(i nt)*1OOO);
s-stacksize=1000;
s-top=-1;
压栈(push )
void push(STACK *s,int e){
s_elem[++s_top]=e;
}
弹栈(pop )
void pop(STACK *s,i nt *e){
if(s-top!=-1)
*e=s_elem[s_top__];
}
构造哈夫曼树 (Inithuffman )
void Inithuffman(int wset[n],int k,HuffTree HT[]){ // 构造哈夫曼树
int i,m;
int s1,s2;
m=k*2-1;
for(i=0;im;i++){ // 初始化 HT 数组
HT[i]=(HuffTree)malloc(sizeof(HTNode));
HT[i]-weight=(ik?wset[i]:O);
HT[i]-pare nt=-1;
HT[i]-left=HT[i]-right=-1;
}
for(i=k;im;i++){ //主循环,完成n-1次合并
select(HT,k,i, s1, s2);// 在 HT[1...i-1]中选择 pare nt 为 0
select(HT,k,i, s1, s2);
且weight为最小的两个结点,其下标分别为s1和s2
HT[i]-left=s1;
HT[i]-right=s2;
HT[i]-weight=HT[s1]-weight+HT[s2]-weight;
HT[s1]-pare nt=HT[s2]-pare nt=i;
}
}
其中用到另一个基本操作:找到哈夫曼树中最小和次小的结点 (select)
找到哈夫曼树中最小和次小的结点 (select)
void select(HuffTree HT[255],int a,int i,int *p,int *q){
int j=0,k=0,*HT1,temp;
HT1=(i nt *)malloc(sizeof(i nt)*(i-1)); // 存放权值
for( j=0;ji;j++){
if(HT[ j]-parent==-1){
HT1[k]=HT[j]-weight; //把没有pare nt的结点的权值放在 HT1
中
k++;
}
//
printf(%4d%4d%4d%4d%4d\n,HT[j]-parent,HT[ j]-left,HT[ j]-right,HT[ j]-wei
ght,HT1[k-1]);
j=0;
while( j2) { //找到权值最小和第二小的结点
for(k=j;k(i-(i-a)*2);k++){
if(HT1[j]HT1[k]){
temp=HT1[k];
HT1[k]=HT1[j];
HT1[j]=temp;
}
}
j++;
}
k=0;
for( j=0;ji;){
if(HT[ j]-parent==-1)
if(HT[ j]-weight==HT1[0]k1){ // 将最小的权值赋到 *p 中
*p=j;
k++;
}
j++;
}
for( j=0;ji;){
if(HT[ j]-parent==-1)
if(j!=*P)
//将第二小的权值赋到
//将第二小的权值赋到 *q
中
*q=j;
k++;
}
j++;
//
prin tf(%4d%4d%4d%4d\n,HT[i]-pare nt,HT[i]-left,HT[i]-right,HT[i]-weight);
}
}
根据哈夫曼树得到各字符对应的哈夫曼编码 (Huffman )
void Huffman(HuffTree HT[2*n-1],int k,char str[][20]){
int i,j,e,t1=0,t2=0;
char c;
STACK st;
for(i=0;ik;i++){
if(HT[i]-right==-1 HT[i]-left==-1){ // 找一个叶子结点
In itstack(st);
HT[i]-right=H
您可能关注的文档
- 并联六自由度运动平台.docx
- 国际会展中心监控系统方案.docx
- 国际结算复习重点.docx
- 国际物流管理课程设计报告书.docx
- 国家助学贷款学生答题考试-试卷.docx
- 国贸实务知识点提纲.docx
- 国内电子图书出版产业发展综述.docx
- 国网营销服务专业计算题.docx
- 国有土地房屋征收规范性文本.docx
- 哈夫曼树课程设计报告.docx
- 2025年新能源汽车铝合金型材表面处理报告.docx
- 2025_2026学年新教材高中历史第四单元资本主义制度的确立9资产阶级革命与资本主义制度的确立课时作业含解析新人教版必修中外历史纲要下.doc
- 2026版高考历史一轮训练课后限时集训10近代西方民主政治的确立与发展含解析人民版.doc
- 2025年光伏支架轻量化研发趋势与材料创新报告.docx
- 2025_2026学年新教材高中英语UNIT3SPORTSANDFITNESS预习新知早知道学案含解析新人教版必修第一册.doc
- 初中道德与法治八年级上册《爱我中华》单元教学设计(1).docx
- Unit9IlikemusicthatIcandancetoSectionA(3a3c)(教学课件)人教版(0)九年级英语全册().pptx
- 四年级下册《我的“自画像”》习作指导课教学设计——基于例文支架的精准表达训练.docx
- 星火燎原:新中国“两弹一星”伟业的奠基与精神传承.docx
- 中考英语一轮复习:解锁单项选择的逻辑与策略(第一讲).docx
原创力文档

文档评论(0)