⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 使用链表编写的香农编码.txt

📁 使用链表编写的香农编码 其他人不需帐号就可自由下载此源码
💻 TXT
字号:
#include "iostream.h"
#include "math.h"
class DATA//数据类
{
public:
DATA(){next=NULL;qian=NULL;}
char Xi;
char* key;
float PXi,PXj;
int Ki;
DATA *next,*qian;
};

void a(DATA *p)//算码字
{
int l=0,y=p->Ki;
char* L=new char[y];
float z=p->PXj;
    while(y>0)
    {
    z=z*2;
        if(z>=1)//->字符0.1
        {z=z-1;
        L[l]='1';}
        else L[l]='0';
    l++;
    y--;
    }//此时得到编码数组L
p->key=L;//赋给信源数组
}

void main()
{int l;
float z,y=0;
char L;
DATA *p=new DATA;//ini
DATA *head=p;//ini
    while(1)
    {cout<<"1.编码"<<endl<<"2.结束程序"<<endl;
    cin>>l;
    if(l>=2) break;
        switch(l)//选择
        {
            case 1:{//输入信源排序并编码
                cout<<"分别输入Xi与PXi的值,PXi的值输入9表示输入结束"<<endl;
                    while(1)
                    {
                    cout<<"Xi的值:";
                    cin>>L;
                    cout<<"PXi的值:";
                    cin>>z;
                    if(z==9) break;
                    p->Xi=L;//赋值
                    p->PXi=z;
                    if(p->qian==NULL) p->PXj=0;
                    else {p->PXj=p->qian->PXi+p->qian->PXj;}//!
                    p->Ki=int(0.999-log10(z)/log10(2));
                    p->next=new DATA;
                    p->next->qian=p;
                    p=p->next;
                    }//到此完成对信源的输入及初始计算
                    for(p=head;p->next!=NULL;p=p->next)
                    {
                    a(p);
                    cout<<p->key;//输出编码
                    }
                cout<<endl;
                break;
                   }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -