Pular para o conteúdo

Balanceamento de parênteses utilizando Pilha

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
Andrey andreyfgz
Hits: 7.936 Categoria: C/C++ Subcategoria: Miscelânea
  • Download
  • Nova versão
  • Indicar
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Descrição

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
Download balancing parenthesis_stack.c Enviar nova versão
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Esconder código-fonte

/*
   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;

}
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Integração numérica - Método da Quadratura Gaussiana

Seqüência de Fibonacci

SIV - Simple Image Visualizer

Desenhando uma curva de Bézier

Mini-editor de texto intuitivo em ncurses

Nenhum comentário foi encontrado.

Contribuir com comentário

Entre na sua conta para comentar.