Ir para conteúdo
Fórum Script Brasil

cristiano m

Membros
  • Total de itens

    3
  • Registro em

  • Última visita

Sobre cristiano m

cristiano m's Achievements

0

Reputação

  1. Organize a hierarquia dos setores de uma empresa através de uma árvore. Inicie o nodo raiz com o presidente e cria mais 5 níveis (diretor, gerente, vendedor, caixa e empacotador). Cada nível deve possuir no mínimo 2 nodos. alguém poderia me dar uma ajudinha só não sei como faço para aparecer cada nodo dessa arvore, segue abaixo o código que estou tentado fazer. //Operacoes sobre Arvore de busca binaria #include <stdio.h> #include <stdlib.h> #include<time.h> //Definicao da Arvore typedef struct Raiz{ char cargos; struct nodo * esquerda; struct nodo * direita; }Raiz; //Criacao de um nodo da arvore Raiz * cria_elemento(char cargos){ Raiz * novo = malloc(sizeof(Raiz)); novo->cargos = cargos; novo->esquerda = NULL; novo->direita = NULL; return novo; } //Inclusao de um nodo na Arvore void insere_folha(Raiz ** arv,char cargos){ if (*arv == NULL){ *arv = cria_elemento(cargos); }else{ //se a informa??o ? menor que a informacao da arvore, insere a esquerda if(cargos < (*arv)->cargos){ printf("Inserindo na Esquerda. \n"); insere_folha(&(*arv)->esquerda, cargos); //se a informa??o ? maior que a informacao da arvore, insere a direita }else if (cargos > (*arv)->cargos){ printf("Inserindo na Direita. \n"); insere_folha(&(*arv)->direita, cargos); } } } //Caminhamento pre-ordem void pre_ordem(Raiz * arv){ if (arv != NULL) { printf("%c \n",arv->cargos); if (arv->esquerda != NULL){ printf("Nodo Esquerdo. \n"); pre_ordem(arv->esquerda); } if(arv->direita != NULL){ printf("Nodo Direito. \n"); pre_ordem(arv->direita); } } } //Caminhamento em-ordem void em_ordem(Raiz * arv){ if (arv != NULL){ if (arv->esquerda != NULL){ printf("Nodo Esquerdo. \n"); em_ordem(arv->esquerda); } printf("%c \n", arv->cargos); if (arv->direita != NULL){ printf("Nodo Direito. \n"); em_ordem(arv->direita); } } } //Caminhamento pos-ordem void pos_ordem(Raiz * arv){ if (arv != NULL){ if (arv->esquerda != NULL){ printf("Nodo Esquerdo. \n"); pos_ordem(arv->esquerda); } if (arv->direita != NULL){ printf("Nodo direito. \n"); pos_ordem(arv->direita); } printf("%c \n", arv->cargos); } } //Pesquisar um nodo void pesquisar_nodo(Raiz * arv, int pesq) { if (arv != NULL) { if (arv->cargos == pesq) { printf("Nodo encontrado %c. \n", arv->cargos); }else { if (pesq > arv->cargos) { printf("Pesquisando a direita. \n"); pesquisar_nodo(arv->direita, pesq); }else { printf("Pesquisando a esquerda. \n"); pesquisar_nodo(arv->esquerda, pesq); } } }else { printf("Nodo não encontrado\n"); } } //Monta o menu do programa void monta_menu(){ printf("//////////////////////////////////////////////////////////////// \n"); printf("Operacoes sobre Arvores \n"); printf("Selecione a Opcao Desejada: \n"); printf(" 1 - Incluir Folha\n"); printf(" 2 - Caminhar Em Pre-Ordem \n"); printf(" 3 - Caminhar Em Ordem \n"); printf(" 4 - Caminhar Em Pos-Ordem \n"); printf(" 5 - Pesquisar nodos na Arvore \n"); printf(" 0 - Sair \n"); printf("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \n \n"); printf("Qual a sua opcao: "); } int main() { int i = 6; char cargos; Raiz * arv = NULL; printf("\n====LEGENDA===== \n(P)-Presidente \n(D)-Diretor \n(G)-Gerente \n(V)-Vendedor \n(C)-Caixa \n(E)-Empacotador\n"); insere_folha(&arv, 'p'); insere_folha(&arv, 'd'); insere_folha(&arv, 'g'); insere_folha(&arv, 'v'); insere_folha(&arv, 'c'); insere_folha(&arv, 'e'); em_ordem(arv); return 0; }
  2. alguém poderia me dar um help Você foi designado para implementar um sistema bancário. Parte desta implementação é a criação de listas duplamente encadeadas em C. A primeira lista deve conter as seguintes informações em cada nodo: - dinheiro - crédito - dívida Além destes atributos, a primeira lista conterá em cada nodo uma segunda lista. A segunda lista conterá as seguintes informações: - idade - peso - altura A primeira lista conterá 4 nodos. Sabendo que dentro de cada nodo da primeira lista temos outra lista (chamada de segunda lista), teremos ao total 5 listas. A segunda lista contida no primeiro nodo da primeira lista deverá ter 3 nodos. A segunda lista contida no segundo nodo da primeira lista deverá ter 3 nodos. A segunda lista contida no terceiro nodo da primeira lista deverá ter 2 nodos. A segunda lista contida no quarto nodo da primeira lista deverá ter 5 nodos. Após estruturar todas os elementos das listas você deve: 1) Apresentar a lista principal (primeira lista); 2) Apresentar as quatro listas secundárias (secunda lista); 3) Remover o elemento 2 da lista contida no nodo 4 dentro da lista principal; 4) Exibir a lista principal inversa; 5) Exibir as 4 listas secundárias inversas #include<stdlib.h> #include<stdio.h> typedef struct No{ int idade; int peso; int altura; struct No *proximo; struct No *anterior; } No; typedef struct No1{ float dinheiro; float credito; float divida; struct No1 *proximo; struct No1 *anterior; } No1; No * criar_listaexterna(int idade, int peso, int altura){ printf("===LISTA 1==="); No *novo; novo = (No *) malloc(sizeof(No)); novo->idade = idade; novo->peso = peso; novo->altura = altura; novo->proximo = NULL; novo->anterior = NULL; return novo; } No1 * criar_listainterna(float dinheiro, float credito, float divida){ No1 *novo; novo = (No1 *) malloc(sizeof(No1)); novo->dinheiro = dinheiro; novo->credito = credito; novo->divida = divida; novo->proximo = NULL; novo->anterior = NULL; return novo; } //Funcao abaixo insere no inicio da lista No * insere_primeiro(No * lista, No * novo){ if (lista != NULL){ lista->anterior = novo; novo->proximo = lista; } return novo; } No * retorna_ultimo_da_lista(No * lista){ while (lista->proximo != NULL){ lista = lista->proximo; } return lista; } No * insere_ultimo(No * lista, No * novo){ if (lista != NULL) { No * n = retorna_ultimo_da_lista(lista); n->proximo = novo; novo->anterior = n; return lista; }else{ return novo; } } void apresenta_lista(No * lista){ //Percorrendo os elementos da lista int cont = 0; while (lista != NULL){ printf("Idade %d, peso %d, altura %d\n", lista->idade, lista->peso, lista->altura); cont++; lista = lista->proximo; } } void apresenta_listainterna(No1 * lista){ //Percorrendo os elementos da lista int cont = 0; while (lista != NULL){ printf("Valor %f, Credito %f, Divida %f\n", lista->dinheiro, lista->credito, lista->divida); cont++; lista = lista->proximo; } } void apresenta_lista_inversa(No * lista){ int cont = 0; No * ultimo = retorna_ultimo_da_lista(lista); system("pause"); while (ultimo != NULL){ printf("Idade %d, peso %d, altura %d\n", ultimo->idade, ultimo->peso, ultimo->altura); cont++; ultimo = ultimo->anterior; } } No * remove_elemento(No * lista, int posicao){ if (lista != NULL){ // printf("Removendo NULL \n"); No * aux = lista; //exclusao lista if (posicao == 1){ lista = lista->proximo; //Se nao for o ultimo elemento da lista if (lista != NULL){ lista->anterior = NULL; } }else{ int cont = 1; while (aux != NULL && cont < posicao) { aux = aux->proximo; cont++; } if (aux == NULL){ printf("A lista nao tem %d elementos \n", posicao); return lista; } aux->anterior->proximo = aux->proximo; //exclusão do último não necessita atualizar a referencia de um elemento posterior if (aux->proximo != NULL){ aux->proximo->anterior = aux->anterior; } } free(aux); }else{ printf("A lista esta vazia! \n"); } return lista; } No * insere_na_lista(No * lista, No * novo, int posicao){ No * aux = lista; //Inclusão no inicio if (lista == NULL || posicao == 1){ lista = insere_primeiro(lista, novo); }else{ int cont = 1; while (aux->proximo != NULL && cont < posicao) { aux = aux->proximo; cont++; } //Inclusão no último if (aux->proximo == NULL){ insere_ultimo(lista, novo); }else{ //inclusão em outro ponto aux->anterior->proximo = novo; novo->proximo = aux; novo->anterior = aux->anterior; aux->anterior = novo; } } return lista; } int main() { // Criando referencia para a lista No *lista = NULL; // criar um lista apontada por n com o primerio elemento No *n = criar_listaexterna(18, 75, 179); No *n2 = criar_listaexterna(22, 84,180); No *n3 = criar_listaexterna(30, 90, 190); No *n4 = criar_listaexterna(55, 76, 178); No1 *m = criar_listainterna(18, 75, 179); No1 *m2 = criar_listainterna(22, 84,180); No1 *m3 = criar_listainterna(30, 90, 190); No1 *m4 = criar_listainterna(55, 76, 178); No1 *m5 = criar_listainterna(28, 74, 186); No1 *m6 = criar_listainterna(16, 69, 175); printf("Inserindo na ultima posicao da lista os elementos n2, n3 e n4 \n"); lista = insere_ultimo(lista, n2); lista = insere_ultimo(lista, n3); lista = insere_ultimo(lista, n4); apresenta_lista(lista); system("PAUSE"); printf("Inserindo na ultima posicao da lista os elementos n2, n3 e n4 \n"); lista = insere_ultimo(lista, m2); lista = insere_ultimo(lista, m3); lista = insere_ultimo(lista, m4); apresenta_listainterna(lista); system("PAUSE"); printf("Inserindo n5 como primeiro elemento da lista. \n"); lista = insere_primeiro(lista, n4); apresenta_lista(lista); system("PAUSE"); printf("Removendo o elemento da posicao 4 da lista. \n"); lista = remove_elemento(lista, 4); apresenta_lista(lista); system("PAUSE"); printf("Apresentado a lista em ordem inversa. \n"); apresenta_lista_inversa(lista); system("PAUSE"); printf("Inserindo n6 na posicao 2 da lista. \n"); lista = insere_na_lista(lista, n4, 2); apresenta_lista(lista); system("PAUSE"); printf("Apresentado a lista em ordem inversa. \n"); apresenta_lista_inversa(lista); system("PAUSE"); printf("Removendo 4 \n"); lista = remove_elemento(lista, 4); apresenta_lista(lista); system("PAUSE"); printf("Removendo 3 \n"); lista = remove_elemento(lista, 3); apresenta_lista(lista); printf("Removendo 2 \n"); lista = remove_elemento(lista, 2); apresenta_lista(lista); printf("Removendo 1 \n"); lista = remove_elemento(lista, 1); apresenta_lista(lista); system("PAUSE"); }
  3. gostaria de uma ajuda em um exercicio de estrutura Criar o procedimento para inserir em uma posição específica da lista void inserir_elemento_na_posicao(No * primeiro, No * novo, int posicao) Criar uma lista de alunos, contendo o nome, número de matrícula e idade. Apresentar a média de idade dos alunos contidos na lista. agradeço se puderem me ajudar .
×
×
  • Criar Novo...