Estrutura de dados - programa não roda! [RESOLVIDO]

1. Estrutura de dados - programa não roda! [RESOLVIDO]

tiago dos santos
serial10

(usa Ubuntu)

Enviado em 11/04/2011 - 11:53h

oi pesoal!
to tentando fazer o programa rodar no code blocks mas não consigo se puderem me ajudar eu agradeço...

eu tmb estava tentando des de onte fazer a busca retornar um ponteiro para o elemento encontrado ou um para o sentinela caso não encontra mas desisti...

se alguem puder me ajudar eu ficarei muito grato!

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


struct t{
int valor;
struct t *prox, *ant;
};
typedef struct t TElemento;

void Imprime(TElemento *lista){
TElemento *aux;

aux = lista;

while (aux){
printf("%d\n",aux->valor);
aux = aux->prox;
}
}

int Busca(TElemento *lista,int chave){
TElemento *aux;

aux = lista;
while ((aux)&&(aux->valor!=chave))
aux = aux->prox;

if (aux) return 1;
else return 0;
}

int Remove(TElemento **lista, int chave){
TElemento *atual;

if (!(*lista)) return 0;
else{
atual = (*lista);

while ((atual) && (atual->valor!=chave))
atual = atual->prox;

if (atual){
if (atual->prox) {
atual->prox->ant = atual->ant;
}
if (atual->ant){
atual->ant->prox = atual->prox;
}
else (*lista) = atual->prox;

free(atual);
return 1;
}
else return 0;

}
}

int Insere(TElemento **lista,int chave){
TElemento *novo;
novo = (TElemento *) malloc(sizeof(TElemento));
if (!novo){
return 0;
}
else{
novo->valor = chave;
novo->prox = (*lista);
novo->ant = NULL;

if (*lista) (*lista)->ant = novo;
(*lista) = novo;

return 1;
}
}

TElemento* CriarLista(){

TElemento *lista;
lista = ((TElemento*)malloc(sizeof(TElemento)));
lista->prox = lista;
lista->ant = lista;

return lista;
}


int main(){
TElemento *lista;
lista = CriarLista();
int op, chave;

do{
printf("Escolha uma opcao:\n");
printf("[1] Inserir elemento\n");
printf("[2] Remover elemento\n");
printf("[3] Buscar elemento\n");
printf("[4] Imprimir lista\n");
printf("[5] Sair\n");
scanf("%d",&op);

switch (op){
case 1:{
printf("Qual numero deseja inserir? ");
scanf("%d",&chave);
Insere(lista ,chave);
break;
}
case 2:{
printf("Qual numero deseja remover? ");
scanf("%d",&chave);
Remove(lista,chave);
break;
}
case 3:{
printf("Qual numero deseja procurar? ");
scanf("%d",&chave);
Busca(lista,chave);
break;

}
case 4:{
Imprime(lista);
break;
}
}//switch
}while(op != 5);


return 0;


}


  


2. MELHOR RESPOSTA

Ramon
RamonMedeiros

(usa Ubuntu)

Enviado em 11/04/2011 - 12:13h

Nas funções insere e remove, deve ser passado o endereço do ponteiro:

Insere(&lista ,chave);

Remove(&lista,chave);

Isso acontece porque você esperou um duplo ponteiro na declaração.

Além disso, você deve tem q modificar as funções Imprime():

while(aux!=NULL) senão vai cair em loop infinito

e Insere():

você tem q colocar NULL na próxima, sempre q for o ultimo elemente, senão loop infinito!

3. Re: Estrutura de dados - programa não roda! [RESOLVIDO]

tiago dos santos
serial10

(usa Ubuntu)

Enviado em 11/04/2011 - 12:52h

pow eu achava ke while(aux)fosse igual ao while(aux!=NULL) ke sem colocar o !=NULL fosse funcionar...

vlw obrigado pela ajuda!


4. Re: Estrutura de dados - programa não roda! [RESOLVIDO]

Ramon
RamonMedeiros

(usa Ubuntu)

Enviado em 11/04/2011 - 13:14h

De nada!


5. Re: Estrutura de dados - programa não roda! [RESOLVIDO]

Alan Souza
alan-souza

(usa Slackware)

Enviado em 11/04/2011 - 13:19h

Marque o tópico como RESOLVIDO e dê os créditos ao nosso amigo!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts