Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- /*
- Quando fazermos alguma estrutura dinâmica, isso quer dizer que você tera que utilizar apenas ponteiros,
- e Nós, já que cada Nó guarda dados, e cada Nó tem um ponteiro apontando para o proximo Nó, pois para
- conseguir acessar outros elementos é necessario fazer isso para não perdermos os outros elementos independentimente
- da estrutura que você esteja usando.
- */
- // O pai aponta pro item topo da pilha.
- class No{
- public:
- char item;
- No *proximo;
- };
- class PilhaDinamica{
- public:
- No *topo;
- int pilha_tamanho;
- // Construtor
- PilhaDinamica(){
- topo = NULL;
- pilha_tamanho = 0;
- }
- // Verificando se a pilha esta vazia
- bool vazia(){
- if (topo == NULL){
- return true;
- }
- else
- {
- return false;
- }
- }
- // Verificando o tamanho da pilha
- int tamanho_pilha(){
- No *aux = topo;
- while(aux != NULL){
- pilha_tamanho++;
- aux = aux->proximo;
- }
- return pilha_tamanho;
- }
- /*
- Esse metodo push você insere elementos a pilha, o primero passo é alocar memoria dinamicamenta,
- em um ponteiro para ter um lugar para se armazenar.
- */
- bool push(char elemento){
- No *no_filho = new No();
- if (no_filho == NULL){ // Caso o OS não forneça memoria ele apontara para NULL e retornata false
- return false;
- }
- else
- {
- /*
- O no_filho tem memoria alocada dinamicamente, postanto sempre que o metodo for chamado, sera criado
- um local na memoria com esse Nó com seus dados dentro, esse Nó provem de uma class, portanto o mesmo
- funcionaria com o new já que ele sempre cria um novo endereço para tal objeto, portanto alocando
- dinamicamente.
- */
- no_filho->item = elemento;
- no_filho->proximo = topo;
- topo = no_filho;
- return true;
- }
- }
- // Metodo pop para retornar e remover o ultimo elemento da pilha,
- // no caso oque esta no topo.
- char pop(){
- No *TEMP;
- if (vazia()){
- return false;
- }
- else
- {
- char elemento = topo->item;
- TEMP = topo;
- topo = topo->proximo;
- free(TEMP);
- pilha_tamanho--;
- return elemento;
- }
- }
- // Metodo para verificar o elemento que esta no top da pilha.
- char espiando_topo(){
- if (vazia()){
- return '0';
- }
- else
- {
- return topo->item;
- }
- }
- };
- bool verificando(string elemento){
- PilhaDinamica *referencia_pilhaDinamica = new PilhaDinamica();
- int indice_elemento = 0;
- while(elemento[indice_elemento]){
- if ((elemento[indice_elemento] == '(') || (elemento[indice_elemento] == '[') || (elemento[indice_elemento] == '{')){
- referencia_pilhaDinamica->push(elemento[indice_elemento]);
- }
- else
- {
- if (elemento[indice_elemento] == ')'){
- if (referencia_pilhaDinamica->espiando_topo() != '('){
- return false;
- }
- else
- {
- referencia_pilhaDinamica->pop();
- }
- }
- else if(elemento[indice_elemento] == '}'){
- if (referencia_pilhaDinamica->espiando_topo() != '{'){
- return false;
- }
- else
- {
- referencia_pilhaDinamica->pop();
- }
- }
- else if(elemento[indice_elemento] == ']'){
- if (referencia_pilhaDinamica->espiando_topo() != '['){
- return false;
- }
- else
- {
- referencia_pilhaDinamica->pop();
- }
- }
- }
- indice_elemento++;
- }
- return referencia_pilhaDinamica->vazia();
- }
- void resultado(string elemento){
- if (verificando(elemento) == true){
- cout << "\n" << elemento << " <- CORRETO!" <<"\n";
- }
- else
- {
- cout << "\n" << elemento << " <- ERRADO!" <<"\n";
- }
- }
- void questao02(string frase){
- PilhaDinamica *pilha = new PilhaDinamica;
- bool errado = false;
- for(int i = 0; i < frase.length(); i++){
- pilha->push(frase[i]);
- }
- for(int i = 0; i < frase.length(); i++){
- if (pilha->pop() != frase[i])
- {
- errado = true;
- break;
- }
- }
- if (errado)
- {
- cout << "Nao é igual ao inverso" << endl;
- }
- else{
- cout << "É igual ao inverso" << endl;
- }
- }
- int main()
- {
- /*
- string a = ("{g}[(hj)]k");
- resultado(a);
- string b = ("a + [b + (2*c*d + 2)]");
- resultado(b);
- string c = ("a + b + (2*c*d + 2)]");
- resultado(c);
- string d = ("a +( b + 2*c*d + 2)]");
- resultado(d);
- string f = ("a +( b + 2*c*d + 2))");
- resultado(f);
- string g = ("a + [b + (2*c*d + 2])");
- resultado(g);
- string h = ("a + [b + (2*c*d + 2");
- resultado(h);
- string i = ("a + b + 2*c*d + 2])");
- resultado(i);
- string j = ("a + [b + [2*c*d + 2]]");
- resultado(j);
- string l = ("{[a + b] + ({2*c*d} + 2)}");
- resultado(l);
- */
- questao02("aina");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement