Buscar

filaDinamica em c

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

/*
 * Vandcarlos Mouzinho Sandes Junior
 * vandcarlosjunior@gmail.com
 * +55 12 99611-4871
 */
#include <stdio.h>
#include <stdlib.h>
typedef struct elemento
{
 int chave;
 struct elemento* prox;
}elemento;
elemento* insere(elemento *raiz, int chave);
elemento* remover(elemento *raiz);
void consulta(elemento *raiz);
int main()
{
 elemento* raiz = NULL;
 raiz = insere(raiz, 1);
 raiz = insere(raiz, 2);
 raiz = insere(raiz, 3);
 raiz = insere(raiz, 4);
 raiz = insere(raiz, 5);
 raiz = insere(raiz, 6);
 raiz = insere(raiz, 7);
 consulta(raiz);
 raiz = remover(raiz);//remove o 1
 raiz = remover(raiz);//remove o 2
 raiz = remover(raiz);//remove o 3
 raiz = remover(raiz);//remove o 4
 consulta(raiz);
 raiz = remover(raiz);//remove o 5
 raiz = remover(raiz);//remove o 6
 raiz = remover(raiz);//remove o 7
 consulta(raiz);
 raiz = insere(raiz, 5);
 consulta(raiz);
 return;
}
elemento* insere(elemento *raiz, int chave)
{
 elemento* auxiliar;
 if(raiz != NULL)
 {
 if(raiz->prox == NULL)//verifica se é o ultimo elemento da lista
 {
 raiz->prox = insere(raiz->prox, chave);//caso positivo chama a função recursivamente na certeza de alocar um novo elemento
 return raiz;//retorna a própria raiz para o primeiro elemento continuar sendo o raiz
 }
 else
 {
 auxiliar = insere(raiz->prox, chave);//caso não seja o ultimo elemento chama a função recursivamente passando o proximo elemento como sendo o raiz
 return raiz;//retorna a própria raiz para o primeiro elemento continuar sendo o raiz
 }
 }
 else//quando se esta no ultimo elemento da lista (ou lista vazia) aloca o espaço para a estrutura e retorna seu endereço de memória
 {
 auxiliar = malloc(sizeof(elemento));
 auxiliar->chave = chave;
 auxiliar->prox = NULL;
 return auxiliar;
 }
 return auxiliar;
}
elemento* remover(elemento *raiz)
{
 elemento* auxiliar;
 if(raiz != NULL)//verifica se não é uma fila vazia
 {
 auxiliar = raiz->prox;//armazera o valor do proximo elemento em uma variavel auxiliar para não perder sua referência
 free(raiz);//libera o espaço de memória do elemento retirado, o primeiro da fila
 return auxiliar;//retorna o endereço do segundo elemento que agora passa a ser o primeiro
 }
 else
 return NULL;//caso a fila esteja vazia retorna NULL para informar que ainda é vazio
}
void consulta(elemento *raiz)
{
 if(raiz != NULL)//verifica se é uma fila com elementos (ou se já chegou no ultimo nas chamadas recursivas)
 {
 printf("%d ", raiz->chave);//imprime o valor chave da estrutura
 return consulta(raiz->prox);//chama a função consulta recursivamente para imprimir o próximo elemento
 }
 else//no ultimo elemento ou quando se está vazio imprimi FIM e para de fazer chamadas recursivas
 {
 printf("\nFIM\n\n");
 return;
 }
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando