Пример #1
0
/* copia_no() - Funcao que copia as informacoes de um NO recebido para outro que eh retornado
	Parametros:
		NO *p - ponteiro para um NO
	Retorno:
		NO* - retorna um NO alocado dinamicamente
*/
NO *copia_no(NO *p) {
    NO *aux = NULL;
    if(p != NULL)
        aux = criar_no(criar_item(p->item->codigo, p->item->nomeSite, p->item->relevancia, p->item->link));

    return aux;
}
Пример #2
0
Файл: ed1.c Проект: pl225/AA-ED1
/**
* Funcao Criar Arvore de Huffman
* @brief Funcao que gera uma arvore de huffman inicial totalmente nula e a retorna para o usuario
* Primeiramente a funcao tenta alocar a arvore na memoria, se foi possivel aloca-la ela
*/
Huffman* criar_arvore_huffman ()
{
    Huffman* h = (Huffman*) malloc(sizeof(Huffman));
    if (h!=NULL)
    {
        h->cabeca = criar_no();
        h->caracteres = 0;
        h->tamanho = 0;
        h->tamanho_compressao_final = 0;
        int i, j;
        for (i=0; i<MAX; i++)
        {
            for (j=0; j<MAX; j++)
            {
                h->texto[i][j] = 0;
            }
        }
        for (i=0; i<TOTSIM; i++)
        {
            h->frequencia_letras[i] = 0;
        }
        return h;
    }
    return NULL;
}
Пример #3
0
void leArquivo(FILE *fp, LISTA *lista){
	int codigo, relevancia, i;
	char nomeSite[TAM], link[N];

	char carac;
	char *tok;

    fscanf(fp, "%c", &carac);
	while(!feof(fp)){
		int count = 0;
		char *arq = NULL;

		while(!feof(fp) && carac != '\n'){
			arq = (char *)realloc(arq, sizeof(char) * (count+1));
			arq[count++] = carac;
			fscanf(fp, "%c", &carac);
		}

		arq = (char *)realloc(arq, sizeof(char) * (count+1));
		arq[count] = '\0';

		tok = strtok(arq, ",");
		codigo = atoi(tok);

		tok = strtok(NULL, ",");
		strcpy(nomeSite, tok);
        nomeSite[TAM-1] = '\0';

		tok = strtok(NULL, ",");
		relevancia = atoi(tok);

		tok = strtok(NULL, ",");
		strcpy(link, tok);
		link[N-1] = '\0';

        insere_site(lista, criar_no(criar_item(codigo, nomeSite, relevancia, link)));

		tok = strtok(NULL, ",");
		while(tok != NULL){
			for(i=0; i < strlen(tok); i++){
                tok[i] = ctolower(tok[i]);
			}

			insere_chave(lista, codigo, tok);
			tok = strtok(NULL, ",");
		}
		free(arq);

		fscanf(fp, "%c", &carac);
	}
}
Пример #4
0
Файл: ed1.c Проект: pl225/AA-ED1
/**
* Funcao Montar Arvore de Huffman
* @brief Funcao gera uma arvore de huffman produzindo todos os nos da mesma
* Funcao que possui como entrada uma arvore @param h que atraves da lista encadeada que a variavel h possui monta uma arvore,
* removendo os elementos de menor frequencia no processo e unindo-os em um novo no x que representa a soma das frequencias dos nos
* de menor frequencia, informando tambem os lados que os nos removidos e retornados ao programa irao se encaixar na arvore. Portanto,
* percebe-se que essa funcao destroi a antiga lista encadeada e a remonta como a verdadeira arvore de huffman
*/
void montar_arvore_huffman (Huffman* h)
{
    while (h->tamanho>1)
    {
        No* s0 = remover_item_menor_frequencia(h);
        No* s1 = remover_item_menor_frequencia(h);
        No* x = criar_no();
        s0->lado = '0';
        s1->lado = '1';
        x->filhoesq = s0;
        x->filhodir = s1;
        x->frequencia = s0->frequencia + s1->frequencia;
        inserir_no(h, x);
    }
}
Пример #5
0
Файл: ed1.c Проект: pl225/AA-ED1
/**
* Funcao Criar Nos Folhas
* @brief Funcao que gera os nos iniciais para a montagem da arvore de huffman
* Funcao que avalia se a frequencia das letras que estao na arvore for maior que zero, se isso ocorre nos sao criados para cada
* letra e sao inseridos utilizando a funcao de inserir os nos de maneira ordenada pela frequencia (@see inserir_no)
*/
void criar_nos_folhas (Huffman* h)
{
    int i; /**< indice do for*/
    No* novo;
    for (i=0; i<TOTSIM; i++)
    {
        if (h->frequencia_letras[i]>0)
        {
            novo = criar_no();
            novo->letra = i;
            novo->frequencia = h->frequencia_letras[i];
            inserir_no(h, novo);
        }
    }
}
Пример #6
0
LISTA_LIGADA *criar_lista() {
  LISTA_LIGADA *lista = (LISTA_LIGADA *)malloc(sizeof(LISTA_LIGADA));

  if(lista != NULL) {
    lista->sentinela = criar_no(criar_item(-1,-1), NULL);
  
    printf("Debug criação de lista->sentinela\n");
    
    lista->sentinela->proximo = lista->sentinela;
    lista->fim = lista->sentinela;
    lista->tamanho = 0;
  }
  
  return lista;
}
Пример #7
0
void sugestao_site(LISTA *lista, char *chave) {
    LISTA *sugestoes = criar_lista();
    LISTA_SEQ *aux = criar_lista_seq();
    int flag = 0;

    if(lista != NULL && chave != NULL) {
        NO *p = lista->cabeca->proximo;
        //primeira busca e preenchendo a lista 'aux' com as palavras chaves de todos os resultados encontrados
        while(p != NULL) {
            if(busca_chave_seq(p->item->palavras, chave, 0, tamanho_seq(p->item->palavras)-1)) {
                transfere_seq(aux, p->item->palavras);
                flag = 1;
            }
            p = p->proximo;
        }

        //segunda busca - utilizando todas as palavras chaves
        while(!listaVazia_seq(aux)) {
            char *word = remove_fim_seq(aux);
            p = lista->cabeca->proximo;

            while(p != NULL) {
                if(busca_chave_seq(p->item->palavras, word, 0, tamanho_seq(p->item->palavras)-1)) {
                    insere_site(sugestoes, criar_no(criar_item(p->item->codigo, p->item->nomeSite, p->item->relevancia, p->item->link)));
                }
                p = p->proximo;
            }

            free(word);
        }

        //imprimindo os resultados
        if(!vazia(sugestoes) && (sugestoes!=NULL)) {
            p = sugestoes->cabeca->proximo;
            while(p != NULL) {
                imprime_site_busca(p);
                p = p->proximo;
            }
        }

        if(flag == 0) {
            printf("Nenhum resultado encontrado!\n");
        }

        liberar_lista_seq(&aux);
        apagar_lista(&sugestoes);
    }
}
Пример #8
0
int main(void){

    no_t *inicio, *cadastro; // cadastro será usado para verificar se um
                             // nome já existe com aquele cadastro
    char nome[20];
    short controle, op;

    inicio=NULL;
    cadastro=NULL;

    // Menu
    controle=1;
    while( controle) {
        printf("============== Menu ============\n");
        printf("0. Sair \n");
        printf("1. Inserir \n");
        printf("2. Mostrar Nomes\n");
        printf("3. Pesquisar por Nome \n");
        printf("4. Remover por Nome \n");
        printf("Opção: ");

        __fpurge(stdin);
        scanf("%hd", &op);

        switch(op){

            case 0: // Sair 
                controle = 0;
                break;

            case 1: // Inserir 

                inserir(&inicio, criar_no()); 
                continuar(&controle);
                system("clear");

                break;

            case 2: // Mostrar 
                if( inicio == NULL ){
                    printf("A lista está vazia.\n");
                    continuar(&controle);
                }
                
                else{
                    mostrar_lista(inicio);
                    continuar(&controle);
                }

                break;

            case 3: // Pesquisar 
                if( inicio == NULL ){
                    printf("A lista está vazia.\n");
                    continuar(&controle);
                }
                else{

                        printf("\nNome: ");
                        __fpurge(stdin);
                        fgets(nome,20,stdin);
                        nome[0] = toupper(nome[0]);

                        // procura se o nome já foi cadastrado
                        cadastro = pesquisar(inicio,nome);

                        if( cadastro == NULL ){
                            printf("Nome não cadastrado.\n");
                            continuar(&controle);
                        }
                        else{
                            // Mostrar dados
                            printf("Rua: %sNumero: %s", cadastro->rua, cadastro->numero);
                            printf("Cidade: %sEstado: %s", cadastro->cidade, cadastro->estado);
                            continuar(&controle);
                        }
                    }

                break;

            case 4: // Remover 
                if( inicio == NULL ){
                    printf("A lista está vazia.\n");
                    continuar(&controle);
                }
                else{
                    printf("Nome: ");
                    __fpurge(stdin); // limpa o buffer do teclado
                    fgets(nome,20,stdin);
                    nome[0]=toupper(nome[0]); 

                    if( remover(&inicio, nome) == true){
                        printf("Removido.\n");
                    }
                    else{
                        printf("Não está na lista.\n");
                    }
                    continuar(&controle);
                }
                break;

            default:
                printf("Erro, opção inválida.\n");
                __fpurge(stdin);
                continuar(&controle);
                break;

        }// end switch
    }// end while

	return 0;

}
Пример #9
0
int main(int argc, char const *argv[])
{
    FILE *fp = fopen("googlebot.txt", "r");
    LISTA *lista = criar_lista();
    int oper, codigo, relevancia, i;
    char *palavra, *nomeSite, *link;

    leArquivo(fp, lista);

    fclose(fp);

	if(fp != NULL){
        do{
            printf("1 - Inserir site\n2 - Inserir palavra chave\n3 - Remover um site\n4 - Atualizar relevancia\n");
            printf("5 - Mostrar lista\n6 - Busca por palavra chave\n7 - Sugestoes de sites\n8 - Sair\n\n");
            scanf("%d", &oper);
            switch(oper){
                case 1:
                //Inserir um novo site na lista
                    do{
                        printf("Codigo: ");
                        scanf("%d", &codigo);
                        if(codigo < 0 || codigo > 9999)
                            printf("Codigo invalido. Digite um valor entre 0 e 9999\n");
                    }while(codigo < 0 || codigo > 9999);

                    getchar();
                    printf("Nome Site: ");
                    nomeSite = lerString();
                    if(strlen(nomeSite) > TAM-1)
                        nomeSite[TAM-1] = '\0';

                    do{
                        printf("Relevancia: ");
                        scanf("%d", &relevancia);
                        if(relevancia < 0 || relevancia > 1000)
                            printf("Relevancia invalido. Digite um valor entre 0 e 1000\n");
                    }while(relevancia < 0 || relevancia > 1000);

                    getchar();
                    printf("Link: ");
                    link = lerString();
                    if(strlen(link) > N-1)
                        link[N-1] = '\0';

                    if(!insere_site( lista, criar_no(criar_item(codigo, nomeSite, relevancia, link)))){
                        printf("Erro ao inserir site!\n");
                    }

                    free(link);
                    free(nomeSite);
                    break;
                case 2:
                //Inserir palavra chave
                    do{
                        printf("Codigo: ");
                        scanf("%d", &codigo);
                        if(codigo < 0 || codigo > 9999)
                            printf("Codigo invalido. Digite um valor entre 0 e 9999\n");
                    }while(codigo < 0 || codigo > 9999);

                    getchar();
                    printf("Palavra chave: ");
                    palavra = lerString();
                    if(strlen(palavra) > TAM-1)
                        palavra[TAM-1] = '\0';

                    for(i=0; i < strlen(palavra); i++){
                        palavra[i] = ctolower(palavra[i]);
                    }

                    if(!insere_chave(lista, codigo, palavra)){
                        printf("Erro ao inserir palavra chave!\n");
                    }
                    free(palavra);
                    break;
                case 3:
                //Remover um site
                    do{
                        printf("Codigo: ");
                        scanf("%d", &codigo);
                        if(codigo < 0 || codigo > 9999)
                            printf("Codigo invalido. Digite um valor entre 0 e 9999\n");
                    }while(codigo < 0 || codigo > 9999);

                    if(!remove_site(lista, codigo)){
                        printf("Erro ao remover site!\n");
                    }
                    break;
                case 4:
                //Atualizar relevancia
                    do{
                        printf("Codigo: ");
                        scanf("%d", &codigo);
                        if(codigo < 0 || codigo > 9999)
                            printf("Codigo invalido. Digite um valor entre 0 e 9999\n");
                    }while(codigo < 0 || codigo > 9999);

                    do{
                        printf("Relevancia: ");
                        scanf("%d", &relevancia);
                        if(relevancia < 0 || relevancia > 1000)
                            printf("Relevancia invalido. Digite um valor entre 0 e 1000\n");
                    }while(relevancia < 0 || relevancia > 1000);

                    atualiza_relevancia(lista, codigo, relevancia);
                    break;
                case 5:
                //Mostrar a lista
                    imprime_lista(lista);
                    break;
                case 6:
                //Busca por palavra chave
                    getchar();
                    printf("Palavra chave: ");
                    palavra = lerString();
                    if(strlen(palavra) > TAM-1)
                        palavra[TAM-1] = '\0';

                    for(i=0; i < strlen(palavra); i++){
                        palavra[i] = ctolower(palavra[i]);
                    }

                    busca_palavra(lista, palavra);
                    free(palavra);
                    break;
                case 7:
                //Sugestao do site
                    getchar();
                    printf("Palavra chave: ");
                    palavra = lerString();
                    if(strlen(palavra) > TAM-1)
                        palavra[TAM-1] = '\0';

                    for(i=0; i < strlen(palavra); i++){
                        palavra[i] = ctolower(palavra[i]);
                    }

                    sugestao_site(lista, palavra);
                    free(palavra);
                    break;
                default: break;
            }
        }while(oper != 8);

        finaliza_lista(&lista);
	} else {
    	printf("Could not open googlebot.txt\n");
    }

	return 0;
}