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