下午第五题标准答案

swordsmith 2003-10-13 10:44:29
#include<stdio.h>

#define NODE_NUM 10

struct node
{
char ch;
int weight;
int parent;
int lchild,rchild;
}Ht[NODE_NUM];

void init(void)
{
Ht[1].ch='a'; Ht[1].weight=2; Ht[1].parent=5; Ht[1].lchild=0; Ht[1].rchild=0;
Ht[2].ch='b'; Ht[2].weight=7; Ht[2].parent=7; Ht[2].lchild=0; Ht[2].rchild=0;
Ht[3].ch='c'; Ht[3].weight=4; Ht[3].parent=5; Ht[3].lchild=0; Ht[3].rchild=0;
Ht[4].ch='d'; Ht[4].weight=5; Ht[4].parent=6; Ht[4].lchild=0; Ht[4].rchild=0;
Ht[5].ch='x'; Ht[5].weight=6; Ht[5].parent=6; Ht[5].lchild=1; Ht[5].rchild=3;
Ht[6].ch='x'; Ht[6].weight=11; Ht[6].parent=7; Ht[6].lchild=4; Ht[6].rchild=5;
Ht[7].ch='x'; Ht[7].weight=18; Ht[7].parent=0; Ht[7].lchild=2; Ht[7].rchild=6;
}


char *Hc[]=
{
"xxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxx"
};

void LeafCode(int root, int n)
{
int i,p=root, cdlen=0;
char code[20];
//Hc=(char **)malloc((n+1)*sizeof(char *));

for(i=1;i<=p;++i)
Ht[i].weight=0;

while(p)
{
if(Ht[p].weight==0)
{
Ht[p].weight=1;
if(Ht[p].lchild!=0)
{
p=Ht[p].lchild;
code[cdlen++]='0';
}
else if(Ht[p].rchild==0)
{
//Hc[p]=(char *)malloc((cdlen+1)*sizeof(char));
code[cdlen]='\0';
strcpy(Hc[p],code);
printf("%s\n",code); //我加上的
}
}
else if(Ht[p].weight==1)
{
Ht[p].weight=2;
if(Ht[p].rchild!=0)
{
p=Ht[p].rchild;
code[cdlen++]='1';
}
}
else
{
Ht[p].weight=0;
p=Ht[p].parent;
cdlen--;
}
}
}


void Decode(char *buff, int root)
{
int pre=root,p;

while(*buff!='\0')
{
p=root;
while(p!=0)
{
pre=p;
if(*buff=='0')
p=Ht[p].lchild;
else
p=Ht[p].rchild;

buff++;
}

buff--;

printf("%c",Ht[pre].ch);
}
}

main()
{
init();

LeafCode(7,4);

printf("\n");

Decode("010110111",7);

printf("\n");
}



输出:
0
10
110
111

bdac


关于Hc分配内存的问题,如果照题目上的方法程序会coredump,所以我改掉了
以上程序在HP UNIX上编译运行
...全文
42 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
limd 2003-10-14
  • 打赏
  • 举报
回复
我是过了
jhwlll 2003-10-14
  • 打赏
  • 举报
回复
(1)对了
(2),(3)原本都对,只怪自己没信心,又改了,全错。
(4)*buff=='0'写成了*buff==0
(5)又错了。
汇编是全对了。
下午最后二题得分15+3=18分。
不会有出入了。
前三题:我想想应是12+10+7=29
得分:47分

看来没戏了。
chushicheng 2003-10-14
  • 打赏
  • 举报
回复
哈哈,我全对啦
swordsmith 2003-10-14
  • 打赏
  • 举报
回复
我其实没有试卷只是把绝大多数的题记了下来,上午的题我只记了我认为会错的,那些题别人的帖里都有。
tqltqt 2003-10-14
  • 打赏
  • 举报
回复
:( 只对了两个,那就意味着丢了9分啊 :(
qds 2003-10-14
  • 打赏
  • 举报
回复
请把是答案的语句作标记!
idcto 2003-10-14
  • 打赏
  • 举报
回复
楼主,我记得你有试卷,那

把每个题“关键字”1-65题贴上来吧,
关键字就是说有助于回忆的内容。
怎么样呢?
powerfulzyh 2003-10-14
  • 打赏
  • 举报
回复
绝对支持,虽然我填错了个空,但还是觉得这是标准答案!

2,958

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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