Baixe o app para aproveitar ainda mais
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
Compartilhar