Ir ao conteúdo
  • Cadastre-se
Dedekid96

C Lista duplamente encadeada com erro

Recommended Posts

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

//declarando as variavies de ponteiro
typedef struct ponto{

	char nome [60];
	//ponteiro de sequencia
	struct i_ponto * proximo;

	//ponteiro para informar o valor na lista de ordem ciclica
	struct i_ponto * anterior;
}t_lista;

//declarando inicio da lista
typedef struct lista{
	 t_lista * inicio = NULL;
	 t_lista * fim = NULL;
}i_lista;

//inicializar lista
void executar_lista(i_lista * n_lista){
	n_lista -> inicio = NULL;
	n_lista -> fim = NULL;
}

//criação da estrutura para inserir o valor primario na lista
void inserir_elemento(i_lista * n_lista){
	t_lista * novo_dado;
	novo_dado = t_lista;

	printf("Digite o nome da série: ");
	scanf("%s", &novo_dado -> nome);

//declarando apontamento de direção do dado inserido com if e else
	novo_dado -> proximo = NULL;
	novo_dado -> anterior = NULL;

	if(n_lista -> inicio == NULL){
		n_lista -> inicio = novo_dado;
		n_lista -> fim = novo_dado;

	}
	else{
		n_lista -> inicio -> anterior = novo_dado;
//ao invés de zerar os dados como anteriormente, aponta os novos dados o volor inicial e proximo.
		novo_dado -> proximo = n_lista -> inicio;
		n_lista -> inicio = novo_dado;
	}
}

//criação da estrutura para inserir o ultimo valor na lista
void inserir_elemento_fim(i_lista * n_lista){
	t_lista * novo_dado;
	novo_dado = t_lista;

	printf("Digite o nome da série: ");
	scanf("%s", &novo_dado -> nome);

//declarando em qual posição da lista o novo dado será inserido com if e else(duplo encadeamento)
	novo_dado -> proximo = NULL;
	novo_dado -> anterior = NULL;

	if(n_lista -> inicio == NULL){
		n_lista -> inicio = novo_dado;
		n_lista -> fim = novo_dado;
	}
	else{
		n_lista -> fim -> proximo = novo_dado;
		novo_elemento -> anterior =n_lista -> fim;
		n_lista -> fim = novo_dado;
	}
}

//imprimir toda a lista do inicio na tela
void imprimir_lista_inicio(i_lista * n_lista){
	t_lista * aux;

	if(n_lista -> inicio == NULL){
		printf("Não há dados na lista\n");
	}
	else{
		aux = n_lista -> inicio;
		while(aux != NULL){
			printf("Séries: %s\n", aux -> nome);
			aux = aux -> proximo;
		}
		printf("Fim da lista!");
	}
}

//imprimir toda a lista do fim na tela
void imprimir_lista_fim(i_lista * n_lista){
	t_lista * aux;

	if(n_lista -> fim == NULL){
		printf("Não há dados na lista\n");
	}
		aux = n_lista -> fim;
		while(aux != NULL){
			printf("Séries: %s\n", aux -> nome);
			aux = aux -> anterior;
		}
		printf("Fim da lista!");
}

Boa tarde, pessoal

 

Alguém poderia me ajudar a saber o porque minha estrutura não está reconhecendo minhas variáveis "inicio" e "fim".

 

Obrigado!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, todos.

 

Os campos (variáveis) nas estruturas não admitem inicialização. Isso é uma dos erros sintáticos mais comuns quando se associa os campos (fields) a lógica da declaração de variáveis. Declarações de estruturas são; declarações de esquema de dados, e não dados de memória principal, como é nos casos das variáveis. (Ref.: N1601 - 2018)

 

23 horas atrás, Dedekid96 disse:

//declarando inicio da lista 
typedef struct lista{ 
	t_lista * inicio = NULL; /* <--[#ERRO ISO C */
	t_lista * fim = NULL;    /* <--[#ERRO ISO C */
	}	
	
	i_lista;

 

 

Ps.: Esse é o erro que logo vi, assim não procurei por mais nenhum depois desse.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso então, eu tenho que inicializar minhas variáveis que etão no struct antes de iniciar meu struct? 

Compartilhar este post


Link para o post
Compartilhar em outros sites

... eita, você não deve inicializar as variáveis dentro do esquema da estrutura.

As estruturas não admitem inicialização. Declarações de estruturas são; declarações de esquema de dados, e não dados (Ref.: N1601 - 2018)

 

esquema de dados:

//declarando inicio da lista 
typedef struct lista { 
	t_lista * inicio; 
	t_lista * fim;
	}	
	
	i_lista;

 

... para declarar um tipo desse tipo i_lista.

dados:

//declarando uma variável do tipo lista 
i_lista minha_lista = {
	.inicio =  NULL,
	.fim =  NULL
	}

 

 

adicionado 8 minutos depois

Não confunda declaração de estrutura, com declaração de um tipo de estrutura,

pois o primeiro é apenas o esquema, e o segunda é a variável do esquema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×