Commit f3ca4189 authored by vgsb18's avatar vgsb18 🦍
parents 40b2ff29 cf20bf4e
File added
{ [ ] { } } 0
\ No newline at end of file
#include <stdio.h>
#include <stdlib.h>
#include "tad_pilha.h"
int main()
{
tad_pilha *p;
p = malloc(sizeof(tad_pilha));
inicializa_pilha(p);
p = empilhadeira(p);
if (avalia_sequencia(p))
printf("SIM\n");
else
printf("NAO\n");
return 0;
}
\ No newline at end of file
#include <stdio.h>
#include <stdlib.h>
#include "tad_pilha.h"
int pilha_cheia (tad_pilha *p)
{
if (p -> tam == MAX)
{
return 1;
}
else
return 0;
}
void inicializa_pilha(tad_pilha *p)
{
p -> tam = 0;
p -> topo = ' ';
}
int tamanho_pilha(tad_pilha *p)
{
int tamanho = p -> tam;
return tamanho;
}
int empilha(char i, tad_pilha *p)
{
if (!pilha_cheia(p))
{
p -> v[p -> tam] = i;
p -> tam += 1;
p -> topo = i;
return 1;
}
else
return 0;
}
int topo(char *i, tad_pilha *p)
{
if (p -> topo != 0)
{
*i = p -> topo;
return 1;
}
else
return 0;
}
int desempilha(char *t, tad_pilha *p)
{
if ((p -> topo) > 0)
{
p -> v[p -> tam-1] = 0;
p -> tam -= 1;
if (p -> tam < 1)
p -> topo = 0;
else
p -> topo = p -> v[p -> tam -1];
return 1;
}
else
return 0;
}
char repetidor(char rep, int *val)
{
char y;
printf("times\n");
if (rep != '0')
{
char end;
if (rep == '(')
end = ')';
else if (rep == '[')
end = ']';
else if (rep == '{')
end = '}';
else
return '0';
scanf(" %c",&y);
printf("heyy\n");
if (repetidor(y,val) == end)
*val = 1;
}
return y;
}
int avalia_sequencia(tad_pilha *p)
{
int i;
int c1 = 0,c2 = 0,c3 = 0;
int final = 1;
int global = 1;
int m[MAX];
char lixo = ' ';
tad_pilha ordem;
ordem.tam = 0;
ordem.topo = ' ';
for( i = 0; i < p -> tam; i++)
{
switch(p -> v[i])
{
case '{':
{
c1++;
if (c1 < 0)
global = 0;
empilha('{',&ordem);
}
break;
case '}':
{
c1--;
if (c1 < 0)
global = 0;
if (ordem.topo != '{' )
global = 0;
else
desempilha(&lixo,&ordem);
}
break;
case '[':
{
c2++;
if (c2 < 0)
global = 0;
empilha('[',&ordem);
}
break;
case ']':
{
c2--;
if (c2 < 0)
global = 0;
if (ordem.topo != '[' )
global = 0;
else
desempilha(&lixo,&ordem);
}
break;
case '(':
{
c3++;
if (c3 < 0)
global = 0;
empilha('(',&ordem);
}
break;
case ')':
{
c3--;
if (c3 < 0)
global = 0;
if (ordem.topo != '(' )
global = 0;
else
desempilha(&lixo,&ordem);
}
break;
default:
printf("Caractere nao permitido, tente novamente!\n");
return 0;
}
}
if (c1 == 0 && c2 == 0 && c3 == 0)
{
if (global)
final = 1;
else
final = 0;
}
else
final = 0;
return final;
}
tad_pilha *empilhadeira(tad_pilha *p)
{
char x;
scanf("%c",&x);
while (x != '0')
{
if (!empilha(x,p))
printf("não empilhou, pilha cheia\n");
scanf(" %c",&x);
}
return p;
}
\ No newline at end of file
#ifndef __PILHA__
#define __PILHA__
#define MAX 50
typedef struct tad_pilha
{
int tam;
char topo;
int v[MAX];
} tad_pilha;
int pilha_cheia (tad_pilha *p);
void inicializa_pilha(tad_pilha *p);
int tamanho_pilha(tad_pilha *p);
int empilha(char i, tad_pilha *p);
int topo(char *i, tad_pilha *p);
int desempilha(char *t, tad_pilha *p);
char repetidor(char rep, int *val);
tad_pilha *empilhadeira(tad_pilha *p);
int avalia_sequencia(tad_pilha *p);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment