Ir para conteúdo
Fórum Script Brasil
  • 0

utilizando árvores binárias de busca e a lista simplesmente encadeada


Rafablum

Pergunta

Ola, Pessoal.

Minha duvida é a seguinte, Me foi passado um trabalho onde teremos uma lista encadeada simples pronta e o que temos a fazer é criar uma arvore binaria e apresentar os elementos da lista de forma ordenada por código, ou nome, ou CNPJ, conforme a escolha do usuário, além de oferecer uma busca por elementos da lista com melhor desempenho.

As buscas e ordenações devem ser realizadas, exclusivamente, sobre árvores.

Sei arvores binarias e listas encadeadas, mas a questão de criar uma arvore binaria para acessar os dados de uma lista ta difícil.

Teriam como me ajudar???

Estou pesquisando alguns exemplos de códigos como minha dúvida, mas é bem difícil achar isso... Quem puder me ajudar, obrigado!!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct loja{
    int codigo;
    char nome[120];
    char cnpj[20];
    char uf[4];
    struct loja * proximo;

   
}elemento_loja;

    void monta_tabela(){
         int i=0;
         for(i=0; i<59; i++){
            printf("%c", 205);
         }     
    }

    elemento_loja * cria_elemento_lista(int codigo, char nome[], char cnpj[],char uf[]){
        elemento_loja * novo = malloc(sizeof(elemento_loja));
        novo->codigo = codigo;
        strcpy(novo->nome, nome);
        strcpy(novo->cnpj, cnpj);
        strcpy(novo->uf, uf);
        novo->proximo = NULL;
        return novo;
    }

    elemento_loja * inserir_loja_na_lista(elemento_loja * lista, elemento_loja * novo){
        elemento_loja * inicio_lista = lista;
        if (lista == NULL){
            return novo;
        }else{
            while(lista->proximo != NULL){
                lista = lista->proximo;
            }
            lista->proximo = novo;
            return inicio_lista;
        }
    }
    
    void exibe_lista_lojas(elemento_loja * lista){
        int cont = 0;
        system("cls");        
        printf("==============================================================================\n");
        printf("%-10s %-48s %-15s %-2s\n", "CODIGO","NOME","CNPJ","UF");
        printf("==============================================================================\n");
        while(lista != NULL){
            printf( "%-10d %-48s %-15s %-2s\n", lista->codigo, lista->nome, lista->cnpj, lista->uf);
            lista = lista->proximo;
            //cont++;
            //if (cont == 40){
                //system("pause");
                //cont = 0;
                //printf("==============================================================================\n");
               // printf("%-10s %-48s %-15s %-2s\n", "CODIGO","NOME","CNPJ","UF");
               // printf("==============================================================================\n");
            }
            getch();
        //}
    }

    elemento_loja * carregar_arquivo(char path[]){

        FILE * arq;
        elemento_loja * lista_de_lojas = NULL;
        elemento_loja * novo = NULL;
        int codigo;
        char nome[100];
        char cnpj[20];
        char uf[3];

        if((arq = fopen(path, "r")) == NULL){
            printf("Erro ao abrir arquivo: %s \n", path);
            return NULL;
        }

        while (fscanf(arq, "%d,%[^,],%[^,],%2s,", &codigo, nome, cnpj, uf) != EOF ){
            novo = cria_elemento_lista(codigo, nome, cnpj, uf);
            lista_de_lojas = inserir_loja_na_lista(lista_de_lojas, novo);
        }

        if(fclose(arq)){
            printf("Erro ao fechar arquivo: %s \n", path);
            return NULL;
        }

        return lista_de_lojas;
    }
    carregamento(){
        int x;
        char tecla[50];
             gotoxy(27, 9);printf("Carregando programa");
        for(x=0; x<101; x++){
            sleep(30);    
            gotoxy(35, 10); printf("%d%%", x);    
        }  
        for(x=0; x<10; x++){
            gotoxy(27, 9);printf("Carregando programa");
            sleep(50);
            gotoxy(27, 9);printf("                   ");
        sleep(50);
    }       
    }

    int main(){
       
        int op;
    do{
      char path[] = "dados_trabalho.txt";
      elemento_loja * lista_de_lojas = carregar_arquivo(path);
      carregamento(); // Simulando carregamento de programa "LOAD".
      clrscr();   
      textcolor(12);
      monta_tabela();
      printf("\n          |<<<<<<< MENU ARVORE C  >>>>>>|\n");      
      printf("          | 1 - Apresenta loja por codigo       |\n");
      printf("          | 2 - Apresenta loja por nome         |\n");
      printf("          | 3 - Apresenta loja por CNPJ         |\n");    
      printf("          | 4 - Buscar por loja                 |\n");
      printf("          | 5 - Todas lojas                     |\n");
      printf("          | 0 - Sair                            |\n");
      monta_tabela();
      printf("\nInforme a opcao desejada: ");
      scanf("%d", &op);
     
      switch(op)
     {
                                   
            case 1:                 
                              
              break;            
            case 2:                                 
               
              break;
            case 3:
                                 
              break;
            case 4:
                 
              break;
            case 5: 
              exibe_lista_lojas(lista_de_lojas);                      
              break;
          default:
                 if(op <0 || op>5){
                 printf("Escolha errada... tente novamente! \n");
                 }
                 getch();                 
     }

}while(op !=0);        
    }

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...