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

de lista encadeada simples, para duplamente encadeada circular


Guest Nul

Pergunta

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?

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...