///aos 45 de segundo tempo é o que deu para fazer.
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <iostream>
#define tamanho 5
typedef struct tipo_proc {
char nome[10];
int PID;
} tipo_proc;
typedef struct tipo_pilha {
tipo_proc dados [tamanho];
int topo;
int ini;
} tipo_pilha;
tipo_pilha pilha;
int op;
int cont = 1;
void mostrar_pilha()
{
int i;
printf("\nSua pilha: \n\n");
for (i = 0; i < tamanho; i++) {
printf("%d \n", pilha.dados);
}
}
void mostrar_menu()
{
printf("\n\n1 - Adicionar elemento na pilha.\n"
"2 - Excluir elemento.\n"
"3 - Esvaziar a pilha.\n"
"0 - sair.\n");
}
void empilhando(tipo_proc elemento)
{
if (pilha.topo == tamanho) {
printf("A pilha está cheia!");
system("pause");
}
else {
pilha.dados[pilha.topo] = elemento;
pilha.topo++;
cont++;
//tipo_proc.PID = cont;
}
}
tipo_proc desempilhando()
{
tipo_proc elemento;
if (pilha.ini == pilha.topo) {
printf("A pilha está vazia, impossivel desempilhar!\n");
system("pause");
}
else {
elemento = pilha.dados[pilha.topo];
for(int i=0; i<tamanho; i++)
pilha.dados[pilha.topo]=elemento;
pilha.topo--;
cont--;
return elemento;
}
}
void esvaziar_pilha()
{
int i;
if (pilha.topo == pilha.ini) {
printf("A pilha esta vazia, impossivel esvaziar!\n\n");
system("pause");
}
else {
for (i = 0; i < tamanho; i++)
{
pilha.dados[pilha.topo];
pilha.topo--;
}
printf("\nPilha esta vazia!\n\n");
system("pause");
}
}
int main()
{
system("cls");
setlocale(LC_ALL, "Portuguese");
pilha.topo = 0;
pilha.ini = 0;
tipo_proc elemento;
elemento.PID = 1;
tipo_proc nun;
int op;
do{
printf("\n ------------------------------------------ \n");
printf("\t1 - Adicionar elemento na pilha.\n");
printf("\t2 - Excluir elemento da pilha.\n");
printf("\t3 - Esvaziar a pilha.\n");
printf("\t0. sair \n");
printf("\n ------------------------------------------ \n");
printf("\n\t********Escolha sua opção:********\n ");
fflush(stdin);
scanf("%d", &op);
switch (op)
{
case 1 :
system("cls");
fflush(stdin);
printf("\nInsira o nome do processo:\n");
scanf("%s",&elemento.nome);
empilhando(elemento); //metodo que empilha;
printf("\nDado da pilha:\n");
printf("PID: %d - Nome: %s\n",pilha.dados[pilha.ini].PID,pilha.dados[pilha.ini].nome );
elemento.PID++;
break;
case 2 :
fflush(stdin);
nun = desempilhando();
printf("\nConteudo desempilhado:\n");
printf("PID: %d - Nome: %s\n",nun.PID,nun.nome);
//desempilhando();
break;
case 3 :
system("cls");
fflush(stdin);
esvaziar_pilha(); //metodo que esvazia
break;
case 0:
return 0;
break;
default:
fflush(stdin);
printf("Opção inválida.\n");
break;
printf("\nInsira o nome do processo:\n");
scanf("%s",&elemento.nome);
fflush(stdin);
empilhando(elemento);
printf("\n dados da pilha \n");
printf("PID : %d - nome :%s\n\n",pilha.dados[pilha.ini].PID,pilha.dados[pilha.ini].nome );
}
}while(op != 0);
}