Enviado em 08/11/2012 - 07:01h
Caros colegas, preciso fazer um algoritmo (inicialmente de forma simples) que identifique sequencias iguais de palavras dados 2 textos. Esses textos devem ser carregados para listas duplamente encadeadas, depois comparadas e devo manter apenas a maior sequencia encontrada numa outra lista.
struct TipoCelula{
char Palavra[101];
TipoCelula *Esq, *Dir;
};
bool Lista_Inserir_Inicio(char *Elemento, int numLista){
TipoCelula *Novo; int i=0,tamanho;
if((Novo = (TipoCelula *) malloc(sizeof(TipoCelula)))==NULL){
return false;
}
else{
strcat(Elemento,"{TTEXTO}");
while(Elemento[i]!='{TTEXTO}'){
Novo->Palavra[i]=Elemento[i];
i++;
}
Novo->Dir = Frente[numLista];
Novo->Esq = NULL;
if(Lista_Vazia(numLista))
Tras[numLista]= Novo;
else
Frente[numLista]->Esq = Novo;
Frente[numLista]= Novo;
Contador[numLista]++;
return true;
}
}
bool Lista_Inserir_Fim(char *Elemento, int numLista){
TipoCelula *Novo; int i=0;
if((Novo = (TipoCelula *) malloc(sizeof(TipoCelula)))==NULL){
return false;
}
else{
strcat(Elemento,"{TTEXTO}");
while(Elemento[i]!='{TTEXTO}'){
Novo->Palavra[i]=Elemento[i];
i++;
}
Novo->Dir = NULL;
Novo->Esq = Tras[numLista];
if(Lista_Vazia(numLista))
Frente[numLista]= Novo;
else Tras[numLista]->Dir = Novo;
Tras[numLista]= Novo;
Contador[numLista]++;
return true;
}
}
while(!feof(arq1)){
função
fscanf(arq1,"%s",str);
if(k==0){
Lista_Inserir_Inicio(str,0);
k++;//isso garante com que esse if seja executado apenas na primeira iteração do programa
}
else
Lista_Inserir_Fim(str,0);
}
fclose(arq1);