Buscar

pilhaDinamica 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;
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;
 }
}

Teste o Premium para desbloquear

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

Continue navegando