Balanceamento de parênteses utilizando Pilha
Publicado por Andrey (última atualização em 21/06/2016)
[ Hits: 7.728 ]
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;
}
SIMULADOR DE DADOS DE RPG - BASEADO EM VAMPIRO A MÁSCARA
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
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
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
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









