资源简介
实验内容要求:
1、对某篇500单词左右的英文文本文件中字母、标点符号的使用频率进行统计,然后对出现的字母和标点符号进行哈夫曼编码。
2、要求英文文本采用文件方式读取,输出结果中要分别列出各字符(包括字母和标点符号)的出现频率和哈夫曼编码。
代码片段和文件信息
#include
#include
#include
#include
#define M 10000 //定义字符串最大长度
#define N 128 //定义叶子节点个数
typedef struct node //定义赫夫曼树节点结构体
{
int weight;
struct node *LChild*RChild*Parent; //分别指向该节点的左孩子右孩子和双亲节点
struct node *next; //指向建立的赫夫曼树的下一个节点
} HFMNode*HFMTree;
typedef struct //定义赫夫曼编码的结构体
{
char ch; //存储对应的字符
char code[N+1]; //存储对应字符的编码
int start; //存储编码的起始位置
} CodeNode;
int n; //存储真正叶子节点个数
void clearscreen()
{
system(“cls“);
}
void Open(char s[]) //打开存放字符或编码的文件将其存入字符串数组中
{
FILE *fp;
char name[10];
int i=0;
printf(“请输入要打开的文件名(加后缀名)“);
gets(name);
printf(“%s“name); //要打开的文件名
fp=fopen(“name““rt“);
if(fp==NULL)
{
printf(“打开失败\n“); //若打开失败则直接退出
getch();
exit(0);
}
printf(“打开成功\n“);
s[i++]=fgetc(fp);
while(s[i-1]!=EOF)
s[i++]=fgetc(fp);
s[i]=‘\0‘; //存取字符串结束
fclose(fp);
}
void Save(char s[]) //保存字符或编码到文件中
{
char name[10];
FILE *fp;
printf(“请输入要保存的文件名(加后缀名)“);
gets(name);
if((fp=fopen(name“wt“))==NULL)
{
printf(“存储失败“);
exit(1);
}
fputs(sfp);
printf(“\n保存成功文件名为:%s。\n“name);
printf(“\n按回车键继续...“);
getchar();
fclose(fp);
}
void SearchStr(char s[]char str[]int count[])
{
//查找字符串中字符的个数和每个字符出现的次数
int ijk=0;
for(i=0; i count[i]=0;
for(i=0; s[i]; i++)
{
for(j=0; j if(str[j]==s[i])
{
count[j]++;
break;
}
if(j==k) //在str[]中无该字符将其存入最后一个单元
{
str[k]=s[i];
count[k++]++;
}
}
str[k]=‘\0‘; //将字符串结尾置\0
n=k; //将实际的字符个数作为叶子节点个数存入n
}
void SelectMin(HFMTree HTint kHFMTree *HT1HFMTree *HT2)
{
//查找赫夫曼链表中两个权值最小的节点
int imin;
HFMTree p;
min=32767;
for(i=0p=HT; inext)
if(p->weightParent==0)
{
min=p->weight;
*HT1=p;
}
min=32767;
for(i=0p=HT; inext)
if(p->weightParent==0&&p!=*HT1) //令第二个最小的节点不等于第一个节点
{
min=p->weight;
*HT2=p;
}
}
void CreatHFMTree(HFMTree *HTint count[])
{
//创建赫夫曼树
int i;
HFMTree pHT1HT2; //HT1HT2分别存放权值最小和次小的节点的位置
p=*HT=(HFMTree)malloc(sizeof(HFMNode));
p->next=p->LChild=p->RChild=p->Parent=NULL; //初始化赫夫曼链表且有2n-1个节点
for(i=1; i<2*n-1; i++)
{
p->next=(HFMTree)malloc(sizeof(HFMNode));
p=p->next;
- 上一篇:文件系统的用户界面[含答案]
- 下一篇:C++大富翁代码
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论