Você está na página 1de 3

/* Lista - Fila * File: main.c * Author: Alex S.

* Orientador: Emmanuel Lista-Fila * Created on 10 de Novembro de 2012, 13:04 */ /*Muito bem pessoal, vou colocar alguns cometarios nos cdigos do professor Emmanuel para tentar facilitar o entendimento de vocs.*/ #include <stdio.h> #include <stdlib.h> /* Creio eu que todos os alunos ja compreedem essa definio de um novo tipo, para * facilitao de construo da lista dinamica. * Essa estrutura recebe uma informao no parametro (inf) que passada pelo usurio * e tambem procura na memoria um tipo Tregistro, e libera uma espao para o ender eo * proximo valor.*/ typedef struct Registro{ int inf; struct Registro * next; }Tregistro; /* Nessa parte so criadas as referencias para o manuseio da Lista dinamica; * A referencia Lista responsvel pelo armazenamento do 1 valor inserido na Lista; * A referencia NovoElemento responsvel pelo armazenamento de novos valores na Li sta; * E por fim a referencia UltimoElemento que responsavel por informar aonde se e ncontra o ultimo elemento. */ Tregistro * Lista; // = NULL; Para codeBlocks descomente essa parte; Tregistro * NovoElemento; // = NULL; Para codeBlocks descomente essa parte; Tregistro * UltimoElemento; // = NULL; Para codeBlocks descomente essa parte; /* Pessoal esse um dos mais simples procedimentos, a insero do 1 valor da lista; * A referencia Lista criada acima vai receber uma alocao na memoria(malloc) com t amanho(sizeof) para Tregistro; * Depois da alocao esse espao utilizando o paramentro inf vai receber uma informao p assada pelo usurio; */ void PrimeiroElemento(int informacao){ Lista = malloc(sizeof(Tregistro)); Lista->inf = informacao; //Lista->next = NULL; Para CodeBlocks descomente essa parte; } /* Esse tambem no muito complicado mais exige um pouco mais de ateno; * A referencia NovoElemento criada em tempo de execuo para um novo valor para lis ta; * NovoElemento vai receber uma alocao de memoria com tamanho para Tresgistro; * e a informao passada atraves do paramtro inf pelo usuario. * Pessoal muita ateno agora nessa linha de cdigo: * * UltimoElemento = Lista; * Nessa linha de cdigo a referencia UltimoElemento que estava vazia vai receber o valor de Lista * o primeiro valor que foi armazenado. A referencia Lista contem o endereo do pr oximo(->next) com

* isso ele pode armazenar quantos valores e endereos quiser. * Depois que Ultimo recebe Lista entra-se no lao, "enquanto ultimoelemento no ca mpo next for diferente * de vazio faa: * UltimeElemnto recebe UltimoElemnto no campo next; ou seja recebe um endereo pa ra o proximo * Depois o lao verifica se o campo next estava vazio, se no estiver ele sai do lao e vai para a proxima linha; * * UltimoElemento->next = NovoElemento; * O novo elemento armazenado com um endero para o proximo, e assim toda sequenci a se repete enquanto o usuario desejar. */ void NovosElementos(int informacao){ NovoElemento = malloc(sizeof(Tregistro)); NovoElemento->inf = informacao; //NovoElemento->next = NULL; para CodeBlocks descomente essa parte; UltimoElemento = Lista; while(UltimoElemento->next != NULL){ UltimoElemento = UltimoElemento->next; } UltimoElemento->next = NovoElemento; } /* Pessoal esse muito simples, procedimento criado apenas para finalidades de or ganizao de codigo; * Se lista for igual vazio entao chama-se o procedimento PrimeiroElemento(infor macao); * Seno estiver mais vazio entao chama-se o procedimento NovosElementos(informaca o); */ void LeituraInformacoes(int informacao){ if(Lista == NULL) PrimeiroElemento(informacao); else NovosElementos(informacao); } /* Para que uma pesuisa tenha eficcia ela precisa percorrer todo o local em que s e deseja fazer uma pesquisa, * por isso UltimoElemento recebe Lista; * Dessa forma ela pode percorrer todas as informaes da lista; * Equanto UltimoElemento for diferente de vazio faa: * Se UltimoElemento na posio inf for igual ao valor digitado pelo usuario, retorn a-se o a posio de memoria onde ele * se encontra. * Senao ele vai mostrando os valores e diferindo do valor da pesquisa. * * UltimoElemento = UltimoElemento->next; essa linha uma maneira de axar o pro ximo elemento atraves do campo next. */ void Pesquisa(int ValorProcura){ UltimoElemento = Lista; while(UltimoElemento != NULL){ if(UltimoElemento->inf == ValorProcura){ printf("Valor encontrado no endereco:%d\n",UltimoElemento); return; }else{ printf("Nao encontrado na posicao:%d\n",UltimoElemento->inf); } UltimoElemento = UltimoElemento->next; }

printf("Nada encontrado, por favor tente outro numero.\n"); } /* Codigo de lgica simples pessoal, sem depencias de funo de remover valores, * sem perder todos os outros elementos. A referencia nar o 1 valor. * Lixeira recebe Lista; * Depois Lista recebe Lista com endereo do proximo, alor. Feito isso pode-se * excluir o valor que est em lixeira, que o segundo valor da Lista. */ void Removedor(){ Tregistro * Lixeira; Lixeira = Lista; Lista = Lista->next; free(Lixeira); } referencias globais tem uma Lixeira criada para armaze nesse caso seria o segundo v valor, passa a se tornar o 1

void Listar(){ printf("\nListando informacoes:\n\n"); UltimoElemento = Lista; while(UltimoElemento != NULL){ printf("Endereco de memoria da informacao:%d\n",UltimoElemento); printf("Valor do endereco:%d\n",UltimoElemento->inf); printf("Endereco da proxima informacao:%d\n",UltimoElemento->next); UltimoElemento = UltimoElemento->next; } } int main(int argc, char** argv){ int Leitor; while(Leitor != -1){ scanf("%d",&Leitor); LeituraInformacoes(Leitor); } Listar(); Removedor(); Listar(); return (EXIT_SUCCESS); }