大神们来看一下啊

Bellow_C 2011-05-18 09:04:15
很抱歉,给大家看一段程序,有时间的麻烦帮解决一下问题
是有关内存不能为read的问题 我看了好久,没有发现问题出现在哪里
//郝夫曼树的建立及编码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define overflow -2
typedef struct{
char ch;
unsigned int weight;//结点的权值
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;//动态分配数组存储郝夫曼树
typedef char **HuffmanCode;//动态分配数组存储郝夫曼编码表
//***************
void Select(HuffmanTree T,int n,int &s1,int &s2);//声明Select函数
//........*************...............
void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n)
{ //w存放n个字符的权值,构造郝夫曼树HT,并求出n个字符的郝夫曼编码HC.
if(n<=1) return;
int m=2*n-1;
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//0号单元未用
if(!HT) exit(overflow);
(HT+1)->ch=' ';//空格
(HT+1)->weight=186;
{
HuffmanTree p=NULL;
int i;
char c;
for(p=HT+2,i=1,c='a';i<=n;++i,++p,++w,++c)
{
p->ch=c;
p->weight=*(w+1);
p->lchild=p->parent=p->rchild=0;
}
}//初始化郝夫曼树
//
//建造郝夫曼树
int s1,s2;
for(int i=n+1;i<=m;++i)
{
Select(HT,i-1,s1,s2);
HT[s1].parent=i;HT[s2].parent=i;
HT[i].lchild=s1;HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}
//...从叶子到根逆向求每个字符的郝夫曼编码...
HC=(HuffmanCode)malloc((n+1)*sizeof(char*));
char *cd=(char*)malloc(n*sizeof(char));
HC[0]="\0";
cd[n-1]='\0';
int k;
for(k=1;k<=n;++k)
{
int start=n-1;
int c,f;
for(c=k,f=HT[k].parent;f!=0;c=f,f=HT[f].parent)
{
if(HT[f].lchild==c)
cd[--start]='0';
else
cd[--start]='1';
HC[k]=(char*)malloc((n-start)*sizeof(char));
strcpy(HC[k],&cd[start]);
}
free(cd);
}
}
//
//....Select函数.....
void Select(HuffmanTree T,int n,int &s1,int &s2)
{
s1=1;
for(int i=1;i<=n;++i)
{
if(T[s1].weight>T[i].weight)
s1=i;
}
s2=1;
for(int j=1;j<=n;j++)
{
if(s2==s1)
{
s2=j-2;
continue;
}
else
{
if(T[s2].weight>T[j].weight)
s2=j;
}
}
}
//
//...主函数....
void main()
{
HuffmanTree HT=NULL;//郝夫曼树存储空间的头指针
HuffmanCode HC=NULL;//存放每位字符的编码
int w[27];
w[0]=186;
char c='a';
int j;
for(j=1;j<27;j++)
{
printf("%c :",c++);
scanf("%d",&w[j]);
getchar();
}
HuffmanCoding(HT,HC,w,27);
char *str="this program is my favorite";
printf("'this program is my favorite'的郝夫曼编码为:\n");
char *q;
for(q=str;*q!='\0';q++)
{
if(*q==' ')
{
printf("%s",HC[1]);
}
else
{
printf("%s ",HC[*q-95]);
}
}
}















...全文
100 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
booksoon 2011-05-19
  • 打赏
  • 举报
回复
都是指针惹的祸啊~~~
xuexiaodong2009 2011-05-19
  • 打赏
  • 举报
回复
发错地方了把

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧