69,382
社区成员
发帖
与我相关
我的任务
分享
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//**************树的 结构*****************
typedef struct
{
char letter;
int rate;
int flag;
}Value;
typedef struct
{
Value weight;
int parent;
int *child;
}huff_node;
typedef struct
{
int rate;//记录字符出现次数 主要用来判断是否第一次出现
int pos;//记录字符在 huffmanT中的位置
}flag;
//**************编码的结构****************
typedef struct
{
char ch;
char bit[96];
}codenode;
huff_node *create_huffnode(int k,int ch);
//codenode huffman_code[n];//编码 数组
int n = 0;//huffman数组游标
flag rate[95] = { -1 };//存储字符出现概率
char letter[95];//‘\0填充’ 存储字符
huff_node * huffmanT[189];
//***1***遍历文章,计算可打印的字符的权值
void new_huffmanT(int k)
{
FILE *fp;
int ch;
fp = fopen("Article.txt", "rt");
ch = fgetc(fp);
while (ch != EOF)
{
if (rate[ch - ' '].rate == -1)//第一次出现
{
huffmanT[n] = create_huffnode(k,ch);
rate[ch - ' '].rate = 1;
rate[ch - ' '].pos = n;
n++;
}
else//出现过
{
rate[ch - ' '].rate++;
huffmanT[rate[ch - ' '].pos]->weight.rate++;
}
//读下一字符
ch = fgetc(fp);
}
fclose(fp);
}
huff_node *create_huffnode(int k,int ch)
{
huff_node *p = (huff_node *)malloc(sizeof(huff_node) + k*sizeof(int));
p->weight.flag = 0;//查找最小 k 个rate值时使用
p->weight.rate = 1;//rate值
p->weight.letter = ch ;
p->parent = -1;
int i;
for (i = 0; i < k; i++)
p->child[i] = -1;
return p;
}
int main()
{
int m;
int k;
printf("请输入huffman树的叉数");
scanf("%d", &k);
new_huffmanT(k);
getchar();
return 0;
}
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。