数据结构课程设计(Haffuman编码)

自己把读入输出改为文件操作,再搞一个选择菜单就是一个课设了。
#include
#include
using namespace std;
struct Haffuman
{
        int w;
        int parent=0,lc=0,rc=0;
}H[1005];
const int INF=0x3f3f;
void select(Haffuman *H,int n, int &s1, int &s2)
{
    int fmin=INF,smin=INF;
    for(int i=1;i<=n;i++)
    {
    if(H[i].parent!=0) continue;
    if(H[i].w     }
    for(int i=1;i<=n;i++)
    {
    if(H[i].parent!=0) continue;
    if(H[i].w=fmin) {smin=H[i].w; s2=i;}
    }
}
void creat_Haffuman(Haffuman *H,int n)
{
        if(n<=1) return ;
        int s1,s2;
        for(int i=1;i<=n;i++)
        {
        cin>>H[i].w;
        }
        for(int i=n+1;i<=2*n-1;i++)
        {
        select(H,i-1,s1,s2);
        //cout<
        H[s1].parent=i; H[s2].parent=i;
        H[i].lc=s1;
        H[i].rc=s2;
        H[i].w=H[s1].w+H[s2].w;
        }
}
void decode(Haffuman *H,char **a,int n) //需要用到二级指针或者向量(在c++中用string数组更加方便)
{
    int start,c,f;
    a=new char*[n+1];
    char* cd=new char[n];
    cd[n-1]='\0';
    for(int i=1;i<=n;i++)
    {
    start=n-1;
    c=i;
    f=H[i].parent;
    while(f)
    {
    if(H[f].lc==c) cd[--start]='0';
    else cd[--start]='1';
    c=f;
    f=H[f].parent;
    }
    a[i]=new char[n-start];
    strcpy(a[i],&cd[start]);
    for(int j=start;j         cout<         cout<     }
    delete cd;
}
int main()
{
    int n;
    char **a;
    cout<<"请输入哈夫曼树结点的个数:"<     cin>>n;
    creat_Haffuman(H,n);
    for(int i=1;i<=2*n-1;i++)
    cout<     decode(H,a,n);
    return 0;
}

数据结构课程设计(Haffuman编码)_第1张图片

你可能感兴趣的:(数据结构)