Boa tarde!
 
	Gostaria de uma ajuda em um exercício que estou fazendo. Vou disponibilizar o exercício, e o código que já fiz.
 
	Preciso de ajuda pois o exercício precisa ser entregue ainda hoje 31/05/19 e já tentei de tudo quanto é forma resolver.
 
	 
 
	#include <stdio.h> 
	#include <stdlib.h>
 
	#include <string.h> 
	#include <tchar.h> 
	#include <locale.h>
 
	//Constante que define o tamanho máximo da estrutura de dados 
	#define tamanho 3
 
	typedef struct tipo_proc{ 
	    char nome[10]; 
	    int PID  ; 
	}tipo_proc;
 
	tipo_proc proc; 
	//Declaração do tipo_pilha: estrutura de dados 
	typedef struct tipo_pilha { 
	    tipo_proc dados[tamanho]; 
	    int ini; 
	    int topo; 
	}tipo_pilha;
 
	//Criando uma variável tipo_pilha 
	tipo_pilha pilha;
 
	 
	//Função que empilha um novo elemento no topo 
	void empilha(tipo_proc elemento) { 
	    //Verificando se existe alguma posição disponível para uma inserção 
	    if(pilha.topo == tamanho) { 
	        //Se a pilha estiver cheia, não é possível empilhar 
	        printf("Pilha cheia.\n"); 
	        system("pause"); 
	    } 
	    else 
	    { 
	        //Se a pilha não estiver cheia: 
	        //    Adicione o novo elemento no topo 
	        //    Incremente o topo 
	        pilha.dados[pilha.topo] = elemento; 
	        pilha.topo++; 
	        proc.PID++; 
	    } 
	}
 
	/* 
	Função que desempilha e retorna o elemento do topo 
	*/
 
	tipo_proc desempilha(){ 
	    //Variável que guarda um "backup" do elemento desempilhado 
	    tipo_proc elemento;
 
	    int i;
 
	    //Verificando se existe algum elemento disponível para uma remoção 
	    if(pilha.topo == 0) { 
	        //Se a pilha estiver vazia, não será possível desempilhar 
	        printf("A Pilha está vazia.\n"); 
	        system("pause"); 
	    } 
	    else 
	    { 
	        //Decrementa-se o "topo". 
	     
	         
	     
	        //Se a pilha não estiver vazia 
	        //    Guarda um backup do elemento a ser removido; 
	     
	        //'Arrata os elementos do "topo em direção ao "início" 
	        //Nesse passo, o elemento que estava no "início" da fila será sobrescrito 
	        for(i=0; i<tamanho; i++) 
	         
	            pilha.dados = pilha.dados[i+1]; 
	       
	                pilha.topo--; 
	                elemento = pilha.dados [pilha.topo]; 
	        //Retorne o elemento que estava no "topo" 
	    return elemento ; 
	   
	   } 
	    
	        
	}
 
	int main() { 
	    _tsetlocale(LC_ALL,_T("portuguese")); 
	     
	    int i; 
	    int opcao=0; 
	    tipo_proc processo; 
	    tipo_proc backup; 
	     
	    
 
	    pilha.topo=0; 
	    pilha.ini=0; 
	    processo.PID =1 ;
 
	    do{
 
	printf("Opcoes:\n");
 
	printf(" 1 - Inserir um elemento novo na pilha\n"); 
	printf(" 2 - Remover um elemento da pilha\n"); 
	printf(" 3 - Esvaziar a pilha\n"); 
	printf(" 0 - Encerrar o programa\n"); 
	printf("     Entre com a sua opcao: "); 
	scanf("%d", &opcao);   /*Le a opcao do usuario*/
 
	 
	         
	switch (opcao)
 
	{ 
	     
	     
	             
	//Inserir um elemento na pilha
 
	    case 1: 
	                     
	    for(i=0;i<=3;i++) 
	    { 
	             
	    printf("\nPID: %d - Nome: %s",pilha.dados [pilha.topo].PID,pilha.dados [pilha.topo].nome);    
	    scanf (" %s", &processo.nome); 
	    
 
	         empilha(processo); 
	     
	    } 
	     
	         
	    /*fflush(stdin);*/ 
	    break;
 
	 
	    case 2:    
	     
	     
	     
	    printf("\nRemover um elemento da pilha:\n");
 
	    printf("PID: %d - Nome: %s\n", backup.PID, backup.nome); 
	     
	    backup = desempilha(); 
	      
	    fflush(stdin); 
	     
	    break;    
 
	     
	     
	    case 3:         
	    printf("\n Esvaziar a pilha\n");     
	    fflush(stdin);     
	     
	    break;
 
	    }
 
	 
	    }while(opcao!=0);
 
	 
	}