Buscar

Você está desenvolvendo um sistema de cadastro de livros cujas informações são:

- ISBN

​​​​​​​- Título do livro

- Valor

- Autor do livro

- Editora

- Ano de publicação


Depois de avaliar algumas estruturas de dados, você resolveu utilizar uma árvore binária para ordenar pelo ISBN.


Defina a estrutura de dados que armazenará essas informações, a função que cria a árvore e a função que insere um nó na árvore.

💡 1 Resposta

User badge image

Augusto Soares

Definição da estrutura de dados


//a estrutura

struct no{

           int ISBN;

           char titulo[20];

           char autor[30];

           float valor;

           int anoPublicao;

           struct no *esq,*dir;

};


typedef struct no* arvBin;


Função que cria a árvore binária


arvBin* criaArvBin(){

           arvBin* raiz = (arvBin*) malloc(sizeof(arvBin));

   if(raiz != NULL)

       *raiz = NULL;

   return raiz;

}


​​​​​​​Função que insere um nó na árvore


int insereArvBin(arvBin *raiz, int ISBN,char titulo[20],char autor[30],float valor, int ano){

           // se ocorreu algum erro na criacao da arvore retorna 0, indicando erro

            if(raiz == NULL)

       return 0;

   //cria um novo no

   struct no* novo;

   //aloca memoria de forma dinamica

   novo = (struct no*) malloc(sizeof(struct no));

   //se ocorreu algum erro na alocaao de memoria do novo no, retorna 0 indicando erro

   if(novo == NULL)

       return 0;

   //guarda a informacao no novo no e faz seus ponteiros apontarem para null

   novo->ISBN =ISBN;

   novo->valor=valor;

   novo->anoPublicao=ano;

   strcpy(autor,novo->autor);

   strcpy(titulo,novo->titulo);

   novo->dir = NULL;

   novo->esq = NULL;


   //agora vamos encontrar onde vamos inserir o no

   //se o nosso no especial estiver apontando para NULL, significa q temos uma arvore vazia

   //o nosso unico no eh o no q acabou de ser criado

   if(*raiz == NULL)

       *raiz = novo;

   //caso contrario vamos avaliar onde vamos colocar o novo no

   else{

          //para isso vamos usar um no auxiliar atual

       struct no* atual = *raiz;

       //e outro ant de anterior ao atual

       struct no* ant = NULL;

       //enquanto o atuall não for NULL, ou seja não for um nó-folha

       while(atual != NULL){

          //anterior vai guardar o end d atual

           ant = atual;

           //se o valor q queremos inserir for igual a um existente na arvore,nao inserimos

           if(ISBN == atual->ISBN){

               free(novo);

               return 0;//elemento já existe

           }

           //se for maior, vamos percorrer a arvore da direita


           if(ISBN > atual->ISBN)

               atual = atual->dir;

           //menor a arvore da esquerda

           else

               atual = atual->esq;

       }

       //isso tudo eh feito ate acharmos a um no folha

       //o anterior vai nos guiar se vamos adicionar o novo no a direita ou a esquerda

       if(ISBN > ant->ISBN)

           ant->dir = novo;

       else

           ant->esq = novo;

   }

   return 1;

}


Função principal


int main(){

           arvBin* raiz;

           raiz=criaArvBin();


           int numeroElementos = 3;

           char titulo[20];

           char autor[30];

           float valor;

           int ano,ISBN;


   int i;

   for(i=0; i < numeroElementos; i++){


          printf("Digite o ISBN: ");

          scanf("%d",&ISBN);

          printf("Digite o titulo: \n");

          scanf(" %[^\n]s", titulo);

          printf("Digite o autor: \n");

          scanf(" %[^\n]s", autor);

          printf("Digite o valor: \n");

          scanf("%f",&valor);

                      printf("Digite o ano de publicacao: ");

          scanf("%d",&ano);

          insereArvBin(raiz,ISBN,titulo,autor,valor,ano);


   }

           return(0);

}


0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Outros materiais