Balanceamento de parênteses utilizando Pilha
Publicado por Andrey (última atualização em 21/06/2016)
[ Hits: 7.278 ]
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; }
Integração numérica - Método da Quadratura Gaussiana
Nenhum comentário foi encontrado.
Atenção a quem posta conteúdo de dicas, scripts e tal (2)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Como Atualizar Fedora 39 para 40
Instalar Google Chrome no Debian e derivados
Consertando o erro do Sushi e Wayland no Opensuse Leap 15
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
Sistema da Coréia do Norte - Red Sar OS (6)
redirecionando saida de comando touch para o AWK[AJUDA] (16)
Driver Realtek RTL8852BE não disponível para Ubuntu 22.04.4 LTS kernel... (4)