Ir para conteúdo

cristiano moreira

Members
  • Total de itens

    1
  • Registro em

  • Última visita

Reputação

0 Comum

Sobre cristiano moreira

  1. lista duplamente encadeadas

    ajuda com lista duplamente encadeada 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. esse o meu código #include<stdlib.h> #include<stdio.h> typedef struct No{ int idade; int peso; int altura; struct No1 * listainterna; struct No *proximo; struct No *anterior; } No; typedef struct No1{ float dinheiro; float credito; float divida; struct No1 * listaexterna; struct No1 *proximo; struct No1 *anterior; } No1; No * criar_listaexterna(int idade, int peso, int altura){ 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; } No1 * insere_primeiro1(No1 * lista, No1 * 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; } } No1 * insere_ultimo1(No1 * lista, No1 * novo){ if (lista != NULL) { No1 * 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("\nIdade %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("\nIdade %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 printf("\n\n"); No *lista = NULL; // criar um lista apontada por n com o primerio elemento No *n = criar_listaexterna(18, 75, 179); lista = insere_ultimo(lista, n); No *n2 = criar_listaexterna(22, 84,180); lista = insere_ultimo(lista, n2); No *n3 = criar_listaexterna(30, 90, 190); lista = insere_ultimo(lista, n3); No *n4 = criar_listaexterna(55, 76, 178); lista = insere_ultimo(lista, n4); apresenta_lista(lista); system("PAUSE"); No1 *m = criar_listaexterna(18, 75, 179); No1 *m2 = criar_listaexterna(22, 84,180); No1 *m3 = criar_listaexterna(30, 90, 190); No1 *m4 = criar_listaexterna(55, 76, 178); printf("Inserindo na ultima posicao da lista os elementos n2, n3 e n4 \n"); lista = insere_ultimo1(lista, m); lista = insere_ultimo1(lista, m2); lista = insere_ultimo1(lista, m3); 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("Apresentado a lista em ordem inversa. \n"); apresenta_lista_inversa(lista); system("PAUSE"); printf("Apresentado a lista em ordem inversa. \n"); apresenta_lista_inversa(lista); system("PAUSE"); printf("Removendo 2 \n"); lista = remove_elemento(lista, 2); apresenta_listainterna(lista); system("PAUSE"); }
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.

Este projeto é mantido e patrocinado pelas empresas:
Hospedado por: