Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

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

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

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...