什么是 唯一可译码
答案:2 悬赏:40 手机版
解决时间 2021-03-09 05:16
- 提问者网友:遁入空寂
- 2021-03-08 23:50
什么是 唯一可译码
最佳答案
- 五星知识达人网友:行路难
- 2021-03-09 00:49
将码所有可能的未遂后缀组成一个集合,当且仅当集合中没有包含任意码字时,码为唯一可译码。
程序代码:
#include
#include
#include
struct strings
{
char *string;
struct strings *next;
};
struct strings Fstr, *Fh, *FP;
void outputstr(strings *str)
{
do
{
cout<string< str = str->next;
}while(str);
cout< }
inline int MIN(int a, int b)
{ return a>b?b:a; }
inline int MAX(int a, int b)
{ return a>b?a:b; }
#define length_a (strlen(CP))
#define length_b (strlen(tempPtr))
//判断一个码是否在一个码集合中,在则返回0,不在返回1
int comparing(strings *st_string,char *code)
{
while(st_string->next)
{
st_string=st_string->next;
if(!strcmp(st_string->string,code))
return 0;
}
return 1;
}
//判断两个码字是否一个是另一个的前缀,如果是则生成后缀码
void houzhui(char *CP,char *tempPtr)
{
if (!strcmp(CP,tempPtr))
{
cout<<"集合C和集合F中有相同码字:"< < <<"不是唯一可译码码组!"< exit(1);
}
if (!strncmp(CP, tempPtr, MIN(length_a,length_b)))
{
struct strings *cp_temp;
cp_temp=new (struct strings);
cp_temp->next=NULL;
cp_temp->string=new char[abs(length_a-length_b)+1];
char *longstr;
longstr=(length_a>length_b ? CP : tempPtr);//将长度长的码赋给longstr
//取出后缀
for (int k=MIN(length_a,length_b); k cp_temp->string[k - MIN(length_a,length_b)]=longstr[k];
cp_temp->string[abs(length_a-length_b)]=NULL;
//判断新生成的后缀码是否已在集合F里,不在则加入F集合
if(comparing(Fh,cp_temp->string))
{
FP->next=cp_temp;
FP=FP->next;
}
}
}
void main()
{
cout<<"\t\t唯一可译码的判断!\n"< struct strings Cstr, *Ch, *CP,*tempPtr;
Ch=&Cstr;
CP=Ch;
Fh=&Fstr;
FP=Fh;
char c[]="C :";
Ch->string=new char[strlen(c)];
strcpy(Ch->string, c);
Ch->next=NULL;
char f[]="F :";
Fh->string=new char[strlen(f)];
strcpy(Fh->string, f);
Fh->next=NULL;
//输入待检测码的个数
int Cnum;
cout<<"输入待检测码的个数:";
cin>>Cnum;
cout<<"输入待检测码"< for(int i=0; i {
cout< char tempstr[10];
cin>>tempstr;
CP->next=new (struct strings);
CP=CP->next;
CP->string=new char[strlen(tempstr)] ;
strcpy(CP->string, tempstr);
CP->next = NULL;
}
outputstr(Ch);
CP=Ch;
while(CP->next->next)
{
CP=CP->next;
tempPtr=CP;
do
{
tempPtr=tempPtr->next;
houzhui(CP->string,tempPtr->string);
}while(tempPtr->next);
}
outputstr(Fh);
struct strings *Fbegin,*Fend;
Fend=Fh;
while(1)
{
if(Fend == FP)
{
cout<<"是唯一可译码码组!"< exit(1);
}
Fbegin=Fend;
Fend=FP;
CP=Ch;
while(CP->next)
{
CP=CP->next;
tempPtr=Fbegin;
for(;;)
{
tempPtr=tempPtr->next;
houzhui(CP->string,tempPtr->string);
if(tempPtr == Fend)
break;
}
}
outputstr(Fh);//输出F集合中全部元素
}
}
程序代码:
#include
#include
#include
struct strings
{
char *string;
struct strings *next;
};
struct strings Fstr, *Fh, *FP;
void outputstr(strings *str)
{
do
{
cout<
}while(str);
cout<
inline int MIN(int a, int b)
{ return a>b?b:a; }
inline int MAX(int a, int b)
{ return a>b?a:b; }
#define length_a (strlen(CP))
#define length_b (strlen(tempPtr))
//判断一个码是否在一个码集合中,在则返回0,不在返回1
int comparing(strings *st_string,char *code)
{
while(st_string->next)
{
st_string=st_string->next;
if(!strcmp(st_string->string,code))
return 0;
}
return 1;
}
//判断两个码字是否一个是另一个的前缀,如果是则生成后缀码
void houzhui(char *CP,char *tempPtr)
{
if (!strcmp(CP,tempPtr))
{
cout<<"集合C和集合F中有相同码字:"<
}
if (!strncmp(CP, tempPtr, MIN(length_a,length_b)))
{
struct strings *cp_temp;
cp_temp=new (struct strings);
cp_temp->next=NULL;
cp_temp->string=new char[abs(length_a-length_b)+1];
char *longstr;
longstr=(length_a>length_b ? CP : tempPtr);//将长度长的码赋给longstr
//取出后缀
for (int k=MIN(length_a,length_b); k
cp_temp->string[abs(length_a-length_b)]=NULL;
//判断新生成的后缀码是否已在集合F里,不在则加入F集合
if(comparing(Fh,cp_temp->string))
{
FP->next=cp_temp;
FP=FP->next;
}
}
}
void main()
{
cout<<"\t\t唯一可译码的判断!\n"<
Ch=&Cstr;
CP=Ch;
Fh=&Fstr;
FP=Fh;
char c[]="C :";
Ch->string=new char[strlen(c)];
strcpy(Ch->string, c);
Ch->next=NULL;
char f[]="F :";
Fh->string=new char[strlen(f)];
strcpy(Fh->string, f);
Fh->next=NULL;
//输入待检测码的个数
int Cnum;
cout<<"输入待检测码的个数:";
cin>>Cnum;
cout<<"输入待检测码"<
cout< char tempstr[10];
cin>>tempstr;
CP->next=new (struct strings);
CP=CP->next;
CP->string=new char[strlen(tempstr)] ;
strcpy(CP->string, tempstr);
CP->next = NULL;
}
outputstr(Ch);
CP=Ch;
while(CP->next->next)
{
CP=CP->next;
tempPtr=CP;
do
{
tempPtr=tempPtr->next;
houzhui(CP->string,tempPtr->string);
}while(tempPtr->next);
}
outputstr(Fh);
struct strings *Fbegin,*Fend;
Fend=Fh;
while(1)
{
if(Fend == FP)
{
cout<<"是唯一可译码码组!"<
}
Fbegin=Fend;
Fend=FP;
CP=Ch;
while(CP->next)
{
CP=CP->next;
tempPtr=Fbegin;
for(;;)
{
tempPtr=tempPtr->next;
houzhui(CP->string,tempPtr->string);
if(tempPtr == Fend)
break;
}
}
outputstr(Fh);//输出F集合中全部元素
}
}
全部回答
- 1楼网友:低音帝王
- 2021-03-09 02:17
有电脑还有电机啊。。32题微处理器地址分配的方法通常有两种:线选法和译码法.线选法所谓线选法, 就是直接以系统的地址线作为存储器芯片的片选信号, 为此只需把用到的地址线与存储器芯片的片选端直接相连即可.译码法又分全译码法和部分译码法全译码法全译码法是指将地址总线中除片内地址以外的全部高位地址接到译码器的输入端参与译码.采用全译码法,每个存储单元的地址都是唯一的,不存在地址重叠,但译码电路较复杂,连线也较多.全译码法可以提供对全部存储空间的寻址能力.当存储器容量小于可寻址的存储空间时,可从译码器输出线中选出连续的几根作为片选控制,多余的令其空闲,以便需要时扩充. 部分译码法部分译码法是将高位地址线中的一部分(而不是全部)进行译码,产生片选信号.该方法常用于不需要全部地址空间的寻址能力,但采用线选法地址线又不够用的情况.采用部分译码法时,由于未参加译码的高位地址与存储器地址无关,因此存在地址重叠问题.当选用不同的高位地址线进行部分译码时,其译码对应的地址空间不同.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯