C++ 哈弗曼编码 运行出错CXX0030: Error: expression cannot be evaluated

raosuper 2008-11-27 11:03:48
include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct TreeNode
{
struct TreeNode *lchild;
int element,turn;
char element0;
struct TreeNode *rchild;
struct TreeNode *parent;
struct TreeNode *next;
}Node;


Node *Min(Node *p)/*找出一个链表中的最小元素,将其删除并返回其指针*/
{
Node *min,*q,*pause;
q=p->next;/*指向第一个结点*/
min=q;
for(;q->next!=NULL;)
{
pause=q;
q=q->next;
if((min->element)>(q->element))
min=q;
}/*已找到最小结点,下一步将其删去*/
if(min==p->next)
(p->next)=(min->next);
else (pause->next)=(min->next);
return min;
}

Node *Root(Node *min1,Node *min2)/*生成新树*/
{
Node *root;
root=(Node *)malloc(sizeof(Node));
root->lchild=min1;
root->rchild=min2;
min1->parent=root;
min2->parent=root;
root->element=(min1->element)+(min2->element);
root->next=NULL;
return root;
}
Node *Last(Node *s)/*找到最后一个元素*/
{
Node *last;
last=s->next;
for(;last->next!=NULL;)
{
last=last->next;
}
return last;
}

int *PushAll(Node *Address,int *si)/*传叶节点地址和栈底,将该叶节点及其所有父亲的标志位压入堆栈,并返回此时SI指针*/
{
for(;Address!=NULL;Address=Address->parent)
{
si++;
*si=Address->turn;
}
return si;
}
void yima(int *s,Node *HNode,int mm)/*译码,传哈夫曼码数组的头地址,最优二叉树的head,编码长度m*/
{
int t,tt=1/*控制每mm个一行*/;
Node *pp;
pp=HNode->next;
for(t=0;*s!='c';t++)
{
if(*s==0)
pp=pp->lchild;
else pp=pp->rchild;
if((pp->lchild==NULL)&&(pp->rchild==NULL))
{
printf("%c\t",pp->element0);
tt++;
if(tt%mm==0)
printf("\n");
pp=HNode->next;
}
}
if((pp->lchild!=NULL)&&(pp->rchild!=NULL))
{
for(;(pp->lchild!=NULL)&&(pp->rchild!=NULL);pp=pp->lchild)

printf("%c\t",pp->element0);
}
}
void main()
{
Node *head,*Treenode,*TreenodeA[10]/*存各叶节点的地址*/,*MIN1,*MIN2,*ROOT,*LAST;
int i,j,k,num/*编码字符集大小*/,m/*字符编码长度*/,n[10]/*计字符出现个数*/,*SI,*sp,Code[10][10]/*存最后的哈弗曼码*/,huf[1000];
char a[10]/*存各字符*/,A[100][100]/*存生成的所有随机字符序列*/;
sp=(int *)malloc(10*sizeof(int));
for(i=0;i <=9;i++)
{
n[i]=0;
}
printf("请输入编码字符集大小(n <10)\n");
scanf("%d",&num);
printf("请输入字符编码长度\n");
scanf("%d",&m);
printf("请输入编码字符\n");
for(i=0;i <num;i++)
{
a[i]=getchar();
}
srand(time(0));/*生成随机字符序列*/
for(i=0;i <=99;i++)
{
for(j=0;j <m;j++)
{
k=rand()%(num-1);
switch(k)
{
case 0:{
A[i][j]=a[0];
n[0]++;
}
break;
case 1:{
A[i][j]=a[1];
n[1]++;
}
break;
case 2:
{
A[i][j]=a[2];
n[2]++;
}
break;
case 3:
{
A[i][j]=a[3];
n[3]++;
}
break;
case 4:
{
A[i][j]=a[4];
n[4]++;
}
break;
case 5:
{
A[i][j]=a[5];
n[5]++;
}
break;
case 6:
{
A[i][j]=a[6];
n[1]++;
}
break;
case 7:
{
A[i][j]=a[7];
n[7]++;
}
break;
case 8:
{
A[i][j]=a[8];
n[8]++;
}
break;
case 9:
{
A[i][j]=a[9];
n[9]++;
}
break;
}/*end of switch*/
}
}/*生成字符序列完毕*/
head=(Node*)malloc(sizeof(Node));/*生成字符大小的树*/
head->next=TreenodeA[0]=Treenode=(Node*)malloc(sizeof(Node));
Treenode->element=n[0];
Treenode->element0=a[0];
Treenode=NULL;
for(i=1;i <num;i++)
{
Treenode->next=(Node*)malloc(sizeof(Node)); // lchild CXX0030: Error: expression cannot be evaluated[/color]
TreenodeA[i]=Treenode=Treenode->next; //....
Treenode->element=n[i]; //...
Treenode->element0=n[i]; //...
Treenode->next=NULL; // ...
Treenode->parent=NULL; // CXX0030: Error: expression cannot be evaluated

}
for(;head->next->next!=NULL;)/*生成最优二叉树*/
{
MIN1=Min(head);
MIN1->turn=0;
MIN2=Min(head);
MIN2->turn=1;
ROOT=Root(MIN1,MIN2);
LAST=Last(head);
if(LAST=NULL)
head->next=ROOT;
else
LAST->next=ROOT;
}

for(k=0;num;k++)/*第零个元素记录哈弗曼码长,初始为0*/
Code[k][0]=0;
for(k=0;k <num;k++)/*将哈弗曼码存入数组Code[k][i]*/
{
SI=PushAll(TreenodeA[k],sp);
for(i=1;SI!=sp;SI--)
{
Code[k][i]=*SI;
Code[k][0]++;
}
}


for(i=0;i <num;i++)/*输出哈弗曼码*/
{
printf("%c的哈弗曼码为:",a[i]);
for(j=1;j <=Code[i][0];j++)
printf("%d",Code[i][j]);
printf("\n");
}
printf("请输入哈弗曼码,以字母c结束\n");/*译码*/
for(i=0,huf[0]=0;huf[i]!='c';i++)
scanf("%d",&huf[i]);
yima(huf,head,m);
}
...全文
357 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
suiyuan1767 2011-09-13
  • 打赏
  • 举报
回复
什么情况
一码超神 2011-05-18
  • 打赏
  • 举报
回复
?????解决ok了?!
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧