Ir ao conteúdo
  • Cadastre-se
João Victor Simonassi Farias

Struct - problema na compilação (muitos problemas)

Recommended Posts

Olá galera! Preciso fazer um projeto para a faculdade que vai utilizar os conceitos de alocamento dinâmico de memória, usando listas encadeadas, pilha... essas coisas. Nunca trabalhei com algo desse tipo e buscando uns vídeos no youtube, fui fazendo o passo a passo conforme explicado. Segue o código:

 

#include <stdio.h>    
#include <stdlib.h>
#include <conio.h>   
#include <windows.h> 


//CRIANDO A ESTRUTURA DO TIPO_LISTA
struct Tipo_Lista {  //Criando uma estrutura, vou poder usar variáveis do tipo lista, que irão suportar os dois itens abaixo 
		int cod; // Código que vamos buscar, pesquisar, imprimir...
		struct Tipo_lista *Prox;  //O ponteiro vai conter toda a estrutura	
}


struct Tipo_Lista *Primeiro; //Aponta para o primeiro elemento inserido na lista
struct Tipo_Lista *Ultimo;  //Aponta para o último elemento inserido na lista
 

//FUNÇÃO PARA CRIAR A LISTA VAZIA
void FLVazia () {   //Função para finalmente criar a lista vazia
	struct Tipo_Lista *aux;   // Declaração de uma variável auxiliar do tipo lista                                                                                             ALOCA  #   TAMANHO DE
	aux = (struct Tipo_Lista*)malloc(sizeof(struct Tipo_lista));   //alocando espaço na memória para "aux" com a função malloc    #####  VARIÁVEL = (TIPO DO ARQUIVO/VARIÁVEL) MALLOC (   SIZEOF  (TIPO DO ARQUIVO OU NOME DA VARIÁVEL)
	Primeiro = aux;
	Ultimo = Primeiro; //neste momento as três variáveis apontam para o local de origem da lista, o local de partida 	
}

//FUNÇÃO PARA INSERIR UM ELEMENTO
void Insere (int x) { //x = ao novo elemento a inserir, no caso o "cod", declarado na primeira estrutura
	struct Tipo_Lista *aux;
	aux = (struct Tipo_Lista*)malloc(sizeof(struct Tipo_lista));
	aux->cod = x; // a seta (->) é porque nesse caso é um apontador. Se fosse um registrador normal, seria o "."
	Ultimo->Proximo  = aux; //Agora só a variável "Ultimo" faz ligação com "aux", que é o próximo item
	Ultimo = Ultimo->Prox; //"Ultimo" recebe a posição de memória do ultimo item que foi inserido  ###    Ele saiu da posição que se encontrava na função "FLVazia"
	aux->Prox = NULL; //Serve como condição de parada
}

//FUNÇÃO PARA IMPRIMIR
void Imprime () {
	struct Tipo_Lista *aux;
	aux = Primeiro->Prox; //Recebe o "Primeiro.Prox", pra cair na segunda posição da fila. Só observar a primeira função!  
	
		while(aux!= NULL) { // Enquanto a lista não chegar ao fim, ele fica dentro do laço
			printf("Item %d", aux ->cod);
			aux = aux->Prox;  //IMPORTANTE! "aux" recebe o valor da próxima posição da lista. Desta forma, a lista pode andar.
		}
}
//FUNÇÃO PARA PESQUISAR
void Pesquisa (int x) {  // "x" vai ser o item que você quer procurar (ELE VAI SER COMPARADO COM TODOS OS ITENS DA LISTA)
	struct Tipo_Lista *aux;//De novo rs
	int = flag = 0; //O "flag" vai dar apenas um apoio pra saberse ele acgou ou não o item. Não entendi porque o nome é FLAG, se a tradução é BANDEIRA
	aux = Primeiro->Prox; //Primeira posição de memória que tem um item inserido
	
	while(aux != NULL){//Repete testando os espaços da lista. Se encontrou, ele para de procurar.
		if(aux->cod == x){//Se ele encontrou o item "x" no espaço de memória "aux->cod", ele entra na condicionál 
			printf("Achou o item %d", x);
			flag=1; //Flag vira um para que ele não caia naquele if láááá de baixo.
			aux = NULL //aux = NULL para sair do while
		}
		else{
			aux = aux->Prox; // Se ele não encontrou naquela posição (A que estava no if aqui em cima) ele anda uma posição e testa novamente. Se não, de novo... até o fim da lista.
		}
	}
	if(!flag){ //Percorreu a lista toda e não encontrou    (LEMBRANDO QUE 0=VERDADEIRO E 1= FALSO)
		printf("Item %d, não se encontra na lista", x);
	}
}





main() {

}

Este é o vídeo que estava assistindo (parte1 e 2):

 

O do cara no vídeo, compilou de boa, mas o meu deu muitos erros.

 

   Alguém tem alguma ideia de qual é o problema?

 

Sem título.png

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>


//CRIANDO A ESTRUTURA DO TIPO_LISTA
struct Tipo_Lista {  //Criando uma estrutura, vou poder usar variáveis do tipo lista, que irão suportar os dois itens abaixo
		int cod; // Código que vamos buscar, pesquisar, imprimir...
		struct Tipo_Lista *Prox;  //O ponteiro vai conter toda a estrutura
};


struct Tipo_Lista *Primeiro; //Aponta para o primeiro elemento inserido na lista
struct Tipo_Lista *Ultimo;  //Aponta para o último elemento inserido na lista


//FUNÇÃO PARA CRIAR A LISTA VAZIA
void FLVazia () {   //Função para finalmente criar a lista vazia
	struct Tipo_Lista *aux;   // Declaração de uma variável auxiliar do tipo lista                                                                                             ALOCA  #   TAMANHO DE
	aux = (struct Tipo_Lista*)malloc(sizeof(struct Tipo_Lista));   //alocando espaço na memória para "aux" com a função malloc    #####  VARIÁVEL = (TIPO DO ARQUIVO/VARIÁVEL) MALLOC (   SIZEOF  (TIPO DO ARQUIVO OU NOME DA VARIÁVEL)
	Primeiro = aux;
	Ultimo = Primeiro; //neste momento as três variáveis apontam para o local de origem da lista, o local de partida
}

//FUNÇÃO PARA INSERIR UM ELEMENTO
void Insere (int x) { //x = ao novo elemento a inserir, no caso o "cod", declarado na primeira estrutura
	struct Tipo_Lista *aux;
	aux = (struct Tipo_Lista*)malloc(sizeof(struct Tipo_Lista));
	aux->cod = x; // a seta (->) é porque nesse caso é um apontador. Se fosse um registrador normal, seria o "."
	Ultimo->Prox  = aux; //Agora só a variável "Ultimo" faz ligação com "aux", que é o próximo item
	Ultimo = Ultimo->Prox; //"Ultimo" recebe a posição de memória do ultimo item que foi inserido  ###    Ele saiu da posição que se encontrava na função "FLVazia"
	aux->Prox = NULL; //Serve como condição de parada
}

//FUNÇÃO PARA IMPRIMIR
void Imprime () {
	struct Tipo_Lista *aux;
	aux = Primeiro->Prox; //Recebe o "Primeiro.Prox", pra cair na segunda posição da fila. Só observar a primeira função!

		while(aux!= NULL) { // Enquanto a lista não chegar ao fim, ele fica dentro do laço
			printf("Item %d", aux ->cod);
			aux = aux->Prox;  //IMPORTANTE! "aux" recebe o valor da próxima posição da lista. Desta forma, a lista pode andar.
		}
}
//FUNÇÃO PARA PESQUISAR
void Pesquisa (int x) {  // "x" vai ser o item que você quer procurar (ELE VAI SER COMPARADO COM TODOS OS ITENS DA LISTA)
	struct Tipo_Lista *aux;//De novo rs
	int flag = 0; //O "flag" vai dar apenas um apoio pra saberse ele acgou ou não o item. Não entendi porque o nome é FLAG, se a tradução é BANDEIRA
	aux = Primeiro->Prox; //Primeira posição de memória que tem um item inserido

	while(aux != NULL){//Repete testando os espaços da lista. Se encontrou, ele para de procurar.
		if(aux->cod == x){//Se ele encontrou o item "x" no espaço de memória "aux->cod", ele entra na condicionál
			printf("Achou o item %d", x);
			flag=1; //Flag vira um para que ele não caia naquele if láááá de baixo.
			aux = NULL; //aux = NULL para sair do while
		}
		else{
			aux = aux->Prox; // Se ele não encontrou naquela posição (A que estava no if aqui em cima) ele anda uma posição e testa novamente. Se não, de novo... até o fim da lista.
		}
	}
	if(!flag){ //Percorreu a lista toda e não encontrou    (LEMBRANDO QUE 0=VERDADEIRO E 1= FALSO)
		printf("Item %d, não se encontra na lista", x);
	}
}





main() {

}

 

Tava cheio de lugar escrito Tipo_lista em vez de Tipo_Lista;

Faltou o ponto e vírgula depois de definir a struct e depois de setar aux = NULL na void pesquisa;

Tinha um lugar escrito Ultimo->Proximo sendo que deveria ser Ultimo->Prox;

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

×