dhyeggo Posted December 4, 2006 Report Share Posted December 4, 2006 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 ); } Quote Link to comment Share on other sites More sharing options...
0 666VeNoM Posted December 5, 2006 Report Share Posted December 5, 2006 hum... pra mim o código já é auto-explicativotodos os nomes de função explicam claramente o que ela irá fazer. e você olhando a função da pra entender. Quote Link to comment Share on other sites More sharing options...
0 dhyeggo Posted December 5, 2006 Author Report Share Posted December 5, 2006 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... Quote Link to comment Share on other sites More sharing options...
0 kandrade Posted December 5, 2006 Report Share Posted December 5, 2006 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 Quote Link to comment Share on other sites More sharing options...
0 dhyeggo Posted December 5, 2006 Author Report Share Posted December 5, 2006 caro amigo kandrade...muito obrigado...já passei a entender as outras funcoes...muito obrigado mesmo...valeu... Quote Link to comment Share on other sites More sharing options...
0 dhyeggo Posted December 6, 2006 Author Report Share Posted December 6, 2006 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"); } Quote Link to comment Share on other sites More sharing options...
0 kandrade Posted December 6, 2006 Report Share Posted December 6, 2006 /* 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 ifabraco!!! Quote Link to comment Share on other sites More sharing options...
0 dhyeggo Posted December 6, 2006 Author Report Share Posted December 6, 2006 cara blza..show de bola..agora entendi certinho...o esquema ali está no if...brigadao novamente..valeu Quote Link to comment Share on other sites More sharing options...
0 William Rodrigues Posted December 7, 2006 Report Share Posted December 7, 2006 Salve!Porém, sua função gera lixo em memória! :(Abraços,William Rodrigues Quote Link to comment Share on other sites More sharing options...
0 dhyeggo Posted December 11, 2006 Author Report Share Posted December 11, 2006 teria alguma ideia para me ajudar a resolver..grato... Quote Link to comment Share on other sites More sharing options...
0 kandrade Posted December 11, 2006 Report Share Posted December 11, 2006 é 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. } Quote Link to comment Share on other sites More sharing options...
0 Denis Bittencourt Muniz Posted December 11, 2006 Report Share Posted December 11, 2006 é 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 Quote Link to comment Share on other sites More sharing options...
Question
dhyeggo
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
Link to comment
Share on other sites
11 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.