Ir ao conteúdo

Posts recomendados

Postado
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <locale.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\n\n", 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() {
setlocale(LC_ALL, "portuguese");
FLVazia();


int opcao, volta;

int a=0, codigo;
while(1){
system("cls");
printf("\n\n ADICIONAR PRODUTO ------- [1]\n");
printf(" REMOVER PRODUTO ----------[2]\n");
printf(" VISUALIZAR PRODUTOS------ [3]\n");
printf(" PESQUISAR PRODUTOS------- [4]\n");
printf(" SAIR -------------------- [5]\n");

scanf("%d", &opcao);
            if(opcao == 1){ 
            do{
			printf("\nInforme o codigo do produto: ");
			scanf("%d", &codigo);
			Insere(codigo);
			printf("\nDeseja adicionar um novo produto? Sim = 1  ou  Não = 0  \n\n");
			scanf("%d", &volta);
			
		}while(volta == 1);
		}
		
		else if(opcao == 2)
		printf("Tô fazendo essa função ainda");
		
		else if(opcao == 3){
			Imprime();
		}
		
		else if(opcao == 4) {
			printf("Digite o código do produto para pesquisa: ");
			scanf("%d", &codigo);
			Pesquisa(codigo);
		}
		
		else if(opcao == 5)
		     exit(0);
		else
		     printf("Opção inválida!");
		     
system("pause");
}
	return 0;

}

Fala galera, estou tentando aprender sobre listas encadeadas, mas está complicado.Desenvolvi este código acima que cria uma lista de itens. O que gostaria de fazer agora é criar uma lista de cadastro de produtos. Por exemplo, para cada item adicionado eu tenha nome, código, preço... essas coisas, mas tudo em um item somente e repetir esse processo para cada item. Alguém tem alguma ideia de como fazer isso?

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!