Ir para conteúdo
Fórum Script Brasil
  • 0

lista encadeada inserção à direita (fim)


jhoul

Pergunta

Olá preciso que alguém me ajude a corrigir meu programa principalmente na parte de inserção à direita

o professora possou como fazer mas eu não consegui pegar direito se alguém poder me ajudar eu agradeço!!!

/*Utilizando listas simplesmente encadeadas escreva um programa capaz de:

a) Inserir de forma ordenada;

B) Inserir fim;

c) Inserir no inicio;

d) Imprimir;

e) Remover;

f) Buscar um elemento na lista.*/

#include<stdio.h>
#include<stdlib.h>
#include<conio.>
#include <string.h> 
#include <malloc.h>


typedef struct list
{
        int dado;
        struct list *prox;
}def_lista;

def_lista *lista = NULL;

int insere_ordenado()
{
    int num = 0;
    system ("cls");
    printf("entre com um numero:\n");
    scanf("%d",&num);
    return;
}

[b]int insere_direita(*primeiro)
{
    struct list *p=0,*aux,*aux2;
    int num = 0;
    *primeiro=primeiro;
    puts("entre com um valor");
    scanf("%d",&num);
    malloc(p);
    printf("O NUMERO é: %d \n",p);
    if(p == NULL)
    {
       printf("Erro de alocacao");
    }
    else
    {
        p->dado=num;
        p->prox=NULL;
    }
    if(primeiro == NULL)
       primeiro=p;
    else
       aux=primeiro;
    while(aux-> prox != NULL)
       aux=aux->prox;
    p->prox = aux;
    return 1;
}[/b]


int insere_inicio()
{
    int num;
    def_lista *aux;
    aux = (def_lista *) MALLOC(sizeof(def_lista));
    if (aux==NULL)
       return 0;
    aux->dado = num;
    aux->prox = NULL;
    if (lista==NULL)
    {
       lista = aux;
       printf("O VALOR %d",lista);
    }
    else
    {
        aux->prox = lista;
        lista = aux;
        printf("O VALOR %d",lista);
    }
    return 1;
}

    
/* Exibe o conteudo de lista */
imprimir()
{
    def_lista *aux;
    aux = lista;
    
    while (aux != NULL)
    {
          printf(aux->dado);
          aux = aux->prox;
    }
}

    
// Classe principal   
main()
{
      int op,num;
      do {
         system ("cls");                  
         puts ("\n\n********** LISTAS DINAMICAS **********\n\n");
         puts("digite 1 para inserir de forma ordenada");
         puts("digite 2 para inserir a direita");
         puts("digite 3 para inserir no inicio");
         puts("digite 4 para imprimir");
         puts("digite 5 para remover");
         puts("digite 6 para buscar elemento");
         puts("digite 7 para sair do programa\n");
         puts("\nENTRE COM A OPCAO DESEJADA:");
         scanf("%d", &op);
         cria_lista();
         
         switch(op)
         {
            case 1:
                 
                 insere_ordenado();
                 break;
                 
           [b] case 2:
                 insere_direita();
                 system("pause");
                 break;[/b]
                 
            case 3:
                 insere_inicio();
                 printf("entre com um valor no inicio");
                 scanf("%d \n",&num);
                 system ("cls");                 

                 break;
                 
            case 4:
                 imprimir ();
                     if (!imprimir())
                          system ("cls");
                          printf("\n Lista Vazia \n\n ");
                     system ("pause");
                 break;                    
                             
            case 5:                 
                 break;
            case 6:
                 break;
            case 7:
                 printf("\nFim do Programa...\n");
                 break;
            default:
                 system ("cls");
                 puts ("\nNumero Invalido!\n");
                 system ("pause");            
         } // fim do switch
         
      } while (op != 7);// fim do laço do
      getch();
} // fim da classe main

se alguém poder me ajudar esse é meu e-mail. jonathaneld@hotmail.com

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá, tente usar as tags de código quando colar código, assim fica horrivel de ler, tem várias coisas estranhas na sua função de inserir na direita, que estão bem ilegíveis, esse insere na direita é para inserir no fim?

Na hora de trabalhar com listas devemos pensar sempre nas possibilidades de

- A lista estar vazia

- A Lista ter só um elemento

- A lista ter mais de um elemento

Sempre que fizer algo com lista teste no papel o seu algoritmo nestes tres casos, se tiver ok provavelmente funcionará

Se for para inserir no final, basicamente se percorre a lista até o final, fazendo um de seus ponteiros auxiliares apontar para o ultimo elemento, e então aux->prox recebe o novo nó, basicamente isso, não se esqueça de colocar o valor neste ultimo nó e setar o prox dele pra null, tente explanar exatamente a sua duvida.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...