资源简介
这是大二时的数据结构的课设,今天与大家分享。可以读写文件,编码译码,以及对输入的异常处理。

代码片段和文件信息
#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的指纹识别门禁系统
相关资源
- 教学计划编制系统
- 哈夫曼树编码和译码实验报告+运行视
- 数据结构课设-模拟电梯
- 哈夫曼树--链表实现编码,解码
- 杭电数据结构课设自选题
- 哈夫曼树实现图片压缩与解压
- 数据结构课设文件系统模拟器
- 吉林大学数据结构课设
- 广工数据结构课设
- 经典算法flash动画演示
- 简单职工信息管理的设计与实现
- 数据结构课设三:实现字典查询
- 数据结构课设二:用树形结构模拟W
- 数据结构课程设计-排课系统源代码
- 数据结构课程设计教学计划编制问题
- 哈夫曼树课程设计报告
- 哈夫曼树与哈夫曼编码
- 人事档案管理系统——数据结构课设
- 简单的文章编辑器数据结构课设
- 数据结构课设拓扑排序源代码教学计
- 哈夫曼树的基本操作
- 山东大学数据结构课设箱子装箱问题
- 数据结构课设——教学计划编制问题
- 数据结构课设模拟银行业务
- 高级数据结构课设1.7z
- 广东工业大学数据结构课设---航空航
- 数据结构 迷宫 编码和译码 课设
- fibonacci数列的哈夫曼树和哈夫曼编码
- 数据结构课设报告之迷宫.docx
- 二叉树与树、森林的转换数据结构课
评论
共有 条评论