Pages

segunda-feira, 11 de julho de 2016

Sistema de controle de alunos usando arvore binaria em c

Sistema de controle de alunos usando arvore binaria em c.

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define VAZIA "\n\n\tARVORE VAZIA!\n\n"

struct Aluno{
char nome[60];
float media;
};
struct ARVORE{
struct Aluno aluno;
struct ARVORE *left, *right;
};

typedef struct ARVORE ARV;

int menu();
ARV *criaArvore();
ARV *criaNoAluno(ARV *arvore);
ARV *insereAluno();
int vazia();
void preOrdem(ARV *a);
void ordem(ARV *a);
void posOrdem(ARV *a);

int main(){
int op;
ARV *a = criaArvore();
do{
op = menu();
switch(op){
case 1:{
a = criaNoAluno(a);
break;
}
case 2:{
if(!vazia(a)){
preOrdem(a);
}else
printf(VAZIA);
getchar();

break;
}
case 3:{
if(!vazia(a)){
ordem(a);
}else
printf(VAZIA);
getchar();
break;
}

case 4:{
if(!vazia(a)){
posOrdem(a);
}else
printf(VAZIA);
getchar();
break;
}
case 0:break;
}
}while(op!=0);

return 0;
}

int menu(){
int opc;
do{
system("cls");
printf("1-INSERIR ALUNO\n2-EXIBIR PRE-ORDEM\n3-ORDEM\n4-POS-ORDEM\n0-SAIR");
scanf("%d",&opc);
getchar();
if(opc<0 || opc >4){
printf("OPCAO INVALIDA!");
getchar();
}
}while(opc<0 || opc >4);
}


ARV *criaArvore(){
return NULL;
}

ARV *criaNoAluno(ARV *arvore){
ARV *atemp;
ARV *a;

if(arvore == NULL){
atemp = (ARV*)malloc(sizeof(ARV));
atemp = insereAluno();
atemp->left = criaArvore();
atemp->right = criaArvore();
return atemp;
}else{
int dir = 0;
atemp = arvore;
ARV *pai, *raiz = arvore;
a = (ARV*)malloc(sizeof(ARV));
a = insereAluno();
while(atemp != NULL){
pai =atemp;
if(a->aluno.media <= atemp->aluno.media ){
dir = 0;
atemp = atemp->left;
}else{
dir = 1;
atemp = atemp->right;
}
}

atemp = (ARV*)malloc(sizeof(ARV));
atemp = a;
atemp->left = criaArvore();
atemp->right = criaArvore();
if(dir)
pai->right = atemp;
else
pai->left = atemp;

return raiz;
}
}

ARV *insereAluno(){
ARV *a = (ARV*)malloc(sizeof(ARV));

printf("INFORME O NOME DO ALUNO: ");
gets(a->aluno.nome);
printf("INFORME A MEDIA DO ALUNO: ");
scanf("%f",&a->aluno.media);
getchar();
return a;
}

int vazia(ARV *a){
return a == NULL;
}

void preOrdem(ARV *a){
printf("%.1f",a->aluno.media);

if(a->left != NULL){
printf("->");
preOrdem(a->left);
}
if(a->right !=NULL){
printf("->");
preOrdem(a->right);
}
}
void ordem(ARV *a){
if(!vazia(a->left)){
ordem(a->left);
}

printf("%.1f ->",a->aluno.media);
if(!vazia(a->right)){
ordem(a->right);
}
}
void posOrdem(ARV *a){
if(!vazia(a->left)){
posOrdem(a->left);
}
if(!vazia(a->right)){
posOrdem(a->right);
}
printf("%1.f ->",a->aluno.media);
}


Duvidas ou Trabalhos para fazer entre em Contato: marcofernando71@gmail.com

0 comentários:

Postar um comentário