//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*/
Pergunta
jobis
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);
}
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.