Pilha - verificação de parênteses balanceados

283 palavras 2 páginas
#include
#include
#define TAM 50

//Estrutura typedef struct pilha { int pos; struct pilha *next;
} pilha_t;

//Função para a criação da pilha pilha_t* criarPilha(int i){ pilha_t *p = (pilha_t*) malloc(sizeof(pilha_t)); if(!p){ printf ("Erro: Memoria Insuficiente.\n"); exit(-1); } p->next = NULL; p->pos = i; return(p);
}

//Empilha Elementos pilha_t* empilha(pilha_t *p, int pos){ pilha_t *temp = (pilha_t*) malloc(sizeof(pilha_t)); if(!temp){ printf ("Erro: Memoria Insuficiente.\n"); exit(-1); } temp->pos = pos; temp->next = p; return(temp);
}

//Desempilha pilha_t* desempilha(pilha_t* p){ pilha_t *temp = p; p = p->next; free(temp); return(p);
}

//Preenche a pilha pilha_t* prencherPilha(pilha_t *p, char str[]){ unsigned short int i;

for(i = 0; str[i] != '\0'; i++){ if(str[i] == '('){ if(p == NULL) p = criarPilha(i); else p = empilha(p, i); } else if(str[i] == ')'){ if(p == NULL){ p = empilha(p, i*(-1)); return(p); } p = desempilha(p); } } return(p);
}

//Após a execução do programa, libera todo o espaço alocado em tempo de execução void liberaPilha(pilha_t *p){ pilha_t aux; if(p == NULL) return;

while(p != NULL){ aux = *p; free(p); p = aux.next; }
}

//Main int main(){ char str[TAM]; pilha_t *p = NULL; int retorno = -1;

printf("Digite a string para verificacao: "); scanf("%s", str);

p = prencherPilha(p, str);

if(p == NULL) printf("\n\t-------------------------\n\tA string esta balanceada.\n\t-------------------------\n"); else if(p->pos > 0) printf("\n\t-------------------------------------\n\tExcesso de

Relacionados

  • camila
    1390 palavras | 6 páginas
  • Vb.net
    884 palavras | 4 páginas
  • Compiladores
    8422 palavras | 34 páginas
  • Manual de Referencia Linguagem LUA
    19539 palavras | 79 páginas
  • Análise sintática de programas
    5778 palavras | 24 páginas
  • windows server 2003
    6367 palavras | 26 páginas
  • Análise Sintática de Programas
    6348 palavras | 26 páginas
  • linguagem de programação
    6440 palavras | 26 páginas
  • Analise de Sistemas
    6349 palavras | 26 páginas
  • Analise Sintatica de Programas
    6402 palavras | 26 páginas