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

Pilha Com Lista Ligada


Guest Bebop

Pergunta

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.

Pela minhas conclusões :

Apenas estou tendo problemas no momento de amrmazenamento da variavel no "case 1" , gostaria de saber qual o erro , pois o programa compila porem quando selecionado o "case 1" o programa se auto termina.

#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

4 respostass a esta questão

Posts Recomendados

  • 0

cara, coloque o seu codigo entre tags [ code ] e [ /code ], mas sem o espaco. Assim fica mais facil pra gente analizar o seu codigo.

Link para o comentário
Compartilhar em outros sites

  • 0
[color="#0000FF"][size="2"]

ENTÃO OK ! AI VAI ! 

#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;
} [/size][/color]

Link para o comentário
Compartilhar em outros sites

  • 0
Apenas estou tendo problemas no momento de amrmazenamento da variavel no "case 1" , gostaria de saber qual o erro , pois o programa compila porem quando selecionado o "case 1" o programa se auto termina.

realmente tem erro e é basicamente nessas duas partes

// aqui faltou voce observar uma coisa
scanf("%c",&xescolha);

// aqui faltou o & "endereco da variavel"
scanf("%c",val->variavel);
no primeiro scanf voce não observou que ao digitar o caracter em seguida digita-se um enter então o proximo scanf le enter, por isso da erro, voce pode arrumar assim:
scanf("%c",&xescolha);
getchar();
e o outro scanf é mais simples:
scanf("%c",&val->variavel);
seu código continua com erro, mas agora é na função check. me explique pra que ela serve, pois não entendi nada. muito menos o uso dela duas vezes seguidas no código.
check(val,val->variavel);
if(check(val,val->variavel)!=1)

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...