Publicidade

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

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora

  • Próximos Eventos

  • Conteúdo Similar

    • Por OCorlleone
      Eu consegui por meio de fóruns esse código que funcionou muito bem da forma que eu desejava, porém eu estava fazendo esse código em VB.NET.
      Porém eu preciso fazer com que esse código funcione da mesma forma em C#
       
      Eu tentei de várias formas alterar para funcionar em C#, mas sem sucesso.
       
      Esse é o código em VB.NET que preciso transpassar para C#
      'Alterar cor da linha com base no resultado obtido através da quinta coluna da tabela (Status) Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then 'Indice da sua coluna status Dim myVal As String = e.Row.Cells(5).Text If myVal = "Completed" Then e.Row.BackColor = System.Drawing.Color.Green ElseIf myVal = "Delayed" Then e.Row.BackColor = System.Drawing.Color.Red ElseIf myVal = "In Progress" Then e.Row.BackColor = System.Drawing.Color.Yellow ElseIf myVal = "New" Then e.Row.BackColor = System.Drawing.Color.White End If End If End Sub  
      Esse código funciona da seguinte forma:
       
      Ele pega o valor dentro do campo de uma determinada tabela, localizada na sexta coluna. E faz a alteração da cor da linha da tabela para a cor designada, para haver diferenciação.
      Aguardo por ajuda.
    • Por OCorlleone
      Estou com dificuldades para fazer com que meus dados sejam carregados na página junto com o carregamento.
      Com o GridView eu consigo fazer com que ele fique fixo, mas não é da forma que preciso que ocorra, preciso de uma função para que ele carregue os dados, que por momento eu tenho via Access, e popule o GridView com os dados carregados.
       
      Esse é o código da minha página no momento.
      Lembrando que preciso fazer com que o GridView receba os dados ao carregar a página.
      <%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site1.Master" CodeBehind="MainView.aspx.vb" Inherits="DosimetryASPNET_WebApplication.MainView" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <asp:Label ID="headerLabel" runat="server" Height="60px" Width="100%" BackColor="#000099"> <asp:Image ID="Image1" runat="server" Height="60px" ImageUrl="~/Images/tetra-pak-mottostamp-logoype.png" Width="70px" /> </asp:Label> </asp:Content> <asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder3" runat="server"> <asp:Button ID="btnMenuView" runat="server" Text="Return to Menu" Width="200px" OnClick="btnMenuView_Click"/> <br /> <br /> </asp:Content> <asp:Content ID="Content4" ContentPlaceHolderID="ContentPlaceHolder4" runat="server"> <br /> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> </asp:GridView> </asp:Content>  
      Espero ter conseguido ser claro com minha dúvida.
      Aguardo por ajuda.
    • Por LuanMartinsTI
      Pessoal é o seguinte, tenho em um aplicativo o controle de flode, e para verificar as palavras digitadas, primeiro eu dou um replace em todos os espaços do texto e em caracteres especiais e verifico se alguma pessoa digitou uma palavra proibida, exemplo um xingamento "pu...." mas eu enfrento um grande problema, se a pessoa acentuar a palavra eu não consigo pegar no script, eu já vi diversas vezes na internet varios codigos que tiram o acento, realmente eles tiram sim, mas add um simbolo na frente, e de forma alguma consigo tirar o simbolo na verificação com o replace, ex, se eu quero proibir a palavra imasters, ai a pessoa digita imásters eu não consigo, e se passar na função que tira a acentuação, ele vai exibir no console assim: ima!ster, e no meu replace tem la que ("!",""), mas mesmo assim não tira, qual seria minha solução?
       
      byte[] bytes = System.Text.Encoding.GetEncoding("iso-8859-8").GetBytes(texto); texto = texto.Replace("-", "").Replace("á", "").Replace("^", "").Replace("/", "").Replace("_", "").Replace(".", "").Replace("*", "").Replace("'", "").Replace("#", "").Replace("@", "").Replace("!", "").Replace(",", "").Replace("?", "").Replace("`", "").Replace("=", "").Replace("+", "").Replace("\\", "").Replace("{", "").Replace("}", "").Replace("[", "").Replace("]", "").Replace("(", "").Replace(")", "").Replace(" ", "");  
      já tentei também colocar no replace vogais já acentuada, porem não funciona, tipo assim: ("á","")
       
      alguém pode me ajudar?
    • Por rafaelsouzab
      Boa tarde,
       
      Estou desenvolvendo uma aplicação em 3 camadas e estou com uma duvida na parte do sistema que eu tenho um modelo de Tarefas, e essas tarefas possuem algumas prioridades, porem no banco de dados eu separei a tabela tarefas de prioridades, gostaria de saber se estaria fugindo muito do conceito de uma aplicação em 3 camadas se eu deixasse as propriedades das prioridades no modelo Tarefas. então basicamente esta separado e relacionado no banco de dados porem no sistema esta tudo no mesmo modelo.
    • Por CrisRodrigues
      Olá alguem para me ajudar? bom baixei um script/site em outro forum que usa C#, por enquanto só sei mexer com php nada mais, bom na nota do site diz o seguinte:
      ## Requirements to build and run * .NET Core runtime * .NET Core SDK * Visual Studio 2017 Community Edition * npm ## How to build Just open the solution in Visual Studio, do a `dotnet restore` and then publish the project.  
      Baixei todos os programas requeridos para buildar, más não estou conseguindo fazer o resto para obter o site