Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

viciado

Lista Encadeada

Recommended Posts

Dúvida sobre lista em C. Como posso inserir elementos e o elemento inserido ser sempre o último ?

 

Ex:

ins(A)  ---  (A)
ins(B)  ---  (A,B)
ins(C)  ---  (A,B,C)
.
.
.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Percorra a lista com um ponteiro auxiliar e adicione ao próximo do último elemento da lista.

Basicamente tu faz um loop para definir aux para aux->proximo até aux->proximo ser == NULL, então tu adiciona o próximo elemento em aux->proximo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Percorra a lista com um ponteiro auxiliar e adicione ao próximo do último elemento da lista.

Basicamente tu faz um loop para definir aux para aux->proximo até aux->proximo ser == NULL, então tu adiciona o próximo elemento em aux->proximo.

 

Seria assim ?

 

void ins(FILA *F, int n){
     FILA *aux;
     aux = (FILA*) malloc(sizeof(FILA));
     while(aux->prox != NULL){
                     aux = aux->prox;
                     aux->n = n;
                           }
     *F = aux;    
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quase, faça assim:

void ins(FILA *F, int n){
     FILA *aux;
     aux = Raiz_Da_Fila(F);

     while(aux->prox != NULL) //primeiro percorremos a fila.
          aux = aux->prox;

     aux = Alocar_Nó(); //agora alocamos o nó
     aux->prox = NULL;   //e atribuimos os valores
     aux->n = n;   
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quase, faça assim:

void ins(FILA *F, int n){
     FILA *aux;
     aux = Raiz_Da_Fila(F);

     while(aux->prox != NULL) //primeiro percorremos a fila.
          aux = aux->prox;

     aux = Alocar_Nó(); //agora alocamos o nó
     aux->prox = NULL;   //e atribuimos os valores
     aux->n = n;   
}

aux = Raiz_Da_Fila(F);

 

Não entendi essa parte

Compartilhar este post


Link para o post
Compartilhar em outros sites

To ficando loco (hauhauhau). Fiz essas funções para testar e o programa finaliza sozinho, da erro e fecha

 

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

typedef struct cel{
        int n;
        struct cel *prox;
        }celula;
        
void insere(celula **p, int x){
     celula *aux;
     aux = (celula*) malloc(sizeof(celula));
     aux->n = x;
     aux->prox = (*p)->prox;
     (*p)->prox = aux;    
}

void imprima(celula **p){
     celula *aux;
     for(aux = (*p)->prox; aux != NULL; aux = aux->prox)
             printf("%d \n",aux->n);    
}

int main(){
    celula *P;
    insere(&P,10);
    insere(&P,15);
    imprima(&P);
    system("PAUSE");
    return 0;   
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uni os seus tópicos, afinal, ambos tratam do mesmo assunto e do mesmo programa.

 

aux = Raiz_Da_Fila(F);

Não entendi essa parte

A fila tem que ter uma raiz, isto é, ela tem que começar em algum lugar!

 

De uma olhada nesse exemplo, de uma lista encadeada:

http://codepad.org/tlQGsL0t

foi retirado deste tópico e o código contém erros propositadamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu utilizo o Dev. Não aparece nenhuma mensagem de erro o programa simplesmente da erro e fecha

 

Analisei melhor o código e ainda não entendi o problema

 

Estou agora com Falha de Segmentação

 

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

typedef struct cel{
        int n;
        struct cel *prox;
        }celula;
        
void insere(celula **p, int n){
     celula *aux;
     aux = *p;

     while(aux != NULL) //primeiro percorremos a fila.
          aux = aux->prox;

     aux = (celula*) malloc(sizeof(celula)); //agora alocamos o nó
     aux->prox = NULL;   //e atribuimos os valores
     aux->n = n;   
}

void imprima(celula **p){
     celula *aux;
     for(aux = (*p)->prox; aux != NULL; aux = aux->prox)
             printf("%d \n",aux->n);    
}

int main(){
    celula *P;
    printf("Inserindo 10\n");
    insere(&P,10);
    printf("Inserindo 15\n");
    insere(&P,15);
    printf("mostrando a lista:\n");
    imprima(&P);
    system("PAUSE");
    return 0;   
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.