Pilha em java

3 respostas
R

Preciso alguém pode me ajudar com a criação de um programa que receba como parametro uma cadeia de caracteres representados por uma sequência de parêntesis e colchetes. A função deve retorna um valor lógico verdadeiro ou falso caso esteja agrupado corretamente e falso caso errado. Considerando é claro que a pilha possui 3 operações puxh(x), pop e top.

por exemplo:

[((]]) - falso
([()] - falso
)[]((()) - falso
(([])) - verdadeiro

Ficarei grato com a ajuda.

3 Respostas

davidbuzatto

Afinal, o que você precisa? De uma pilha, ou de uma pilha aplicada na solução do seu problema?
Poste o que já fez. Esse é o seu segundo tópico que vejo em menos de 15 minutos onde vc expõe seu problema, mas não apresenta o que você fez nem o que pensou em fazer.

[]'s

davidbuzatto

Sua tarefa agora é entender o que está acontecendo, implementar sua pilha e substituir pela pilha que usei.

import java.util.EmptyStackException;
import java.util.Stack;

/**
 *
 * @author dbuzatto
 */
public class Teste {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        String[] cadeias = { 
            "[((]])", 
            "([()]", 
            ")[]((())", 
            "(([]))",
            "()[()()()()([]())()[()(((([][()]))))()]]" };
        
        for ( String c : cadeias ) {
            System.out.println( c + " - " + isBalanceada( c ) );
        }

    }
    
    public static boolean isBalanceada( String cadeia ) {
        
        Stack<Character> pilha = new Stack<Character>();
        
        try {
            for ( char c : cadeia.toCharArray() ) {
                if ( c == '(' || c == '[' ) {
                    pilha.push( c );
                    continue;
                }
                if ( ( c == ')' && pilha.peek() == '(' ) ||
                        ( c == ']' && pilha.peek() == '[' ) )
                    pilha.pop();
            }
        } catch ( EmptyStackException exc ) {
            return false;
        }
        
        return pilha.isEmpty();
        
    }
}
WendersonLP

Essa é uma solução onde a lógica deixa o programa bem simples.

Já uma pilha pronta com a funcionalidade de
inserir - push
visualizar topo - top
remover topo - pop

você fará o seguinte: a solução nesse caso só será válida quando a pilha estiver vazia,
caso contrário será falsa.

Quando inserir algo na pilha, tipo “(”, ao ler o próximo você verifica se fecha esse parêntese,
caso fecha você remove o item que está no topo da pilha. Caso não fecha você fará a comparação
do que foi lido com o próximo da lista. E assim vale também para colchetes.

Criado 3 de outubro de 2011
Ultima resposta 3 de out. de 2011
Respostas 3
Participantes 3