Buscar

Escreva o algoritmo da pilha estática

 para criar um programa que
leia uma expressão posfixa (com números e operadores +, -, * e /) e a avalie. Lembre-se
que o algoritmo básico consta de empilhar os operandos (números) e desempilhar os
operadores e, a seguir, empilhar o resultado

💡 5 Respostas

User badge image

Lee Brasil

Algoritmo em C, que representa um Pilha Estática, o algoritmo só cadastra um valor, mostrando o conceito de uma pilha feita em C.

#include <stdio.h>
#define T 5

typedef struct{
        int topo;
        int elementos[T];
}PILHA;

void iniciarPilha(PILHA *p);
int menu();
int overflow(PILHA *p);
int underflow(PILHA *p);
int push(PILHA *P, int *x);
int pop(PILHA *p);
void imprimir(PILHA *p);

int main(){
    PILHA pil;
    int opc, novo;
  
    iniciarPilha(&pil);
  
    do{
        opc = menu();
      
        switch(opc){
            case 1:
                
                 if(!overflow(&pil)){
                     printf("informe um novo valor: ");
                     scanf("%d", &novo);printf("valor %d inserido!\n", push(&pil, &novo));

                    
                 }else
                     printf("Pilha cheia!\n");
                    
                 getche();
                 system("cls");
            break;           
            case 2:
                
                 if(!underflow(&pil))
                     imprimir(&pil);
                 else
                     printf("pilha vazia!\n");
                    
                 getch();
                 system("cls");
            break;
            case 3:
                
                 if(!underflow(&pil))
                     printf("valor %d removido!\n", pop(&pil));
                    
                 else
                     printf("Pilha vazia!\n");
                    
                 getche();
                 system("cls");
            break; case 0: break;
            default: printf("opcao %d incorreta!\n",opc);
        }
    }while(opc != 0);
}
void iniciarPilha(PILHA *p){
     p->topo = -1;
}

int menu(){
    int opc;
  
    printf("1-inserir elemento\n"
           "2-Imprimir pilha\n"
           "3-remover elemento\n"
           "0-sair\n");
    scanf("%d", &opc);
    return opc;
}

int overflow(PILHA *p){
    return p->topo == T -1;
}

int underflow(PILHA *p){
    return p->topo == -1;
}

int push(PILHA *p, int *x){
    p->topo++;
    p->elementos[p->topo] = *x;return p->elementos[p->topo];
}

int pop(PILHA *p){
    int ult;
    ult = p->elementos[p->topo];
    p->topo--;
  
    return ult;
}

void imprimir(PILHA *p){
     int aux;
    
     for(aux = p->topo; aux >= 0; aux--)
         printf("elemento[%d] = %d\n", aux+1, p->elementos[aux]);

0
Dislike0
User badge image

Andre Smaira

Para responder essa questão devemos aplicar nosso conhecimento sobre algoritmo e programação.


Aplicando o método TAD – Tipo abstrato de dados, temos o código:

#include<stdio.h>

#include<stdlib.h>

#include"Pilha.h"

# define max 20

struct pilha {

int vetor [max];

int topo;

};

Pilha cria_pilha () {

Pilha p;

p = (Pilha) malloc (sizeof (struct pilha));

if (p != NULL) p->topo = -1;

return p;

}

int pilha_vazia (Pilha p) {

if (p->topo == -1) return 1;

else return 0;

}

int pilha_cheia (Pilha p) {

if (p->topo == max-1) return 1;

else return 0;

}

int push (Pilha p, int elem) {

if (p == NULL || pilha_cheia(p) == 1) return 0;

p->topo++;

p->vetor[p->topo] = elem;

return 1;

}

int pop (Pilha p, int *elem) {

if (p == NULL || pilha_vazia(p) == 1) return 0;

*elem = p->vetor[p->topo];

p->topo--;

return 1;

}

typedef struct pilha * Pilha;

Pilha cria_pilha ();

int pilha_vazia (Pilha p);

int pilha_cheia (Pilha p);

int push (Pilha p, int elem);

int pop (Pilha p, int *elem);

#include<stdio.h>

#include<stdlib.h>

#include"Pilha.h"

int main(){

char expre[20], removi;

int i;

scanf("%s", &expre);

Pilha p;

p=cria_pilha();

for(i=0; expre!=´´; i++){

if(expre[i]== ´+´ || expre[i]==´-´ || expre[i]==´*´ || expre[i]==´⁄´){

pop(p, &removi);

}else{

push(p, expre[i]);

}

}

if(pilha_vazia(p)==1) printf("Escopo valido ");

else printf("Escopo invalido ");

return 0;

}


Portanto temos acima o código que valida o escopo de uma expressão posfixa.

0
Dislike0
User badge image

Andre Smaira

Para responder essa questão devemos aplicar nosso conhecimento sobre algoritmo e programação.


Aplicando o método TAD – Tipo abstrato de dados, temos o código:

#include<stdio.h>

#include<stdlib.h>

#include"Pilha.h"

# define max 20

struct pilha {

int vetor [max];

int topo;

};

Pilha cria_pilha () {

Pilha p;

p = (Pilha) malloc (sizeof (struct pilha));

if (p != NULL) p->topo = -1;

return p;

}

int pilha_vazia (Pilha p) {

if (p->topo == -1) return 1;

else return 0;

}

int pilha_cheia (Pilha p) {

if (p->topo == max-1) return 1;

else return 0;

}

int push (Pilha p, int elem) {

if (p == NULL || pilha_cheia(p) == 1) return 0;

p->topo++;

p->vetor[p->topo] = elem;

return 1;

}

int pop (Pilha p, int *elem) {

if (p == NULL || pilha_vazia(p) == 1) return 0;

*elem = p->vetor[p->topo];

p->topo--;

return 1;

}

typedef struct pilha * Pilha;

Pilha cria_pilha ();

int pilha_vazia (Pilha p);

int pilha_cheia (Pilha p);

int push (Pilha p, int elem);

int pop (Pilha p, int *elem);

#include<stdio.h>

#include<stdlib.h>

#include"Pilha.h"

int main(){

char expre[20], removi;

int i;

scanf("%s", &expre);

Pilha p;

p=cria_pilha();

for(i=0; expre!='\0'; i++){

if(expre[i]== '+' || expre[i]=='-' || expre[i]=='*' || expre[i]=='/'){

pop(p, &removi);

}else{

push(p, expre[i]);

}

}

if(pilha_vazia(p)==1) printf("Escopo valido\n");

else printf("Escopo invalido\n");

return 0;

}


Portanto temos acima o código que valida o escopo de uma expressão posfixa.

0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta.

User badge image

Outros materiais