Balanceamento de parênteses utilizando Pilha
Publicado por Andrey (última atualização em 21/06/2016)
[ Hits: 7.825 ]
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;
}
Também enche a memória, porém desta vez com processos
Simples gerador de números primos
Vários pacotes de ping disparados contra o host
Nenhum comentário foi encontrado.
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Instalando COSMIC no Linux Mint
Turbinando o Linux Mint: o poder das Nemo Actions
Inteligência Artificial no desenvolvimento de software: quando começar a usar?
O widget do Plasma 6 Área de Notificação
[Resolvido] Algo deu errado ao abrir seu perfil
Instalar Dual Boot, Linux+Windows. (12)
Problemas com o "startx&... no Slackware (10)
Conselho distribuiçao brasileira (8)
Atalho no Linux Mint não aparece menu de troca de monitores (0)









