Baixe o app para aproveitar ainda mais
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; } }
Compartilhar