Ir para conteúdo
Fórum Script Brasil
  • 0

LISTA duplamente encadeada


Rodson

Pergunta

fiz o código abaixo de uma lista duplamente encadeada e acontece o seguinte problema no linux o programa roda perfeitamente.

No windows o código dá erro na execução, descobri que o erro acontece quando vou inserir um terceiro elemento na lista.

o que seria??

#include <stdio.h>

#include <stdlib.h>

typedef struct List_dupla{

int h;

struct List_dupla* ant;

struct List_dupla* pro;

} *list;

//----------------Construtoras

list Nil(void){return NULL;}

list Cons (int e, list I){

list aux = (list)malloc(sizeof(list));

aux->h = e;

if (!I){

aux->ant=Nil();

aux->pro=Nil();

}

else{

aux->ant=I->ant;

aux->pro=I;

I->ant=aux;

}

return aux;

}

//----------------acesssoras

int head(list l){ return (int)l->h ;}

list proximo (list l){ return l->pro; }

list anterior (list l){ return l->ant; }

int list_empty(list l){ return l==Nil() ;}

// ---------- extras

list insert_at(int pos, int x,list l){

list aux;

int cont=1;

aux=l;

if(pos<=0)

return Cons(x,l);

while((cont<pos) && aux->pro!=Nil()){

aux = aux->pro;

cont++;

}

aux->pro=Cons(x,aux->pro);

return l;

}

list list_remove(int x, list l){

list aux=l;

if (list_empty(l)||(x==head(l)&&(l->ant==l->pro))) // caso lista seja vazia

return Nil(); // caso a lista tenha apenas 1 elemento;

while ( head(aux) != x) {

if (aux==Nil()) //não encontrou o elemento retorna a propria lista sem auteração;

return l;

aux = proximo(aux);

}

if (anterior(aux)) { // se existir um anterior a aux

anterior(aux)->pro=aux->pro; }

if (proximo(aux)){ // se existir um proximo a aux

aux=proximo(aux);

aux->ant=(anterior(aux))->ant;

}

if (x==head(l))

return proximo(l);

return l;

}

void show(list l){

list aux=l;

if (list_empty(l))

return ;

do{

printf(" %d-",head(aux));

aux=proximo(aux);

}while(aux!=Nil());

}

int main(){

list c=Nil();

show©;

c=Cons(60,c);

c=Cons(50,c);

c=Cons(40,c);

c=Cons(30,c);

c=Cons(20,c);

c=Cons(10,c);

show©;

c=list_remove(10,c);

printf("\nMostra de novo");

show©;

c=insert_at(1,5,c);

printf("\nMostra de novo");

show©;

return 0;

}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,7k
×
×
  • Criar Novo...