GitMory / Code_Block_V1

1 stars 0 forks source link

(21/05) pila de balanceo #7

Open GitMory opened 4 months ago

GitMory commented 4 months ago

include iostream>

include string>

using namespace std;

struct Nodo { char dato; Nodo* siguiente; };

class Pila { private: Nodo* cima; public: Pila() : cima(nullptr) {}

~Pila() { while (!esVacia()) { pop(); } }

void push(char valor) { Nodo* nuevoNodo = new Nodo(); nuevoNodo->dato = valor; nuevoNodo->siguiente = cima; cima = nuevoNodo; }

void pop() { if (esVacia()) { return; } Nodo* temp = cima; cima = cima->siguiente; delete temp; }

char tope() { if (esVacia()) { return '\0'; } return cima->dato; }

bool esVacia() { return cima == nullptr; } };

bool estanBalanceados(const string& expresion) { Pila pila; for (char c : expresion) { if (c == '(' || c == '{' || c == '[') { pila.push(c); } else if (c == ')' || c == '}' || c == ']') { if (pila.esVacia()) { return false; } char tope = pila.tope(); if ((c == ')' && tope == '(') || (c == '}' && tope == '{') || (c == ']' && tope == '[')) { pila.pop(); } else { return false; } } } return pila.esVacia(); }

string verificarBalanceo(const string& expresion) { if (estanBalanceados(expresion)) { return "BALANCEADO CORRECTAMENTE"; } else { int x1 =0, x2=0, y1=0, y2=0, z1=0, z2=0; for (char c : expresion) { switch(c) { case ')': x1++; break; case '(': x2++; break; case '}': y1++; break; case '{': y2++; break; case ']': z1++; break; case '[': z2++; break;

    }
}
    if (x1==x2 && y1==y2 &&z1 ==z2) {
        return "BALANCEADO INCORRECTAMENTE";
    } else {
        return "NO ESTÁN BALANCEADOS";
    }
}

return "NO ESTÁN BALANCEADOS";

}

int main() {

string expresion1 = "(A+B-[2*3]-C)";
string expresion2 = "(A+B-[2*3)-C]";
string expresion3 = "{(A+B-[2*3}";

string resultado = verificarBalanceo(expresion1);
cout << resultado << endl;
string resultado2 = verificarBalanceo(expresion2);
cout << resultado2 << endl;
string resultado3 = verificarBalanceo(expresion3);
cout << resultado3 << endl;

return 0; }