dhyeggo Postado Dezembro 4, 2006 Denunciar Share Postado Dezembro 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 ); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 666VeNoM Postado Dezembro 5, 2006 Denunciar Share Postado Dezembro 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dhyeggo Postado Dezembro 5, 2006 Autor Denunciar Share Postado Dezembro 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... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Dezembro 5, 2006 Denunciar Share Postado Dezembro 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dhyeggo Postado Dezembro 5, 2006 Autor Denunciar Share Postado Dezembro 5, 2006 caro amigo kandrade...muito obrigado...já passei a entender as outras funcoes...muito obrigado mesmo...valeu... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dhyeggo Postado Dezembro 6, 2006 Autor Denunciar Share Postado Dezembro 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"); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Dezembro 6, 2006 Denunciar Share Postado Dezembro 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!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dhyeggo Postado Dezembro 6, 2006 Autor Denunciar Share Postado Dezembro 6, 2006 cara blza..show de bola..agora entendi certinho...o esquema ali está no if...brigadao novamente..valeu Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Dezembro 7, 2006 Denunciar Share Postado Dezembro 7, 2006 Salve!Porém, sua função gera lixo em memória! :(Abraços,William Rodrigues Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dhyeggo Postado Dezembro 11, 2006 Autor Denunciar Share Postado Dezembro 11, 2006 teria alguma ideia para me ajudar a resolver..grato... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Dezembro 11, 2006 Denunciar Share Postado Dezembro 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. } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Bittencourt Muniz Postado Dezembro 11, 2006 Denunciar Share Postado Dezembro 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
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 para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados
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.