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

Ajuda Com Lista...


dhyeggo

Pergunta

boa noite galera...

precisa de uma ajuda...

alguém poderia me ajudar me explicando o que fez cada coisa nesse programa...

precisava entender ele...

alguém poderia me ajudar...

valeu

#include <stdio.h>
#include <stdlib.h>

struct it
{
    int nr;
    struct it *prox;
};

typedef struct it item;

item *lista;
int num;
   
/* Função inserir */
item *insere( item *L, int n )
{
    item *novo;
    novo = ( item * ) malloc( sizeof( item));
    novo-> nr = n;
    novo-> prox = L;
    system("pause");    
    return( novo );
}

/* função Imprime */
void imprime ( item *L )
{
    if ( L == NULL)
    {
        printf(" Lista esta vazia \n");
        printf(" \n");
        return;
    }
    item *imp;
    imp = L;
    do
    {
        printf(" nr: %d\n", imp->nr);
        imp = imp->prox;
    } while( imp != NULL );
    system("pause");
}

/* função excluir */
item* exclui( item *L, int n)
{
    if ( L == NULL)
    {
        printf(" Lista esta vazia \n");
        printf(" \n");
        return(0);
    }
    else
    printf("Excluir numero: ");
    scanf("%d",&num);

    item* end;
    item* ant;
    end = L;
    do
    {
        if( L-> nr == n )
        {
            ant-> prox = L-> prox; 
            L = L-> prox;
        }
        else
        {
            ant = L;
            L = L-> prox;
        }
    } while( L != NULL );
    system("pause");
}       

/* função contar */
void conta ( item *L )
{
    if ( L == NULL)
    {
        printf(" Lista esta vazia \n");
        printf(" \n");
        return;
    }
    int tot = 0;
    item *imp;
    imp = L;
    do
    {
        imp = imp->prox;
        tot = tot + 1;
    } while( imp != NULL );
    printf("Quantidade = %d\n", tot);
    system("pause");
}

/* funcao limpar toda lista */
void limpa()
{
    if ( lista == NULL)
    {
        printf(" Lista esta vazia \n");
        printf(" \n");
        return;
    }
    else
        lista = NULL;
    system("pause");
}

main()
{
    int opcao, nume;

    lista = NULL;

    do
    {
        printf("____________Escolha uma opcao____________\n");
        printf("=>  1 - Inserir elemento na Lista\n");
        printf("=>  2 - Listar os elementos da lista\n");
        printf("=>  3 - Exluir um elemento da lista\n");
        printf("=>  4 - Quantidade de elementos da lista\n");
        printf("=>  5 - Exluir toda lista\n");
        printf("=>  6 - Sair\n");
        scanf("%d", &opcao);
        switch( opcao )
        {
            case 1:
                printf("Digite um numero: ");
                scanf("%d", &num);                
                lista = insere(lista,num);
            break;
            case 2:
                imprime(lista);
            break;
            case 3:
                exclui(lista,num);              
            break;
            case 4:
                conta(lista);
            break;           
            case 5:
                limpa();
            break;
        }
    } while ( opcao != 6 );
}

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Se pra voce é para mim não.. se eu estou postando aqui é porque eu entendi e se postei por postar.. e claro que não né, se pedi ajuda é porque não entendi...

alguém que possa me dar um help ai...

aquela parte do main ali esquece, aquele eu entendo... agora alguém poderia me ajudar com as funções...

poderia me dizer o que cada coisa faiz por exemplo a funcao

/* função Imprime */

void imprime ( item *L )

{

if ( L == NULL)

{

printf(" Lista esta vazia \n");

printf(" \n");

return;

}

item *imp;

imp = L;

do

{

printf(" nr: %d\n", imp->nr);

imp = imp->prox;

} while( imp != NULL );

system("pause");

}

eu ei que primeiro ele compara para ver se a lista esta vazia, ai se não estiver o que ele faiz...

alguém poderia detalhar bem o codigo para mim...

se alguém puder me dar um conceito de lista para me auxiliar mais...

valeu...

Link para o comentário
Compartilhar em outros sites

  • 0

vamos lá então:

função insere ela deve inserir um elemento na sua lista e retornar a nova lista já com o novo elemento encadeado.

/* Função inserir */
item *insere( item *L, int n )
{
    item *novo; // cria uma nova estrutura
    novo = ( item * ) malloc( sizeof( item)); // alocação dinamica para a estrutura
    novo-> nr = n; // elemento nr da estrutura recebe o valor de n
    novo-> prox = L; // sua nova estrutura aponta para a lista que recebeu por parametro
    system("pause");    
    return( novo ); // retorna a nova lista
}
resumindo: cria uma nova struct, preenche o valor de nr com o valor do parametro n da função e encadeia essa nova estrutura no começo da lista.
void imprime ( item *L )
{
    if ( L == NULL) // verifica se a lista está fazia
    {
        printf(" Lista esta vazia \n");
        printf(" \n");
        return;
    } 
    item *imp; // cria uma nova struct
    imp = L; // imp recebe o primeiro elemento da lista
    do
    {
        printf(" nr: %d\n", imp->nr); // imprime valor de nr
        imp = imp->prox; // passa para o proximo elemento
    } while( imp != NULL ); // faca isso enquanto o proximo elemento da lista for diferente de Nulo
    system("pause");
}

agora acho que voce consegui ir sozinho, qualquer dúvida é só postar

Link para o comentário
Compartilhar em outros sites

  • 0

caro amigo kandrade...

consegui pegar bem conforme as suas explicacoes anteriores...

só estou tendo problemas para entender essa funcao excluir...

você poderia fazer como voce feiz com as outras.. falar o que cada comando faiz...

valeu..

/* função excluir */
item* exclui( item *L, int n)
{
    if ( L == NULL)
    {
        printf(" Lista esta vazia \n");
        printf(" \n");
        return(0);
    }
    else
    printf("Excluir numero: ");
    scanf("%d",&num);

    item* end;
    item* ant;
    end = L;
    do
    {
        if( L-> nr == n )
        {
            ant-> prox = L-> prox; 
            L = L-> prox;
        }
        else
        {
            ant = L;
            L = L-> prox;
        }
    } while( L != NULL );
    system("pause");
}       

Link para o comentário
Compartilhar em outros sites

  • 0

/* função excluir */
item* exclui( item *L, int n)
{
    if ( L == NULL) // verifica se lista esta vazia
    {
        printf(" Lista esta vazia \n");
        printf(" \n");
        return(0);
    }
    else // se não estiver vazia
    printf("Excluir numero: "); 
    scanf("%d",&num); // número que deseja excluir da lista

    item* end; 
    item* ant;
    end = L; // struct end recebe L, ou seja, recebe primeiro elemento da lista
    do
    {
        if( L-> nr == n ) // se elemento nr é o que voce procura, voce precisa excluir certo?
        {
            ant-> prox = L-> prox; // o elemento anterior da lista aponta para o atual, porem o atual voce tem que excluir, o que acontece aqui é: o ponteiro proximo do elemento anterior pula o elemento atual e aponta diretamente para o proximo elemento.
            L = L-> prox; // passa para o proximo elemento.
        }
        else // se não é o elemento que voce procura, voce precisa seguir certo?
        {
            ant = L; // ant recebe struct atual
            L = L-> prox; // struct atual passa para o proximo
        }
    } while( L != NULL ); // execute equanto não chega no fim da lista
    system("pause");
}       

se tiver confusa a explicacão eu tento explicar de outra forma, mas a sacada está toda dentro daquele if

abraco!!!

Link para o comentário
Compartilhar em outros sites

  • 0

é só usar o comando free na variável que saiu da lista, eu só não lembro em que biblioteca ele se encontra.

muito cuidado para não usar o comando free antes de refazer o link da lista.


if( L-> nr == n ) // se elemento nr é o que voce procura, voce precisa excluir certo?
{
    ant-> prox = L-> prox; // o elemento anterior da lista aponta para o atual, porem o atual voce tem que excluir, o que acontece aqui é: o ponteiro proximo do elemento anterior pula o elemento atual e aponta diretamente para o proximo elemento.
    free(L); // libera esse espaco da memoria
    L = ant-> prox; // passa para o proximo elemento.
}

Link para o comentário
Compartilhar em outros sites

  • 0
é só usar o comando free na variável que saiu da lista, eu só não lembro em que biblioteca ele se encontra.

muito cuidado para não usar o comando free antes de refazer o link da lista.

Biblioteca stdlib.h

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...