c语言程序找错误,急!!!这有几个C语言的程序谁帮我找下错误...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include "HFM.h"

#include "stdlib.h"

#include "stdio.h"

static HFMTree tree;

HFMCell cells[MAX_LEN];

HFMCell saved[MAX_LEN];

static HFMCell swapCell;//专门用于交换的临时空间

static int saveIndex;//保存元素的起始索引值

static HFMCoded coded[MAX_LEN];

void InitHeap()

{

int i;

memset(cells,0,sizeof(HFMCell)*MAX_LEN);

memset(saved,0,sizeof(HFMCell)*MAX_LEN);

saveIndex=0;

for(i=0;i

{

cells[i].kind=CHARACTER;

cells[i].right=cells[i].left=-1;

saved[i].right=saved[i].left=-1;

}

tree.cellRoot=0;

tree.num=0;

}

void Swap(long a,long b)

{

if(a==b)

return;

memcpy(&swapCell,cells+a,sizeof(HFMCell));

memcpy(cells+a,cells+b,sizeof(HFMCell));

memcpy(cells+b,&swapCell,sizeof(HFMCell));

}

int Compare(long a,long b)

{

return cells[a].weight

}

void Insert(LPHFMCell cell)

{

int temp=tree.num;

if(tree.num>=MAX_LEN)

return;

memcpy(cells+tree.num,cell,sizeof(HFMCell));

tree.num++;

for(;;)

{

if(temp!=0&&(Compare(temp,(temp-1)/2)))

{

Swap(temp,(temp-1)/2);

temp=(temp-1)/2;

}

else

break;

}

}

int Delete()

{

int temp=0, smaller;

int left,right;

Swap(0,tree.num-1);

tree.num--;

for(;;)

{

left=temp*2+1;right=temp*2+2;

if(left>=tree.num)

break;

else if(right>=tree.num)

smaller=left;

else

smaller=(Compare(left,right))?left:right;

if(Compare(temp,smaller))

break;

else

{

Swap(smaller,temp);

temp=smaller;

}

}

return tree.num;

}

int CopySaved(int a)

{

int temp=saveIndex;

memcpy(saved+saveIndex, cells+a, sizeof(HFMCell));

saveIndex++;

return temp;

}

static int codeIndex=0;

//左岔0 右岔1

void AssignCode(int index,int weight,int digLen)

{

if(saved[index].kind==CHARACTER)

{

coded[codeIndex].character=saved[index].ch;

coded[codeIndex].code=weight;

coded[codeIndex].digLen=digLen;

codeIndex++;

return;

}

if(saved[saved[index].left].kind==CHARACTER)

{

coded[codeIndex].character=saved[saved[index].left].ch;

coded[codeIndex].code=weight<<1;

coded[codeIndex].digLen=digLen+1;

codeIndex++;

}

else

{

AssignCode(saved[index].left,weight<<1,digLen+1);

}

if(saved[saved[index].right].kind==CHARACTER)

{

coded[codeIndex].character=saved[saved[index].right].ch;

coded[codeIndex].code=(weight<<1)+1;

coded[codeIndex].digLen=digLen+1;

codeIndex++;

}

else

{

AssignCode(saved[index].right,(weight<<1)+1,digLen+1);

}

}

void HFMCode()

{

int least,seconLeast;

HFMCell temp;

temp.kind=NODE;

temp.ch=-1;

while(tree.num>1)

{

least=Delete();

seconLeast=Delete();//获得两个最小权值的元素

temp.weight=cells[least].weight+cells[seconLeast].weight;

temp.left=CopySaved(least);

temp.right=CopySaved(seconLeast);

Insert(&temp);

}

memset(coded,0,sizeof(HFMCoded)*MAX_LEN);

AssignCode(cells[0].left,0,1);

AssignCode(cells[0].right,1,1);

}

void BeginCoding(char sourpath[],char despath[])

{

FILE* infile;

FILE* outfile;

char ch;

int i,j,digLen,code;

char temp=0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值