Balanceamento de parênteses utilizando Pilha
Publicado por Andrey (última atualização em 21/06/2016)
[ Hits: 7.805 ]
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;
}
Funções de soma e subtração de matrizes alocadas dinamicamente
Raizes reais e complexas de uma equação de 2º grau
Nenhum comentário foi encontrado.
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Instalar Dual Boot, Linux+Windows. (6)
Conky, alerta de temperatura alta (17)
De volta para o futuro - ou melhor, para o presente (parte 2) (3)









