Faculdade Osman Costa Lins
Departamento de Sistema de Informação Disciplina de Estrutura de Dados II
Rio 3D Cisne Negro Harry Potter
Rio 3D Harry Potter Cisne Negro
Harry Potter Rio 3D Cisne Negro
Projeto
A FACOL resolveu criar um site de busca e contratou uma equipe super capacitada para desenvolver esse novo projeto: a turma de EDII! Para tal vocês irão desenvolver todo o módulo básico de ordenação de bussca, ranking e impressão de palavras pesquisadas que ajudará os funcionários a obterem de forma rápida e simples os assuntos mais procurados no site da FACOL.
Site de Busca
O site de busca armazena todas as expressões procuradas em uma lista duplamente encadeada. Os nós dessa lista são do tipo Expressao, definido como o tipo estruturado expressao descrito a seguir:
struct expressao{
char descricao[81];
struct expressao *prox, *ant;
};
typedef struct expressao Expressao;
A referida lista é mantida ordenada por uma função que determina o ranking de consultas das expressões da forma descrita a seguir.
Cada vez que uma expressão é consultada, se ela não consta da lista ela é acrescentada ao final da lista. Por outro lado, se ela é encontrada, ela deve “ganhar uma posição” na lista, ou seja, deve trocar de posição com o nó imediatamente a sua frente. A função retorna a posição final do nó que contém a expressão.
Por exemplo, considerando a figura acima, uma consulta à expressão “iPhone 3G” causaria a alocação dinâmica de uma nova variável Expressao, que teria o campo descricao preenchido com a expressão procurada. Esta variável seria inserida no final da lista.
Além disso implemente as funções :
a. Escreva, em C, a função Ranking. Ela deve receber como parâmetros a lista duplamente encadeada ld e a expressão exp, que é um ponteiro para a cadeia de caracteres que se deseja buscar. O retorno desta função deve ser um inteiro com o número do ranking da expressão. Se ela for o primeiro elemento da lista deve retornar o ranking 1, se for a segunda palavra mais procurada deve retornar o ranking 2. A função tem o seguinte protótipo:
int Ranking(Expressao** ld, char* exp);
b. Escreva também uma função em C que imprime, na ordem, a lista de expressões. Ela deve receber como parâmetros ld, o ponteiro para o primeiro nó da lista. A função tem o seguinte protótipo:
void Imprime(Expressao** ld);
Por exemplo, uma consulta à expressão “Harry Potter” causaria a troca de posição entre o segundo e o terceiro nó da lista (Figura 1). Uma nova consulta à expressão “Harry Potter” causaria a troca de posição entre o segundo e o primeiro nó (Figura 2) da lista (o que exigiria a atualização do valor do ponteiro da lista).