Estou criando uma pilha com lista ligada onde tenho que dizer se uma expressão mtematica está corretamente formada baseando se na verificação da ordem dos parenteses , chaves e conchetes. Não podemos possuir colchetes e chaves dentro dos parenteses e nen chaves dentro dos conchetes.
Segue o código :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//Empilhar e depois verificar a expressao
typedef struct lista_ligada{
char variavel;
struct lista_ligada *prox;
}pilha;
void create(pilha *p){
p->prox=(pilha*)malloc(sizeof(pilha));
}//FINALIZA CREATE
int check(pilha *p,char num){
pilha *x;
int result;
char a;
x = p->prox;
while (x != NULL){
x = x->prox;
}
a=x->variavel;
if(a=='('){
return 1;
}//FECHA IF
if(num=='[' && a!='('){//Verifica se oque foi escrito é [ ou ]
return 1;
}//FECHA IF
else{
return num;
}//FECHA ELSE
if(num=='{' && a!='(' && a!='['){
return 1;
}
else{
return num;
}
}//FECHA FUNÇÃO
void finaliza(pilha *p,char a){
if(a!='1'){
printf("A expressao está malformada em :",a);
} else{
printf("A expressão está bem formada");
}
}
void print(pilha *p){
if(p->prox!=NULL){
printf("%c>>",p->variavel);
print(p->prox);
}//FINALIZA IF
}//FINALIZA PRINT
main(){
pilha *val;
char xescolha;
char reveladouro='1';
char vetor[100];
val=(pilha*)malloc(sizeof(pilha));
printf("Escolha a opcao que melhor lhe convenha:\n"
Pergunta
Guest --Diego --
Ola pessoal ,
Estou criando uma pilha com lista ligada onde tenho que dizer se uma expressão mtematica está corretamente formada baseando se na verificação da ordem dos parenteses , chaves e conchetes. Não podemos possuir colchetes e chaves dentro dos parenteses e nen chaves dentro dos conchetes.
Segue o código :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//Empilhar e depois verificar a expressao
typedef struct lista_ligada{
char variavel;
struct lista_ligada *prox;
}pilha;
void create(pilha *p){
p->prox=(pilha*)malloc(sizeof(pilha));
}//FINALIZA CREATE
int check(pilha *p,char num){
pilha *x;
int result;
char a;
x = p->prox;
while (x != NULL){
x = x->prox;
}
a=x->variavel;
if(a=='('){
return 1;
}//FECHA IF
if(num=='[' && a!='('){//Verifica se oque foi escrito é [ ou ]
return 1;
}//FECHA IF
else{
return num;
}//FECHA ELSE
if(num=='{' && a!='(' && a!='['){
return 1;
}
else{
return num;
}
}//FECHA FUNÇÃO
void finaliza(pilha *p,char a){
if(a!='1'){
printf("A expressao está malformada em :",a);
} else{
printf("A expressão está bem formada");
}
}
void print(pilha *p){
if(p->prox!=NULL){
printf("%c>>",p->variavel);
print(p->prox);
}//FINALIZA IF
}//FINALIZA PRINT
main(){
pilha *val;
char xescolha;
char reveladouro='1';
char vetor[100];
val=(pilha*)malloc(sizeof(pilha));
printf("Escolha a opcao que melhor lhe convenha:\n"
" 1 - Inserir caracter \n"
" 2 - Imprimir \n"
" 3 - Finalizar expressao \n");
scanf("%c",&xescolha);
switch(xescolha){
case'1':{
printf("Digite o caracter a ser inserido:\n");
scanf("%c",&val->variavel);
check(val,val->variavel);
if(check(val,val->variavel)!=1){
reveladouro=val->variavel;
}
create(val);
}break;
case'2':{
print(val);
}break;
case'3':{
finaliza(val,reveladouro);
}break;
}//FINALIZA SWITCH
system("pause");
return 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.