Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Raphael1001fly

Lista encadeada no DEV-C++

Recommended Posts

Boa Tarde, estou com um problema para compilar esse programa, ele roda e não da nenhum erro porem quando eu alimento ele com algum valor o console trava e fecha sozinho. Deve ser algum erro desconhecido. vou jogar meu código comentado para vocês darem uma olhada.

 

 

 

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

//Criando a Estrutura da Lista
struct Tipo_lista {
	
	int cod;
	struct Tipo_lista *prox;
};

//Determinando um ponteiro para o primeiro e o ultimo item da lista
struct Tipo_lista *primeiro;
struct Tipo_lista *ultimo;


//Criando a Função de Lista Vazia

void Lista_vazia(){
    //faz e estrutura Tipo_lista apontar para aux
	struct Tipo_lista *aux;
	
    /* Antes do malloc diz que eu quero alocar uma estrutura do tipo lista e depois (o malloc é o comando para alocar)
    e depois do malloc o sizeof "do tamanho de': nesse caso é do tamanho que a estrutura Tipo_lista vai suportar	*/
	aux=(struct Tipo_lista*)malloc(sizeof(struct Tipo_lista));
	
    /* A variavel primeiro passa a valer aux e ultimo passa a valer primeiro */
    primeiro=aux;
	ultimo=primeiro;
	 
	}
	
void insere (int x){
	struct Tipo_lista *aux;
	aux=(struct Tipo_lista*)malloc(sizeof(struct Tipo_lista));
	
	// Nessa primeira parte ele pega o valor de ( x ) e joga para ( cod )  - aux recebe o valor porque aponta para ( cod )
	aux->cod=x;
	
	// Nessa primeira parte ele pega o valor de ( aux ) e joga para ( prox )  - ultimo recebe o valor porque aponta para ( prox )
	ultimo->prox=aux;
	
	// Nessa primeira parte ele diz que ultimo é igual ao ( prox ) que aponta para o ( ultimo )
	ultimo=ultimo->prox;
	
	//NULL é a condição de parada apos a inserção do item
	aux->prox=NULL;
}	

void imprime(){
	struct Tipo_lista *aux;
	/* Determinamos que aux= primeiro->prox  porque na função Lista Vazia um aux já foi criado e nao recebeu nenhum valor 
	Então o imprime começa a contar o 2 aux da função Inserir ou seja ele conta a 2 posição, por isso aux= primeiro->prox*/
	aux=primeiro->prox;
	
	/* Enquanto aux for diferente de NULL e porque nos temos items na lista  
	por isso en cada looping determinamos que aux = aux->prox assim ele vai escaneando todos items da lista ate chegar em NULL*/
	while(aux != NULL){
		
		printf("Item %d",aux->cod);
		aux=aux->prox;
	}
}

int pesquisa(int x){
	struct Tipo_lista *aux;
	aux=primeiro->prox;
	int flag = 0;
	while(aux != NULL){
	
		if(aux->cod==x){
			
			printf("ITEM ENCONTRADO %d", x);
			flag = 1;
			aux = NULL;
		}
		
		else{
			aux=aux->prox;
		}
		
		if(flag == 0){
			printf("ITEM NÃO ENCONTRADO");
		}
	}
	
	
}
	
	
int main(int argc, char *argv[]){	
	char op = '2';
	int codigo;
	
	//laço para ir inserindo varios items e armazena-los na memoria
	while (op != '0'){
		
		printf("Entre com o Codigo: ");
		scanf("%d", &codigo);
		//função que insere o item
		insere(codigo);
		
		printf("Continuar com o cadastro?  1 = sim  0 = não: ");
		op = getch();
		
	}
	
	//função que imprime o item
	imprime();
	
	
	
	printf("Entre com o item para ser pesquisado: ");	
	scanf("%d", &codigo);
	
	//função que pesquisa o item
	pesquisa(codigo);
	
	getch();
	
}
Não sei onde estou errando.
Tenho prova Terça. Se alguém puder me ajudar eu agradeço.
Um abraço. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está esquecendo de tratar os casos particulares de inserção na lista. Na primeira execução, quando a lista está vazia, quem deve receber o novo nó é o head da lista (No teu caso, o ponteiro primeiro)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.