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; void inserir(elemento **raiz, int chave); void remover(elemento **raiz); void consultar(elemento *raiz); /* * Faço a utilização de ponteiro de ponteiro (**) para poder ter acesso a varavel que guarda * o valor dos ponteiros na função main, assim posso colocar nela o valor do primeiro elemento de uma pilha * ou indicar que ela está vazia */ int main() { elemento *raiz = NULL; return 0; } void inserir(elemento **raiz, int chave) { //raiz é mandado por referência por que caso ela seja nula significa que o vetor está vazio e é necessario colocar o endereço do primiero endereço na main elemento *auxiliar; if(*raiz != NULL)//raiz nula significa pilha vazia { auxiliar = *raiz;//o valor da raiz não pode ser alterado, para não perder o indicador do começo da pilha while(auxiliar->prox != NULL)//ira percorrer a estrutura procurando o ultimo elemento, o ->prox ser igual a NULL significa isso { auxiliar = auxiliar->prox; } auxiliar->prox = malloc(sizeof(elemento)); auxiliar->prox->chave = chave;//campo chave da estrutura recem criada auxiliar->prox->prox = NULL;//Coloca NULL no prox da estrutura recem alocada, para indicar que ela é o ultimo elemento } else { *raiz = malloc(sizeof(elemento)); (*raiz)->chave = chave; (*raiz)->prox = NULL; } return; } void remover(elemento **raiz) { elemento *auxiliar, *anterior; if(*raiz == NULL) { printf("A Pilha esta vazia, impossivel remover!!\n"); return; } else if((*raiz)->prox == NULL)//pilha com apenas um elemento { free(*raiz); *raiz = NULL; } else { anterior = *raiz; auxiliar = anterior->prox; while(auxiliar->prox != NULL)//percorro a estrutura procurando o ultimo elemento, ou seja, aquele cuja seu campo ->prox seja NULL { anterior = auxiliar; auxiliar = auxiliar->prox; } free(auxiliar); anterior->prox = NULL; } } void consultar(elemento *raiz) { elemento *auxiliar = raiz; if(auxiliar == NULL) { printf("A pilha esta vazia !!\n"); return; } else { while(auxiliar != NULL) { printf("%d ", auxiliar->chave); auxiliar = auxiliar->prox; } printf("\n"); return; } }
Compartilhar