Tilipim Postado Abril 1, 2017 Denunciar Share Postado Abril 1, 2017 Fiz todo o código mas Preciso implementar valida_expressao para validar se a expressão digitada está correta, se as chaves e colchetes estão fechados e abertos corretamente. #include <stdio.h> #include <stdlib.h> int tam; typedef struct Node node; struct Node { char c; struct Node *prox; }; int menu(void); void executa_opcao(node *PILHA, node *FILA, int op); void inicializa(node *P_F); int vazia(node *P_F); node *cadastra_node(char c); void libera_memoria_lista(node *P_F); void insere_na_pilha(node *PILHA); void insere_na_fila(node *FILA, char c); node *retira_da_lista(node *P_F); void mostrar_lista(node *P_F); void cadastra_expressao(node *Fila); int valida_expressao(node *Fila,node *Pilha); int main(void) { int opt; node *PILHA = (node *) malloc(sizeof(node)); node *FILA = (node *) malloc(sizeof(node)); if(!PILHA || !FILA){ printf("Sem memoria disponivel!\n"); exit(1); } else{ inicializa(PILHA); inicializa(FILA); do{ opt=menu(); executa_opcao(PILHA, FILA, opt); }while(opt); free(PILHA); free(FILA); return 0; } } int menu(void) { int opt; printf("Menu"); printf("\n\t0. Sair"); printf("\n\t1. Zerar (Pilha e Fila)"); printf("\n\t2. Cadastrar Expressao (Fila)"); printf("\n\t3. Exibir Expressao (Fila)"); printf("\n\t4. Validar Expressao (Fila x Pilha)"); printf("\n\nDigite a opcao: "); scanf("%d", &opt); return opt; } void executa_opcao(node *PILHA, node *FILA, int op) { node *tmp; switch(op){ case 0: libera_memoria_lista(PILHA); libera_memoria_lista(FILA); break; case 1: libera_memoria_lista(PILHA); libera_memoria_lista(FILA); inicializa(PILHA); inicializa(FILA); break; case 2: cadastra_expressao(FILA); break; case 3: mostrar_lista(FILA); break; case 4: //Validar Expressao break; default: printf("Comando invalido\n\n"); } } void inicializa(node *P_F) { P_F->prox = NULL; tam=0; } int vazia(node *P_F) { if(P_F->prox == NULL) return 1; else return 0; } node *cadastra_node(char c) { node *novo = (node *) malloc(sizeof(node)); if(!novo){ printf("Sem memoria disponivel!\n"); exit(1); }else{ novo->c = c; novo->prox = NULL; return novo; } } void libera_memoria_lista(node *P_F) { if(!vazia(P_F)){ node *proxNode, *atual; atual = P_F->prox; while(atual != NULL){ proxNode = atual->prox; free(atual); atual = proxNode; } } } node *retira_da_lista(node *P_F) { if(P_F == NULL){ printf("Lista ja esta vazia\n"); return NULL; }else{ node *tmp = P_F->prox; P_F->prox = tmp->prox; tam--; return tmp; } } void insere_na_pilha(node *PILHA,char c) { node *novo= cadastra_node(c); if(vazia(PILHA)) PILHA->prox=novo; else{ novo->prox = PILHA->prox; PILHA->prox = novo; } tam++; } void insere_na_fila(node *FILA, char c) { node *novo = cadastra_node(c); if(vazia(FILA)) FILA->prox=novo; else{ node *tmp = FILA->prox; while (tmp->prox != NULL) tmp = tmp->prox; tmp->prox = novo; } tam++; } void mostrar_lista(node *P_F) { if(vazia(P_F)){ printf("Lista vazia!\n\n"); return ; } node *tmp; tmp = P_F->prox; printf("LISTA :"); while( tmp != NULL){ printf("\t%c", tmp->c); tmp = tmp->prox; } printf("\n"); int count; for(count=0 ; count < tam ; count++) printf("\t^"); printf("\nOrdem :"); for(count=0 ; count < tam ; count++) printf("\t%d", count+1); printf("\n\n"); } void cadastra_expressao(node *FILA) { int sair = 1; char c; printf("Digite a expressao: "); while (sair) { scanf(" %c", &c); if (c == '0') { sair = 0; } else { if ((c == '{') || (c == '}') || (c == '[') || (c == ']')) { insere_na_fila(FILA, c); } else { printf("Operador invalido !"); } } } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Tilipim
Link para o comentário
Compartilhar em outros sites
0 respostass 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.