Balanceamento de parênteses utilizando Pilha
Publicado por Andrey (última atualização em 21/06/2016)
[ Hits: 7.727 ]
Homepage: https://github.com/andreycdias
Download balancing parenthesis_stack.c
Simples código que utiliza da estrutura de dados pilha, para verificar uma expressão e retornar se é ou não balanceada.
Outros códigos meus: https://github.com/andreycadima/C
/* simple code that verify if the expression is balanced or not; -works only for parenthesis- data struct used : stack; andrey cadima 2016 */ #include <stdio.h> #include <stdlib.h> #include <ctype.h> typedef struct nodestack{ char data; struct nodestack*next; }nodes; typedef struct nodestack*stack; stack*create(){ stack*S = (stack*)malloc(sizeof(stack)); if(!S){ printf ("\n memory not available;\n"); exit(1); }else{ *S = NULL; return S; } } int empty(stack*S){ if(S==NULL) return 1; if(*S==NULL) return 1; else return 0; } nodes* allocate(char exp){ nodes*no = (nodes*)malloc(sizeof(nodes)); if(!no) exit(1); else{ no->data = exp; no->next = NULL; return no; } } void push (stack*S, char exp){ nodes*no = allocate(exp); nodes*tmp = *S; *S = no; no->next = tmp; } void pop (stack*S){ nodes*tmp = *S; *S = tmp->next; } void release(stack*S){ if(empty(S)) return ; else{ nodes*next_node, *cur_node; cur_node = *S; while(cur_node!=NULL){ next_node = cur_node->next; free(cur_node); cur_node = next_node; } } *S = NULL; } void expression(stack*S){ int i; char exp[50]; loop: printf ("\nexpression: "); scanf ("%s", exp); //for(i=0;i<'\0';i++){ for(i=0;i<strlen(exp);i++){ if(exp[i]=='(') push (S, exp[i]); if(exp[i]==')'){ if(empty(S)) goto label; else pop (S); } } if(empty(S)) printf ("\n balanced expression;\n"); else label: printf ("\n unbalanced expression;\n"); char opt; printf ("\ndo again? y/n: "); scanf ("%s", &opt); fflush(stdin); if(tolower(opt)=='y'){ if(!empty(S)) release(S); goto loop; }else exit(1); } int main (void){ stack*S = create(); expression(S); return 0; }
Simples gerador de números primos
Agenda eletronica com banco de dados em arquivo texto
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Falha com leitor de digitais no Ubuntu: sugestões? (0)
Problema em SSD ao dar boot LinuxMint LMDE FAYE 64 (1)