标题:请各位帮忙看下,我这是赋值的问题还是编译器的问题,? 我有表明地方!!
只看楼主
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
结帖率:94.44%
已结贴  问题点数:20 回复次数:9 
请各位帮忙看下,我这是赋值的问题还是编译器的问题,? 我有表明地方!!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
    unsigned int weight;
    unsigned int parent,lchild,rchild;
}CTNode;
typedef char **HuffCrret;
void select(CTNode *HT,int *h1,int *h2,int n)
{
    int i,j;
    for(i = 1;i<=n;i++)
        if(!HT[i].parent)
        {
            *h1 = i;
            break;
        }
    for(j = i+1;j<=n;j++)
        if(!HT[j].parent)
        {
            *h2 = j;
            break;
        }
    for(i =1;i<=n;i++)
    {
        if(HT[*h1].weight > HT[i].weight &&!HT[i].parent && HT[i].weight != HT[*h2].weight )
            *h1 = i;
    }
    for(j = 1;j<=n;j++)
    {
        if(HT[*h2].weight > HT[j].weight &&!HT[j].parent && HT[j].weight != HT[*h1].weight)
            *h2 = j;
    }
    if(*h1 > *h2)
    {
        int temp;
        temp = *h1;
        *h1 = *h2;
        *h2 = temp;
    }
}
void Huffman(CTNode *HT,HuffCrret *HC,int *w,int n)
{
    int i,j,m;
    int s1,s2;
    char *cd ;
    CTNode *p;
    if(n<1)
        return ;
    m = 2 * n-1;
    HT = (CTNode *)malloc(sizeof(CTNode)*(m+1));
/*    for(i =1;i<=n;i++)
    {
        HT[i].weight = w[i-1];
        HT[i].parent = 0;
        HT[i].rchild = 0;
        HT[i].lchild = 0;
    }
    for(i = n+1;i<=m;i++)
    {
        HT[i].weight = 0;
        HT[i].parent = 0;
        HT[i].rchild = 0;
        HT[i].lchild = 0;
    }   */
    for(p = HT,i =1;i<=m; p++,w++,i++)  //
        *p = {*w,0,0,0};                // 这一句为什么会报语法错误,是我的编译器问题还是电脑问题,或者语法错误。 可我曾经就是这样赋过值。


    printf("赫夫曼初态:\n");
    printf(" 节点 weight parent lchild rchild\n");
    for(i = 1;i<=m;i++)
        printf("%4d%6d%6d%6d\n",i,HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild);
    for(i = n+1;i<=m;i++)
    {
        select(HT,&s1,&s2,i-1);
        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;
        printf(" 节点 weight parent lchild rchild\n");
        for(j = 1;j<=i;j++)
            printf("%4d%6d%6d%6d\n",j,HT[j].weight,HT[j].parent,HT[j].lchild,HT[j].rchild);
    }
    puts("");
    int start ,f;
    unsigned int c = 0;
    *HC = (HuffCrret)malloc(sizeof(char*) * (n+1));
    cd = (char *)malloc(sizeof(char) * n);
    if(!cd)
        exit(1) ;
    cd[n-1] = '\0';
    for(i =1;i<=n;i++)
    {
        start = n -1;
        for(c = i,f = HT[i].parent;f != 0;c = f,f = HT[f].parent)
        {
            if(HT[f].lchild == c)
                cd[--start] = '0';
            else
                cd[--start] = '1';
        }
        (*HC)[i] = (char *)malloc(sizeof(char)*(n-start));
        strcpy((*HC)[i],&cd[start]);
    }
    free(cd);
}
void main(void)
{
    CTNode *HT = NULL;
    HuffCrret HC;
//    int (*Q)[4];
//    Q[4][4]
    int *w = NULL;
    int n = 0;
    int i = 0;
    printf("程序开始~~~!!\n");
    printf("请输入赫夫曼树的节点个数:");
    scanf("%d",&n);
    printf("\n请输入%d的权值:",n);
    w = (int *)malloc(sizeof(int)*n);
    for(i =0;i<n;i++)
    {
        scanf("%d",&w[i]);
    }
    Huffman(HT,&HC,w,n);
    printf("\n 编号 权值 编码");
    for(i =1;i<=n;i++)
    {
        printf("\n%2d%6d%6s",i,w[i-1],HC[i]);
    }
    puts("");
    free(HC);
    free(HT);
}
数据结构的书上也是这样赋值,为什么我的会报语法错误。望懂的人能给我讲解,分数可以上加,!!
搜索更多相关主题的帖子: include 编译器 parent 
2013-06-13 16:53
嗜血老妖
Rank: 3Rank: 3
来 自:江西
等 级:论坛游侠
威 望:2
帖 子:102
专家分:163
注 册:2013-3-25
得分:0 
你以前可能是数组指针吧???

仗剑走天涯,网络论英雄。
2013-06-13 17:31
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
学过结构体吗?

总有那身价贱的人给作业贴回复完整的代码
2013-06-13 17:53
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
得分:0 
回复 3楼 embed_xuel
我结构体哪里错了,??

[ 本帖最后由 dengluoy 于 2013-6-13 19:02 编辑 ]

一同学习, 一同进步
2013-06-13 19:00
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
得分:0 
回复 2楼 嗜血老妖
不是呢,0 0 ,

一同学习, 一同进步
2013-06-13 19:00
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:20 
谁教你可以这样赋值的?

授人以渔,不授人以鱼。
2013-06-13 19:03
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
得分:0 
回复 6楼 TonyDeng
,- - 我隐约好像在哪本书上看到过。。
结构体初始化。。- - T版,这样赋值是错误的吗,??

一同学习, 一同进步
2013-06-13 19:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
初始化可以,是因为语言规定编译器在初始化变量时可以附带做这个动作,是在编译期完成的,但在普通的执行阶段不能这样做,这是语言本身限定的。

授人以渔,不授人以鱼。
2013-06-13 19:12
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
得分:0 
回复 8楼 TonyDeng
明白了明白了。谢谢。。。!! 难怪。难怪。

一同学习, 一同进步
2013-06-13 19:21
cowo800
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2013-6-13
得分:0 
学习了,往往版主。
2013-06-14 12:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-415102-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.229427 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved