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);
}