Jump to content
Fórum Script Brasil
  • 0

Ajuda Com Lista...


dhyeggo
 Share

Question

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 to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      151k
    • Total Posts
      649.1k
×
×
  • Create New...