Jump to content

cristiano moreira

Members
  • Content count

    1
  • Joined

  • Last visited

Community Reputation

0 Comum

About cristiano moreira

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. cristiano moreira

    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"); }
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.