Ir ao conteúdo
  • Cadastre-se

C pilha estatica tan complicado


Posts recomendados

@Flávio Pedroza irmão, sua dica foi top. Agora so falta a função sair.

Coloquei assim:


// FUNÇÃO PARA SAIR DA PILHA

void pilha_sair()
{
    int i;
    
    if pilha.dados[pilha.topo-1] = 0;
        pilha.topo--;
}
(...)

switch (op)

(...)

case 4 :
                  
                  pilha_sair (); //metodo sair

 

Link para o comentário
Compartilhar em outros sites

            //EMPILHAR
            
              case 1 :
                printf("\nInsira o nome do processo:\n"); 
            
            scanf("%s",&processo.nome);
                    
                empilhando(processo);
                
                  printf("\nDado da pilha:\n");
                  
                    for (i = 0; i < pilha.topo; i++){
                
                        printf("PID: %d - Nome: %s\n",i,pilha.dados.nome );
                
        }
              break;

Link para o comentário
Compartilhar em outros sites

mostrar a pilha tambem acabei de corrigir.

vou mandar o trecho

 

void mostrar_pilha(){
    t_proc mostra_dados; 
        if (pilha.dados != 0){
            printf("\n -Dados da Pilha.\n");
        scanf("PID: %d - Nome: %s", mostra_dados.PID, mostra_dados.nome);
        system("pause");            
        } 
        else{
            printf("\nNao ha dados na Pilha.\n");
        }
          
    
    }

 

Link para o comentário
Compartilhar em outros sites

Fiquei pegado nessa parte, meu retorno é sempre o primeiro PID:

//FUNÇÃO DE RETORNO PARA MOSTRAR A PILHA
void mostrar_pilha()
{
    int i;
    printf("\nSua pilha: \n\n");
    for (i = 0; i < pilha.topo; i++) {
         printf("PID : %d - nome :%s\n\n",pilha.dados[pilha.ini].PID,pilha.dados[pilha.ini].nome );         
    }
}

image.png.4f957704ce8deb598b191dcf535d8717.png

Link para o comentário
Compartilhar em outros sites

///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);
}
 

Link para o comentário
Compartilhar em outros sites

  • mês depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...