Balanceamento de parênteses utilizando Pilha
Publicado por Andrey (última atualização em 21/06/2016)
[ Hits: 7.791 ]
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;
}
Programa para cálculo de números complexos
Gerador de numeros da mega-sena tabajara
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como implementar Raid (0, 1, 5, 6, 10 e 50)
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
Criação de diretórios e aplicação de restrições de acesso no Linux
Como programar um sistema de controle para distribuições linux em c? (0)
Compartilhar ZEBRA ZD220 na rede (2)
Como programar um software que seja utilizado para coleta de dados em ... (1)









