Buscar

LAB 9 ArvoreB

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10
// ----------------- >>> definição do tipo modoCaminhamento
typedef enum {preordem, emordem, posordem} modoencaminhamento;
typedef struct no
{
 char cep[9];
 char uf[3];
 char cidade[31];
 char logradouro[61];
 struct no *esq;
 struct no *dir;
} noCEP; //estrutura dos nos
noCEP *arvBinaria;
int cont = 0;
int quant;
void imprimeNoCep(noCEP *x)
{
 if(x!=NULL)
 {
 printf("%s >> CEP\n", x->cep);
 printf("%s >> UF\n",x->uf);
 printf("%s >> CIDADE\n",x->cidade);
 printf("5s >> LOGRADOURO\n\n",x->logradouro);
 }
}
void inserirNoArvoreBinaria(FILE *arq)
{
 char linha[200];
 char *substring;
 int i;
 noCEP *ant = NULL;
 noCEP *atual = arvBinaria;
 noCEP *novo;
 //aloca o novo na memoria
 novo = (noCEP *) malloc(sizeof(noCEP));
 //le a linha completa e preenche os dados no novo cep
 fgets(linha, 200, arq);
 //separa os tokens pelo delimitador \t
 substring = strtok(linha, "\t");
 //obtem o cep
 if(substring != NULL)
 {
 strcpy(novo->cep, substring);
 }
 substring = strtok(NULL, "\t");
 //obtem a uf
 if(substring != NULL)
 strcpy(novo->uf, substring);
 substring = strtok(NULL, "\t");
 //obtem a cidade
 if(substring != NULL)
 strcpy(novo->cidade, substring);
 substring = strtok(NULL, "\t");
 //obtem o logradouro
 if(substring != NULL)
 strcpy(novo->logradouro, substring);
 //incializa com null os ponteiros esq e dir de novo
 novo->esq = NULL;
 novo->dir = NULL;
 printf("\nLido os dados de um cep: \n");
 imprimeNoCep(novo);
 //----------------- >>> COMPLETE!
 //----------------- >>> codigo para insercao na arvore
 while((atual!=NULL) && (novo->cep!=atual->cep))
 {
 ant=atual;
 if(novo->cep < atual->cep)
 {
 atual = atual->esq;
 }
 else
 {
 atual= atual->dir;
 }
 }
 if(ant==NULL)
 {
 arvBinaria = novo;
 }
 else
 {
 if(atual==NULL)
 {
 if(novo->cep < ant->cep)
 {
 ant->esq=novo;
 }
 else
 {
 ant->dir = novo;
 }
 }
 }
}
//end inserirNoArvoreBinaria
//----------------- >>> codigo das funcoes imprimeNoCEP, imprimePreOrdemArvBB,
//----------------- >>> imprimeEmOrdemArvBB, imprimePosOrdemArvBB e
//----------------- >>> buscarArvoreBinaria
//função principal:
//já está TODA IMPLEMENTADA
void imprimePreOrdem(noCEP *y)//preordem
{
 if(cont< 10)
 {
 imprimeNoCep(y);
 cont++;
 imprimePreOrdem(y->esq);
 imprimePreOrdem(y->dir);
 }
}
void imprimeEmOrdem(noCEP *y)//Emordem
{
 if(cont< 10)
 {
 imprimeEmOrdem(y->esq);
 imprimeNoCep(y);
 cont++;
 imprimeEmOrdem(y->dir);
 }
}
void imprimePosOrdem(noCEP *y)//preordem
{
 if(cont< 10)
 {
 imprimePosOrdem(y->esq);
 imprimePosOrdem(y->dir);
 imprimeNoCep(y);
 cont++;
 }
}
void buscarArvoreBinaria(noCEP *n, char cepp[] )
{
 if (n!=NULL)
 {
 if(cepp == n->cep)
 {
 imprimeNoCep(n);
 }
 else
 {
 if(cepp < n->cep)
 {
 buscarArvoreBinaria(n->esq,cepp);
 }
 else
 {
 buscarArvoreBinaria(n->dir, cepp);
 }
 }
 }
 else
 {
 printf(">>>> Não encontrado!\n\n");
 }
}
int main(int argc, char *argv[])
{
 FILE *arq;
 int opcaoMenu;
 char cepProcurado[9];
 noCEP *cepEncontrado;
 //inicializa a arvore
 arvBinaria = NULL;
 //o arquivo eh lido e inserido os elementos na arvore
 arq = fopen("baseCep.txt", "r");
 if(!arq)
 {
 printf("O arquivo nao pode ser aberto.\n");
 exit(1);
 }//end if(!arq)
 printf("\nInserindo elementos na arvore... \n");
 while(!feof(arq))
 {
 //para cada linha do arquivo pe chamada
 //a funcao de insercao na arvore binaria
 inserirNoArvoreBinaria(arq);
 }//end while(!feof(arq))
 fclose(arq);
 //menu para caminhamento na arvore de ceps
 opcaoMenu = 1;
 while(opcaoMenu != 4)
 {
 quant = 0;
 printf("|Selecione uma das opcoes do menu: |\n");
 printf("|1 - Pre-ordem |\n");
 printf("|2 - Em-ordem |\n");
 printf("|3 - Pos-ordem |\n");
 printf("|4 - Sair |\n\n");
 printf(">");
 scanf("%d", &opcaoMenu);
 switch(opcaoMenu)
 {
 case 1:
 printf("Imprime em pre-ordem: \n");
 imprimePreOrdem(arvBinaria);
 printf("\n");
 break;
 case 2:
 printf("Imprime em in-ordem: \n");
 imprimeEmOrdem(arvBinaria);
 printf("\n");
 break;
 case 3:
 printf("Imprime em pos-ordem: \n");
 imprimePosOrdem(arvBinaria);
 printf("\n");
 break;
 case 4:
 printf("Saindo do menu impressoes: ");
 break;
 }//end switch
 }//end while(opcaoMenu != 4)
 // chamada à busca por um cep
 printf("\n>>> Busca por um cep: \n");
 printf(">> Digite um cep: ");
 scanf("%s", cepProcurado);
 buscarArvoreBinaria(arvBinaria,cepProcurado);
 printf("Encerrando o programa...\n");
 free(arvBinaria);
 system("PAUSE");
 return 0;
}//end main

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais