资源简介
这是大二时的数据结构的课设,今天与大家分享。可以读写文件,编码译码,以及对输入的异常处理。
代码片段和文件信息
#include
#include
#include
/*-------------------------------------------------------------------------------------------------------------------*/
struct HtNode /*哈夫曼树结点的结构*/
{
int ww; /*权值*/
int parentllinkrlinkrlparent; /*rlparent是记录该结点是父结点的左孩子还是右孩子*/
char a; /*记录编码字符的信息*/
};
typedef struct HtNode * PHtNode;
struct HtTree /*哈夫曼树结构*/
{
int m; /*外部结点的个数*/
int root; /*哈夫曼树在数组中的下标*/
struct HtNode *ht; /*存放2*m-1个结点的数组*/
};
typedef struct HtTree * PHtTree; /*哈夫曼树类型的指针类型*/
/*-------------------------------------------------------------------------------------------------------------------*/
/************************************************************************/
/*函数的功能:创建哈夫曼树,将电文编码 */
/*函数的参数:1、哈夫曼树叶子结点的个数 2、权值的数组 3、编码字符的信息*/
/*函数的返回值:返回指向数组的指针 */
/************************************************************************/
PHtTree huffman(int mint *wchar *p) /*构造具有m个外部结点的哈夫曼树*/
{
PHtTree pht;
int ijx1x2m1m2;
pht=(PHtTree)malloc(sizeof(struct HtTree)); /*分配哈夫曼树空间*/
if(pht==NULL)
{
printf(“Out of space!!\n“);
return pht;
}
pht->ht=(struct HtNode *)malloc(sizeof(struct HtNode)*(2*m-1)); /*分配ht数组空间*/
if(pht->ht==NULL)
{
printf(“Out of space!!\n“);
return pht;
}
for(i=0;i<2*m-1;i++) /*置ht数组初态*/
{
pht->ht[i].llink=-1;
pht->ht[i].rlink=-1;
pht->ht[i].parent=-1;
pht->ht[i].rlparent=-1;
if(i {
pht->ht[i].ww=w[i]; /*各点的权值*/
pht->ht[i].a=p[i]; /*各点的字符信息*/
}
else
pht->ht[i].ww=-1; /*剩余的结点赋值为-1*/
}
for(i=0;i {
m1=m2=32767; /*相关变量赋初值*/
x1=x2=-1;
for(j=0;j {
if(pht->ht[j].wwht[j].parent==-1) /*x1中存放最小权的无父结点的结点下标*/
{
m2=m1; /*x2中存放第二小权的无父结点的结点下标*/
x2=x1;
m1=pht->ht[j].ww;
x1=j;
}
else if(pht->ht[j].wwht[j].parent==-1)
{
m2=pht->ht[j].ww;
x2=j;
}
}
pht->ht[x1].parent=m+i; /*构造内部结点*/
pht->ht[x1].rlparent=0; /*该结点是父结点的左孩子*/
pht->ht[x2].parent=m+i; /*该结点的父结点的位置,即数组下标*/
pht->ht[x2].rlparent=1; /*该结点是父结点的右孩子*/
pht->ht[m+i].ww=m1+m2; /*父结点的权值是左右孩子的权值之和*/
pht->ht[m+i].llink=x1; /*将父结点的llink的值赋上左孩子所在的数组下标*/
pht->ht[m+i].rlink=x2; /*将父结点的rlink的值赋上右孩子所在的数组下标*/
}
pht->root=2*m-2; /*根结点的位置在数组的最后一个元素*/
printf(“哈夫曼树创建成功!!\n哈夫曼树在数组中的存储形式为:\n“);
for(i=0;i<2*m-1;i++) /*输出哈夫曼树中的数组所保存的权值*/
{
printf(“ %d “pht->ht[i]);
}
printf(“\n编码成功!\n“);
return pht;
}
/*--------------------------------------------
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 634880 2010-07-26 18:47 哈夫曼树.doc
文件 32837 2010-07-14 12:16 哈夫曼树\Debug\huffamn.obj
文件 184772 2010-07-13 12:59 哈夫曼树\Debug\huffamn.pch
文件 492544 2010-07-13 22:20 哈夫曼树\Debug\huffamn.pdb
文件 2560 2010-07-13 13:10 哈夫曼树\Debug\huffamn.suo
文件 33792 2010-07-14 12:16 哈夫曼树\Debug\vc60.idb
文件 53248 2010-07-14 12:16 哈夫曼树\Debug\vc60.pdb
文件 204869 2010-07-14 12:16 哈夫曼树\Debug\哈夫曼树.exe
文件 225368 2010-07-14 12:16 哈夫曼树\Debug\哈夫曼树.ilk
文件 184772 2010-07-13 12:39 哈夫曼树\Debug\哈夫曼树.pch
文件 549888 2010-07-14 12:16 哈夫曼树\Debug\哈夫曼树.pdb
文件 3072 2010-07-14 08:00 哈夫曼树\Debug\哈夫曼树.suo
文件 27 2010-07-13 22:06 哈夫曼树\dianwen.txt
文件 20444 2010-07-14 08:12 哈夫曼树\huffamn.c
文件 3411 2010-07-14 08:06 哈夫曼树\huffamn.dsp
文件 50176 2010-07-14 08:10 哈夫曼树\huffamn.ncb
文件 48640 2010-07-14 08:06 哈夫曼树\huffamn.opt
文件 0 2010-07-14 08:10 哈夫曼树\huffamn.plg
文件 4305 2010-07-11 17:01 哈夫曼树\哈夫曼树.dsp
文件 524 2010-07-11 16:12 哈夫曼树\哈夫曼树.dsw
文件 50176 2010-07-14 13:43 哈夫曼树\哈夫曼树.ncb
文件 48640 2010-07-14 13:43 哈夫曼树\哈夫曼树.opt
文件 898 2010-07-14 12:16 哈夫曼树\哈夫曼树.plg
..A..H. 6144 2010-07-11 20:16 哈夫曼树\哈夫曼树.suo
目录 0 2010-07-14 08:11 哈夫曼树\Debug
目录 0 2010-07-14 13:43 哈夫曼树
----------- --------- ---------- ----- ----
2835987 26
- 上一篇:Allegro2AD教程及批处理.rar
- 下一篇:基于ARM9的指纹识别门禁系统
相关资源
- 数据结构课程设计之哈夫曼树的建立
- 哈夫曼树的构造、编码、译码实现
- 数据结构课程设计抽签游戏
- 校内旅游咨询课程设计报告
- 数据结构课设Trie树
- 数据结构课设-文学研究助手
- 山东大学软件学院数据结构课设——
- 哈夫曼树应用 从终端读入字符集大小
- 数据结构课设-航空航天管理系统设计
- 实验报告及程序 哈夫曼树的编码和译
- 哈夫曼树实现文件解压缩
- 哈夫曼树课程设计+数据结构
- 哈夫曼树及哈夫曼编码数据结构实验
- 数据结构实验二哈夫曼树及哈夫曼编
- 数据结构课设报告之校园导航系统.
- 哈夫曼树编码
- 神秘国度的爱情故事-数据结构课设
- 数据结构课设马踏棋盘
- 数据结构课设最小生成树问题cpp含报
- 数据结构 课程设计 哈夫曼树“编码、
评论
共有 条评论