segunda-feira, 26 de outubro de 2015

Estrutura Dinâmica de uma Pilha básica em C.

Um modo pratico de implementar uma estrutura pilha é incorpora-la a um TAD, criamos dois arquivos sendo um .h (head) e um .c para implementação do algoritmo.


arquivo.h



#include<stdbool.h>

typedef struct sNO{
int num;
struct sNO *prox;
}NO;

typedef NO *PILHA;

void iniciar(PILHA *p);

void inserir(PILHA *p, int num);

int remover(PILHA *p);

void exibir(PILHA *p);

arquivo.c


#include<stdlib.h>
#include<stdio.h>
#include"PilhaDin.h"

void iniciar(PILHA *p){

*p = NULL;
}

NO *memoria(){
return (PILHA) malloc(sizeof(NO));
}

void inserir(PILHA *p, int num){

PILHA temp = memoria(); //aloca memoria num ponteiro temporario
temp->num = num; //temp recebe um numero
temp->prox = NULL;
if(temp == NULL){
puts("Nao foi possivel alocar memoria!");
}
if(*p == NULL){

*p = temp; //se p for vazio tem recebe null

} else {

PILHA Pilha = *p;
while(Pilha->prox != NULL){

Pilha = Pilha->prox;
}

Pilha->prox = temp;
}
}

int remover(PILHA *p){

if(*p != NULL){

PILHA temp = *p, pilha = NULL;
if(temp->prox == NULL){
int num = temp->num;
free(temp);
*p = NULL;
return num;
}
while(temp->prox != NULL){
pilha = temp;
temp = temp->prox;
}

int num = temp->num;
pilha->prox = NULL;
free(temp);
return num;
} else {

puts("pilha vazia!");
}
}

void exibir(PILHA *p){

if(*p != NULL){
puts("pilha:");
PILHA temp = *p;
while(temp != NULL){

  printf("%d\n", temp->num);
    temp =  temp->prox;  
  }
  puts(""); 
  } else {
  puts("pilha vazia!");
  }

}

Nenhum comentário:

Postar um comentário