• 0
Sign in to follow this  
Guest Nul

de lista encadeada simples, para duplamente encadeada circular

Question

Guest Nul

Estou tendo um problema. Tenho o seguinte código:

//Objetivo: fazer uma lista duplamente encadeada

//entrada: número indefinido de elmentos

#include <stdio.h>

#include <conio.c>

/**Estrutura auto-referenciada**/

typedef struct s_celula

{

float numero;

struct s_celula *prox;//ponteiro para uma próxima estrutura do mesmo tipo

}celula;

typedef celula *lista;// O tipo lista representa um nó da lista e a estrutura de lista encadeada é representada pelo ponteiro para seu primeiro elemento (tipo lista*).

/******Protótipos*******/

void inicializa(lista *l);

void adicionaTopo (lista *l, float x);

void percorrer (lista *l);

void deletar (lista *l,float x);

int menu ();

int main (void)

{

//Declrações:

lista central;

int opcao,contador=1;

float numero;

//Instruções

inicializa(&central);

do

{

opcao=menu();

if (opcao==1)

{

printf("%do Elemento:" ,contador);

scanf("%f",&numero);

system("cls");

adicionaTopo(&central,numero);

contador++;

}

else if (opcao==2)

{

do

{

printf("Informe o numero a deletar: ");

scanf("%f",&numero);

system("cls");

}while(numero==0);

deletar (&central,numero);

}

else if (opcao==3)

{

percorrer(&central);

}

}while (opcao!=4);

return 0;

}

/***Função de inicialização********

Objetivo: inicializar a lista

Parâmetro: endereço da list

retorno:-

**********************************/

void inicializa(lista *l)

{

*l=NULL;

}

/***Função para Adicionar Elemento no topo**************************************

Objetivo: Adicionar elemento no topo da lista . Para cada elemento

inserido na lista, devemos alocar dinamicamente a memória necessária

para armazenar o elemento e encadeá-lo na lista existente.

Parâmetro: endereço da lista; número a ser inserido

retorno:-

*******************************************************************************/

void adicionaTopo (lista *l, float x)

{

//Declrações:

celula *tmp; //Apontador para a célula

//Instruções

tmp=(celula*)malloc(sizeof(celula));//Aloca mais uma posição

tmp->prox=*l;

(*l)=tmp;

(*l)->numero=x;

}

int menu ()

{

//Declarações:

int opcao;

//Instruções:

do

{

printf("\n1 para adicionar um novo elemento");

printf("\n2 para remover um elemento");

printf("\n3 para ver todos os elementos");

printf("\n4 para sair\n");

scanf("%d",&opcao);

system("cls");

}while (opcao!=1&&opcao!=2&&opcao!=3&&opcao!=4);

return opcao;

}

/*******Função para percorrer a lista*******

Objetivo: percorrer a lista e mostrar todos os elementos

Parãmetros: endereço da lits

*******************************************/

void percorrer (lista *l)

{

//Declarações:

lista tmp;

int contador=1;

//Instruções:

tmp=*l;

while (tmp!=NULL)

{

printf("\n%do elemento:%.2f",contador,tmp->numero);

contador++;

tmp=tmp->prox;

}

getch();

system("cls");

}

/**************Função para deletar um elemento**********

Objetivo: deletar um elemento desejado

parãmetros: a lista e o número

********************************/

void deletar (lista *l,float x)

{

//Declarações:

lista ant=NULL;

lista p=*l;

//Instruções

while (p!=NULL&&p->numero!=x)

{

ant=p;

p=p->prox;

}

if (p==NULL)

{

}

else if (ant==NULL)//retira elemento do inicio

{

*l=p->prox;

}

else

{

ant->prox=p->prox;

}

free(p);

}

preciso transformar ela em uma lista duplamente encadeada circular e não estou conseguindo.Aguma sugestão?

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this