Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string.h>
- #include <stdio.h>
- #include <stdlib.h>
- struct No{
- char dado;
- struct No *proximo;
- };
- struct Pilha{
- int tamanho;
- struct No *cabeca;
- };
- void iniciaPilha(struct Pilha *pilha){
- pilha->tamanho = 0;
- pilha->cabeca = NULL;
- }
- int tamanhoPilha(struct Pilha *pilha){
- return pilha->tamanho;
- }
- int vaziaPilha(struct Pilha *pilha){
- if(pilha->tamanho == 0){
- return 1;
- }else{
- return 0;
- }
- }
- char topoPilha(struct Pilha *pilha){
- if(vaziaPilha(pilha)) return '0';
- return (pilha->cabeca)->dado;
- }
- int push(struct Pilha *pilha, char caracter){
- struct No *novoNo;
- novoNo = malloc(sizeof(struct No));
- if(novoNo == NULL) return 0;
- novoNo->dado = caracter;
- novoNo->proximo = pilha->cabeca;
- pilha->cabeca = novoNo;
- pilha->tamanho++;
- return 1;
- }
- char pop(struct Pilha *pilha){
- struct No *aux = pilha->cabeca;
- //Retorno '0' impede o underflow
- int caracter;
- if(vaziaPilha(pilha)) return '0';
- caracter = (pilha->cabeca)->dado;
- pilha->cabeca = aux->proximo;
- free(aux);
- pilha->tamanho--;
- return caracter;
- }
- int main(){
- char string[1001];
- scanf("%1000[^\n]", string);
- struct Pilha pilha;
- iniciaPilha(&pilha);
- int correto = 1, count, tam = strlen(string);
- for(count = 0; count < tam; count++){
- if(string[count] == '(' || string[count] == '{' || string[count] == '['){
- push(&pilha, string[count]);
- }
- if(string[count] == ')'){
- if(topoPilha(&pilha) != '('){
- //Encontrado um erro, a expressão logo é considerada inválida e o laço é quebrado
- correto = 0;
- break;
- }else{
- pop(&pilha);
- }
- }else if(string[count] == '}'){
- if(topoPilha(&pilha) != '{'){
- correto = 0;
- break;
- }else{
- pop(&pilha);
- }
- }else if(string[count] == ']'){
- if(topoPilha(&pilha) != '['){
- correto = 0;
- break;
- }else{
- pop(&pilha);
- }
- }
- }
- if(vaziaPilha(&pilha) != 1) correto = 0;
- if(correto == 1){
- printf("Expressão correta.\n");
- }else{
- printf("Expressão incorreta.\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment