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 Clauido José
      Boa tarde galera estou migrando um site de asp classico para asp.net e preciso de um exemplo de C# usuano carrocel com banco de dados mysql 
       
      Consegui peguei um exemplo no google mais não estou conseguindo acertar o css ele esta trazendo um em baixo do outro olha meu código:
       
      <!-- Wrapper for slides --> <div id="myCarousel" class="carousel slide" data-ride="carousel"> <!-- Indicators --> <ol class="carousel-indicators"> <li data-target="#myCarousel" data-slide-to="0" class="active"></li> <li data-target="#myCarousel" data-slide-to="1"></li> <li data-target="#myCarousel" data-slide-to="2"></li> <li data-target="#myCarousel" data-slide-to="3"></li> </ol> <asp:Repeater ID="itemRepeater" runat="server"> <itemtemplate> <div class="carousel-inner" role="listbox"> <div class="item"> <img src='<%=Eval("foto") %>'></div> </div> </itemtemplate> </asp:Repeater> <!-- Left and right controls --> <a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev"> <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> </a> <a class="right carousel-control" href="#myCarousel" role="button" data-slide="next"> <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> </a> </div> <!--FIM CARROCEL-->--> </div> Minha pagina default.cs:
      protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { Banners banner = new Banners(); var listabanner = banner.ListaBanner(); int soma = 0; foreach (var lista in listabanner) { Image foto = new Image(); foto.ImageUrl = lista.Imagem.ToString(); foto.AlternateText = lista.Titulo.ToString(); itemRepeater.Controls.Add(foto); } }  
    • Por Clauido José
      Bom dia meu povo ,
       
      Estou migrando um site que esta feito em asp clássico para asp.net estou usando bootstrap queria saber como faço para preencher o dropdown do navbar com dados de uma tabela sou iniciante com asp.net algum tutorial ou exemplo que possa entedner como funciona:?
    • Por Clauido José
      Bom dia pessoal 
       
      Estou fazendo um site em asp.net, C#, web form com base de dados mysql, bom organizei as classe de dados numa pasta chamada models dentro dela tenho uma classe de implementação de erros de acesso a banco de dos quando debogo o projeto ela grava a mensagem na variavel certa mais na hora de mostra na tela não mostra a mensagem de erro que da vou postar o codigo:
       
      using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace audioplansp.Models { public class Erro { private string mErro { get; set; } public Erro() { mErro = ""; } /// <summary> /// Retorna a Mensagem de erro /// </summary> /// <returns></returns> public string getMensagemErro() { return mErro; } public void setMensagemErro(string mErro) { this.mErro = mErro; } public Boolean isErro() { if (getMensagemErro().Trim().Length > 0) { return true; } return false; } public string MensagemErroFormatada() { if (isErro()) { return "Um Erro Inesperado aconteceu !!!<br />Procure departamento responsável e relate o erro abaixo<br /><br />" + getMensagemErro(); } return "Operação realizada com sucesso !!!"; } } } Como eu implemento esta classe:
       
      using System; using System.Collections.Generic; using System.Linq; using System.Web; //----------------- using MySql.Data.MySqlClient; using System.Data; using audioplansp.Models; namespace audioplansp.Models { public class UsuarioDb : Erro { public List<Usuario> ListaUsuario() { /// <summary> /// UpdateUsuario: método para atualizar dados do usuário /// </summary> /// <param name="usuario"></param> /// <returns></returns> public int UpdateUsuario(Usuario usuario) { DbConneccao conexao = new DbConneccao(TipoConexao.Conexao.Classe); if (conexao.mErro.Length > 0) { setMensagemErro(conexao.mErro); } } } } } Na pagina aspx:
      int atualizarusuario = usuariodb.UpdateUsuario(usuario); if (conexao.mErro.Length > 0) { MensagemLabel.CssClass = "alert-info"; MensagemLabel.Text = conexao.mErro.ToString(); } if (atualizarusuario == 1) { MensagemLabel.CssClass = "alert-success"; MensagemLabel.Text = "Usuário cadastro com sucesso!"; } else if (atualizarusuario == 2) { MensagemLabel.CssClass = "alert-warning"; MensagemLabel.Text = "Usuário já cadastro em nossa base de dados!"; }  
    • Por Clauido José
      Galera bom dia
       
      Estou implementando o componente datepicker na minhas paginas aspx estou com um probleminha quando eu clico no ano o layout do calendario fica zuado tudo junto, e quando eu clico no icone do calendario ele não abre só dentro da textbox
    • Por rafiusky
      Tenho que fazer um programa onde o usuário irá entrar com um valor onde será feito o saque, que retornará a quantidade de cédulas de cada valor que compõe o saque, por exemplo, uma pessoas que sacar R$378,00 , o programa irá retornar:
      Saque: R$378,00
      3 Cédula(s) R$100,00
      1 Cédula (s) R$50,00
      1 Cédula (s) R$20,00
      1 Cédula (s) R$5,00
      3 Cédula (s) R$1,00
      Eu só preciso de uma ajuda a fazer o logaritmo, estou me confundindo na hora de obter o "resto" das divisões tipo - (saque % 100).
      O programa está assim por enquanto
      int continuar, dinheiro, iCedula1, iCedula2, iCedula5, iCedula10, iCedula20, iCedula50, iCedula100; do { Console.WriteLine("Banco Central M'U'M"); Console.WriteLine("Cédulas Disponíveis: \n-R$1,00\n-R$2,00\n-R$5,00\n-R$10,00\n-R$20,00\n-R$50,00\n-R$100,00"); Console.Write("Quanto deseja retirar? R$"); dinheiro = Int32.Parse(Console.ReadLine()); Console.Clear(); //possível inicio da confusão iCedula100 = (dinheiro % 100); //possível fim da confusão string.Format("{0:0,0.00}", dinheiro); Console.ReadKey(); Console.WriteLine("Saque: R$" + dinheiro); Console.WriteLine("Cédulas R$1 = " + iCedula100 +"\nCédulas R$2 = " + iCedula100 +"\nCédulas R$5 = " + iCedula100 +"\nCédulas R$10 = " + iCedula100 +"\nCédulas R$20 = " + iCedula100 +"\nCédulas R$50 = " + iCedula100 +"\nCédulas R$100 = " + iCedula100); Console.WriteLine("Deseja Refazer o Programa?\n1-Sim\n2-Não"); continuar = Int32.Parse(Console.ReadLine()); } while (continuar == 1);