text.c
来自「初学者可以看看的算法」· C语言 代码 · 共 92 行
C
92 行
#include "text.h"
void main(void)
{
char sArray[LENGTH];
int nChance[LENGTH];
short nCode[LENGTH];
int nCount;
printf("Please input the massage:\n");
gets(sArray);
nCount = strlen(sArray);
fDelAdd(sArray,nChance,&nCount);
fReSort(sArray,nChance,nCount);
printf("Coding result:\n");
if(nCount==1)
printf("%c: %d\n",sArray[0],DEF_CODE);
else
fCoding(sArray,nChance,nCode,0,0,nCount,DEF_CODE);
}
void fDelAdd(char *pArray,int *pChance,int *pCount)
{
int i,j;
for(i=0;i<*pCount;++i)
pChance[i] = 0;
for(i=0;i<*pCount;++i)
{
++pChance[i];
for(j=i+1;j<*pCount;++j)
if(pArray[i]==pArray[j])
{
++pChance[i];
--*pCount;
pArray[j] = pArray[*pCount];
--j;
}
}
}
void fReSort(char *pArray,int *pChance,int nCount)
{
int i,j,TempInt;
char TempChar;
for(i=0;i<nCount;++i)
for(j=i+1;j<nCount;++j)
if(pChance[i]<pChance[j])
{
TempInt = pChance[i];
pChance[i] = pChance[j];
pChance[j] = TempInt;
TempChar = pArray[i];
pArray[i] = pArray[j];
pArray[j] = TempChar;
}
}
void fCoding(char *pArray,int *pChance,short *pCode,
int n,int nStart,int nEnd,int nState)
{
int i,Position = 0;
int Sum,PartSum1,PartSum2;
Sum = PartSum1 = PartSum2 = 0;
pCode[n] = nState;
if(nEnd-nStart>1)
{
for(i=nStart;i<nEnd;++i)
Sum += pChance[i];
i = nStart;
while(!Position)
if(PartSum1<Sum/2)
{
PartSum2 = PartSum1;
PartSum1 += pChance[i];
++i;
}
else
if((PartSum1-Sum/2)>(Sum/2-PartSum2))
Position = i-1;
else
Position = i;
fCoding(pArray,pChance,pCode,n+1,nStart,Position,LEFT_CODE);
fCoding(pArray,pChance,pCode,n+1,Position,nEnd,RIGHT_CODE);
}
else
{
printf("%c: ",pArray[nStart]);
for(i=1;i<=n;++i)
printf("%d",pCode[i]);
printf("\n");
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?