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(¢ral);
do
{
opcao=menu();
if (opcao==1)
{
printf("%do Elemento:" ,contador);
scanf("%f",&numero);
system("cls");
adicionaTopo(¢ral,numero);
contador++;
}
else if (opcao==2)
{
do
{
printf("Informe o numero a deletar: ");
scanf("%f",&numero);
system("cls");
}while(numero==0);
deletar (¢ral,numero);
}
else if (opcao==3)
{
percorrer(¢ral);
}
}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
Pergunta
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(¢ral);
do
{
opcao=menu();
if (opcao==1)
{
printf("%do Elemento:" ,contador);
scanf("%f",&numero);
system("cls");
adicionaTopo(¢ral,numero);
contador++;
}
else if (opcao==2)
{
do
{
printf("Informe o numero a deletar: ");
scanf("%f",&numero);
system("cls");
}while(numero==0);
deletar (¢ral,numero);
}
else if (opcao==3)
{
percorrer(¢ral);
}
}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.