Ir para conteúdo
Fórum Script Brasil
  • 0

DÚvida Em Pilha Com Lista Ligada


Guest --Diego --

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

  • 0

Depois de alguns testes conclui que apenas estou com problemas no case '1' na hora de gravar oque foi digitado , aparece uma tela de erro do windows e o programa fecha a tela negra.

Segue ele um poquinho mais modificado

#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; //STRUCT PILHA

void create(pilha *p){

p->prox=(pilha*)malloc(sizeof(pilha));

}//FINALIZA CREATE

int check(pilha * p,char num){

pilha *x; //NOVA PILHA

char a; //VARIAVEL QUE PEGA A VARIAVEL DO VETOR X

x = p->prox; //IGUALA A NOVA PILHA Á PILHA PRINCIPAL

while (x != NULL){

x = x->prox; //PASSANDO DE UMA LISTA P/ OUTRA

}

a=x->variavel;

if(a=='('){

return 1;

}//FECHA IF

if(num=='[' && a!='('){

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("\nA expressao está malformada em :",a);

} else{

printf("\nA expressao esta 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));

val->prox=NULL;

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");

//////////////////////////////////////////// O PROBLEMA É AQUI////////////////////////////

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

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...