Ir ao conteúdo
  • Cadastre-se

C <suporte pra explicar o que esta acontecendo no codigo, se possivel com esquema>


MPR00

Posts recomendados

void XYZ(TLISTA *pLista)

{

        struct TNO *aux1, *aux2;

 

        if ((*pLista) != NULL)

        {

        aux1 = (*pLista);

 

        if (aux1->prox == NULL)

        {

             free(aux1);              

             (*pLista) = NULL;

        }

        else

        {

            while (aux1->prox->prox != NULL)   

            {                              

                 aux1 = aux1->prox;

            }

            aux2 = aux1->prox;

            aux1->prox = NULL;

            free(aux2);     

 

        }

}}

Link para o comentário
Compartilhar em outros sites

Esse código remove o último elemento de uma lista encadeada:

void XYZ(TLISTA *pLista)
{
        struct TNO *aux1, *aux2;
        
        if ((*pLista) != NULL) 
        {
        aux1 = (*pLista); //aux1 aponta para o comeco da lista
 
        if (aux1->prox == NULL) //verifica se existe outro elemento alem do primeiro na lista
        {
             //caso a lista so tenha um elemento, apague este elemento 
             free(aux1);              
             //agora a lista toda nao tem nenhum elemento
             (*pLista) = NULL;
        }
        else
        {  
            //caso a lista tenha outros elementos, percorre ela ate o penultimo 
            while (aux1->prox->prox != NULL)   
            {                              
                 aux1 = aux1->prox;
            }
            //apos o laco, aux1 deve connter o penultimo elemento
            aux2 = aux1->prox; //faz aux2 apontar para o ultimo elemento
            //remove o ultimo da lista
            aux1->prox = NULL;
            //apaga o ultimo elemento da memoria.
            free(aux2);     
 
        }
}}

 

Link para o comentário
Compartilhar em outros sites

@Flávio Pedroza Vê esse meu código aqui

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

/* Constantes */
#define TMAX_CARACTERE 10
#define TMAX_NUMERO 10

/* Tipos */
typedef struct contato
{
    char nome[TMAX_CARACTERE];
    char numero[TMAX_NUMERO];
}TContato;

typedef struct lista
{
    TContato info;
    struct lista *proximo;
}TLista;


int main()
{
    /* Ponteiros da lista */
    TLista *inicio=NULL,*ponteiro=NULL;
    char tecla;
    /* Pega os contatos */
    do
    {
        TContato info;
        puts("Digite o nome da pessoa.");
        scanf("%s",info.nome);
        getchar();
        puts("Digite o numero da pessoa.");
        scanf("%s",info.numero);
        getchar();
        if(!inicio)
        {
            inicio=malloc(sizeof(TLista));
            if(!inicio)
            {
                fprintf(stdout,"\nErro1.\n");
                getchar();
                return(1);
            }
            inicio->proximo=NULL;
            inicio->info=info;
            ponteiro=inicio;
        }
        else
        {
            TLista *aux=malloc(sizeof(TLista));
            if(!aux)
            {
                fprintf(stdout,"\nErro2.\n");
                getchar();
                return(1);
            }
            aux->info=info;
            aux->proximo=NULL;
            ponteiro->proximo=aux;
            ponteiro=aux;
        }
        puts("Digite 1 para sair e 2 para continuar.");
        scanf("%c",&tecla);
        getchar();
    }while(tecla=='2');
    /* Mostra a lista */
    ponteiro=inicio;
    while(ponteiro)
    {
        printf("\nNome:\t%s\nTelefone:\t%s\n",ponteiro->info.nome,ponteiro->info.numero);
        ponteiro=ponteiro->proximo;
    }
    getchar();
    /* Limpa a lista */
    ponteiro=inicio;
    while(ponteiro)
    {
        inicio=ponteiro->proximo;
        free(ponteiro);
        ponteiro=inicio;
    }
    return(0);
}

trabalhar com ponteiros já é complicado, e só com metade do código fica pior ainda.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...