static bool ValidarSequencia(string sequencia) { Pilha pilha = new Pilha(); for (int pos = 0; pos < sequencia.Length; pos++) { if (pilha.Vazia()) { pilha.Empilhar(new Caracter(sequencia[pos])); } else { Caracter caracterTopoPilha = (Caracter)pilha.ConsultarTopo(); if (ComplementaParenteses(caracterTopoPilha.Letra, sequencia[pos])) { pilha.Desempilhar(); //completar, retira } else { pilha.Empilhar(new Caracter(sequencia[pos])); //senão, insere } } } return(pilha.Vazia()); //Se a pilha estiver vazia, todos os parentesês se complementam }
private void DesempilharElementos <T>(Pilha <T> pilha, string nomePilha) { Console.Clear(); Console.WriteLine($"Desempilhando elementos da pilha {nomePilha}"); for (int i = pilha.Tamanho; i >= 0; i--) { Console.WriteLine($"Elemento {i}: {pilha.Desempilhar()}"); } }
private void PrintBinarios(Pilha <char> binarios) { var binario = new StringBuilder(); while (!binarios.EstaVazia()) { binario.Insert(0, binarios.Desempilhar()); } Console.WriteLine(binario.ToString()); }
private bool VerificarOrdem(Pilha <char> parenteses) { if (parenteses.Topo() == '(') { return(false); } int control = 0; while (!parenteses.EstaVazia()) { if (parenteses.Desempilhar() == ')') { control++; continue; } control--; } return(control == 0 && parenteses.Tamanho % 2 == 0); }