#include#include#includestructstrings{char*string;structstrings*next;};structstringsFstr,*Fh,*FP;//输出当前集合voidoutputstr(strings*str){do{cout<string<next;}while(str);cout<b?b:a;}inlineintMAX(inta,intb){returna>b?a:b;}#definelength_a(strlen(CP))#definelength_b(strlen(tempPtr))//判断一个码是否在一个码集合中,在则返回0,不在返回1intcomparing(strings*st_string,char*code){while(st_string->next){st_string=st_string->next;if(!strcmp(st_string->string,code))return0;}return1;}//判断两个码字是否一个是另一个的前缀,如果是则生成后缀码voidhouzhui(char*CP,char*tempPtr){if(!strcmp(CP,tempPtr)){cout<<"集合C和集合F中有相同码字:"<next=NULL;cp_temp->string=newchar[abs(length_a-length_b)+1];char*longstr;longstr=(length_a>length_b?CP:tempPtr);//将长度长的码赋给longstr//取出后缀for(intk=MIN(length_a,length_b);kstring[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;}}}voidmain(){//功能提示和程序初始化准备cout<<"\t\t唯一可译码的判断!\n"<string=newchar[strlen(c)];strcpy(Ch->string,c);Ch->next=NULL;charf[]="F:";Fh->string=newchar[strlen(f)];strcpy(Fh->string,f);Fh->next=NULL;//输入待检测码的个数intCnum;cout<<"输入待检测码的个数:";cin>>Cnum;cout<<"输入待检测码"<>tempstr;CP->next=new(structstrings);CP=CP->next;CP->string=newchar[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);structstrings*Fbegin,*Fend;Fend=Fh;while(1){if(Fend==FP){cout<<"是唯一可译码码组!"<next){CP=CP->next;tempPtr=Fbegin;for(;;){tempPtr=tempPtr->next;houzhui(CP->string,tempPtr->string);if(tempPtr==Fend)break;}}outputstr(Fh);//输出F集合中全部元素}}3.2.1分析结果