Ir ao conteúdo
  • Cadastre-se

C Lista duplamente encadeada com erro


Dedekid96

Posts recomendados

#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!

Link para o comentário
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.

 

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!