ATIVIDADES PRÁTICAS SUPERVISIONADAS - Classificação e Pesquisa
Por: Jeanslp • 27/9/2015 • Trabalho acadêmico • 5.770 Palavras (24 Páginas) • 307 Visualizações
FACULDADE ANHANGUERA DE TAUBATÉ – UNIDADE II
ATIVIDADES PRÁTICAS SUPERVISIONADAS
Classificação e Pesquisa
2º Bimestre / 2015
Curso: Ciência da Computação
Semestre: 4º e 5º - Turma A – Ano: 2015
Nome | RA |
Taubaté
17 de Junho de 2015
Etapa 3.
Relatório 3 – Árvores Binárias de Pesquisa.
Código Fonte:
#include
#include
typedef struct No {
char rua[30];
char residencia[30];
int medidor;
struct No *esquerda;
struct No *direita;
} No;
void iniciarArvore(No **Raiz) {
*Raiz = NULL; }
void inserir(No **pRaiz, char r[30], int med, char res[30]) {
if(*pRaiz == NULL) {
*pRaiz = (No *) malloc(sizeof(No));
(*pRaiz)->esquerda = NULL;
(*pRaiz)->direita = NULL;
strcpy((*pRaiz)->rua, r);
strcpy((*pRaiz)->residencia, res);
(*pRaiz)->medidor = med; }
else {
if(med < (*pRaiz)->medidor)
inserir(&(*pRaiz)->esquerda, r, med, res);
if(med > (*pRaiz)->medidor)
inserir(&(*pRaiz)->direita, r, med, res); } }
No *remover(No *r, int v) {
if (r == NULL)
return NULL;
else if (r->medidor > v)
r->esquerda = remover(r->esquerda, v);
else if (r->medidor < v)
r->direita = remover(r->direita, v);
else {
if (r->esquerda == NULL && r->direita == NULL) {
free (r);
r = NULL; }
else if (r->esquerda == NULL) {
No* t = r;
r = r->direita;
free (t); } }
return 0; }
void EmOrdem(No *pRaiz) {
if(pRaiz != NULL) {
EmOrdem(pRaiz->esquerda);
printf("\nMedidor.....:%d\n", pRaiz->medidor);
printf("Rua.........:%s\n", pRaiz->rua);
printf("Residencia..:%s\n", pRaiz->residencia);
EmOrdem(pRaiz->direita); }}
void PreOrdem(No *pRaiz) {
if(pRaiz != NULL) {
printf("\nMedidor.....:%d\n", pRaiz->medidor);
printf("Rua.........:%s\n", pRaiz->rua);
printf("Residencia..:%s\n", pRaiz->residencia);
PreOrdem(pRaiz->esquerda);
PreOrdem(pRaiz->direita);} }
void PosOrdem(No *pRaiz) {
if(pRaiz != NULL) {
PosOrdem(pRaiz->esquerda);
PosOrdem(pRaiz->direita);
printf("\nMedidor.....:%d\n", pRaiz->medidor);
printf("Rua.........:%s\n", pRaiz->rua);
printf("Residencia..:%s\n", pRaiz->residencia); } }
No *arvorebusca(No *pRaiz,int med) {
while (pRaiz != NULL && pRaiz->medidor != med) {
if (pRaiz->medidor > med)
pRaiz = pRaiz->esquerda;
else
pRaiz = pRaiz->direita; }
return pRaiz; }
int main(int argc, char *argv[]) {
char rua[30],res[30];
int op, med, es, busca;
No *arvore;
No *aux;
iniciarArvore(&arvore);
while (op!=5) {
system("title Cadastro de Residencias");
printf("\n-----------------------\n");
printf("Cadastro de residencias\n");
printf("-----------------------\n\n");
printf("1.Inserir um novo cadastro\n");
printf("2.Consultar os cadastros\n");
printf("3.Buscar nos cadastros\n");
printf("4.Remover um cadastro\n");
printf("5.Sair\n\n");
printf("Escolha uma das opcoes: ");
scanf("%d",&op);
switch(op) {
case 1:
fflush(stdin);
printf("\nDigite a rua da residencia: ");
gets(rua);
fflush(stdin);
printf("Digite o numero da residencia: ");
gets(res);
printf("Digite o medidor de consumo: ");
scanf("%d",&med);
inserir(&arvore, rua, med, res);
break;
case 2:
printf("\n1 - Pre-Ordem \n");
printf("2 - Em Ordem \n");
printf("3 - Pos Ordem \n");
printf("\nEscolha a forma de exibicao: ");
scanf("%d",&es);
switch (es) {
case 1:
PreOrdem(arvore);
break;
case 2:
EmOrdem(arvore);
break;
case 3:
PosOrdem(arvore);
break; }
break;
case 3:
printf("\nQual valor do medidor de consumo deseja pesquisar? ");
scanf("%d",&busca);
aux= arvorebusca(arvore, busca);
if(aux->medidor == busca) {
...