Pilha estatica de inteiros
#define MAX_ELEMENTOS 10
typedef struct { int itens[MAX_ELEMENTOS]; int topo;
} t_pilha;
t_pilha p; int novoValor; void cria_pilha() { p.topo = -1; // -1 significa pilha vazia
}
int vazia() { return (p.topo == -1 ? 1 : 0);
}
int cheia() { return (p.topo == (MAX_ELEMENTOS - 1) ? 1 : 0);
}
void push(int e) { p.topo++; // incrementa variável topo p.itens[p.topo] = e; // coloca o elemento e no topo da pilha
}
void pop() { if (vazia()) { printf("/n Pilha vazia /n"); return; } printf("Elemento %d eliminado com sucesso", p.itens[p.topo]); p.topo--; // decrementa uma posição do topo.
}
void mostra_topo() { if (vazia()) { printf("\n Pilha vazia! \n"); return; } printf("\n+++++ TOPO DA PILHA +++++\n"); printf("%d", p.itens[p.topo]);
}
void mostra_tudo() { int i; if (vazia()) { printf("\n Pilha vazia! \n"); return; } printf("\n+++++ TODOS ELEMENTOS+++++\n"); for (i = p.topo; i >= 0; i--) { printf("%d\n", p.itens[i]); }
}
int menu() { int opcao; printf("\n\n Opcoes possiveis \n"); printf("0 - Sair\n"); printf("1 - Inserir\n"); printf("2 - Remover\n"); printf("3 - Mostrar topo\n"); printf("4 - Mostrar tudo\n"); printf("\nO que deseja fazer? "); scanf("%d", &opcao); return opcao;
}
void lerDados() { printf("\n\n=== Lendo os dados ===\n"); printf("Digite o valor a ser inserido na pilha: "); scanf("%d", &novoValor);
}
int main() { int opcao; cria_pilha(); do { opcao = menu(); switch (opcao) { case 0: break; case 1: // inserir if (cheia()) { printf("\n Pilha cheia! \n"); break; } lerDados(); push(novoValor); break;