C/C++ char类型指针数组输入问题

C/C++ char类型指针数组输入问题

数据结构课程设计,要求从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树并将它存于文件hfmTree中.将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上。
程序代码如下:

#include <iostream>
#include <string.h>
#define N 50
#define M 2*N-1
#define MAX 100
using namespace std;

typedef struct {
    char data[5];
    int weight;
    int parent;
    int lchild;
    int rchild;
}HTNode;
typedef struct {
    char cd[N];
    int start;
}HCode;

void CreatHT(HTNode ht[], int n) {
    int i,k,lnode,rnode;
    int min1,min2;
    for (i=0; i<2*n-1; i++) {
        ht[i].parent=ht[i].lchild=ht[i].rchild=-1;
    }
    for (i=n; i<2*n-1; i++) {
        min1=min2=32767;
        lnode=rnode=-1;
        for (k=0; k<=i-1; k++) {
            if (ht[k].parent==-1) {
                if (ht[k].weight<min1) {
                    min2=min1;
                    rnode=lnode;
                    min1=ht[k].weight;
                    lnode=k;
                }
                else if (ht[k].weight<min2) {
                    min2=ht[k].weight;
                    rnode=k;
                }
            }
        }
        ht[lnode].parent=i;
        ht[rnode].parent=1;
        ht[i].weight=ht[lnode].weight+ht[rnode].weight;
        ht[i].lchild=lnode;
        ht[i].rchild=rnode;
    }
}
void CreatHCode(HTNode ht[], HCode hcd[], int n) {
    int i,f,c;
    HCode hc;
    for (i=0; i<n; i++) {
        hc.start=n;
        c=i;
        f=ht[i].parent;
        while (f!=-1) {
            if (ht[f].lchild==c) {
                hc.cd[hc.start--]='0';
            }
            else {
                hc.cd[hc.start--]='1';
            }
            c=f;
            f=ht[f].parent;
        }
        hc.start++;
        hcd[i]=hc;
    }
}
void DispHCode(HTNode ht[], HCode hcd[], int n) {
    int i,k;
    int sum=0,m=0,j;
    printf("输出哈弗曼编码:\n");
    for (i=0; i<n; i++) {
        j=0;
        printf("    %s:\t", ht[i].data);
        for (k=hcd[i].start; k<=n; k++) {
            printf("%c", hcd[i].cd[k]);
            j++;
        }
        m+=ht[i].weight;
        sum+=ht[i].weight*j;
    }
    printf("\n平均长度=%g\n", 1.0*sum/m);
}

int main(int argc, const char * argv[]) {
    // insert code here...
    int n,i;
    char *str[MAX];//这里定义了一个指针数组存放哈夫曼编码
    int fnum[MAX];
    HTNode ht[M];
    HCode hcd[N];
    printf("输如字符集大小:");
    scanf("%d", &n);
    printf("输入%d个字符:", n);
    for (i=0; i<n; i++) {
        scanf("%s", str[i]);//这里的输入应该如何修改?
    }
    printf("输入%d个权值:", n);
    for (i=0; i<n; i++) {
        scanf("%d", &fnum[i]);
    }
    for (i=0; i<n; i++) {
        strcpy(ht[i].data, str[i]);
        ht[i].weight=fnum[i];
    }
    CreatHT(ht, n);
    CreatHCode(ht, hcd, n);
    DispHCode(ht, hcd, n);
    return 1;
}

有问题的地方已在主函数中注释,其他的函数都是哈夫曼树的基本算法。
困扰许久求大佬解决!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐