Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Wolfi207Y en 22 de Julio 2021, 20:48

Título: Colas y Pilas Java dinámica peek push pop eliminar números primos de una cola
Publicado por: Wolfi207Y en 22 de Julio 2021, 20:48
Hola, necesito ayuda para eliminar números primos de una cola en Java. La cola ya está creada pero necesito el método para eliminarlos. Ademas de tener que ordenar de mayor a menor los números en la cola. Si me pueden indicar como hacerlo me serian de mucha ayuda :3

Adjuntaré la Clase "ColaDinamica", intenté eliminar N° primos pero el "2" no me lo eliminó y no sé en que me equivoqué.

Código: [Seleccionar]
public class ColaDinamica {
    Nodo inicio;
    Nodo fin;

    public ColaDinamica(){
        inicio = null;
        fin = null;
    }
    public boolean isEmpty(){
        return inicio==null;
    }

    public int peek(){
        if(!isEmpty()){
            return inicio.elemento;
        }
        return -1;
    }

    public void push(int elemento){
        Nodo nuevo = new Nodo(elemento);
        if(isEmpty()){
            inicio=nuevo;
            fin=nuevo;
        }
        else{
            fin.sig = nuevo;
            fin = nuevo;
        }
    }

    public void pop(){
        if(!isEmpty()){
            inicio = inicio.sig;
        }
    }

    public  void sort() {
        //INGRESE SU CÓDWIGO AQUÍ
    }

    public  void eliminarPrimos() {
        ColaDinamica aux= new ColaDinamica();

        while(!isEmpty()){
            aux.push(peek());
            pop();
        }
        while(!aux.isEmpty()){
            if(aux.peek()%2==0||aux.peek()==1){
                push(aux.peek());
                aux.pop();
                if(aux.isEmpty()){
                    break;
                }
            }else{
                aux.pop();
                if(aux.isEmpty()){
                    break;
                }
            }
        }
    }

    @Override
    public String toString(){
        ColaDinamica p = new ColaDinamica();
        String salida = "";
        while(!this.isEmpty()){
            salida+=this.peek()+"-->";
            p.push(this.peek());
            this.pop();
        }

        while(!p.isEmpty()){
            this.push(p.peek());
            p.pop();
        }

        return salida;
    }
}

Título: Re: Colas y Pilas Java
Publicado por: Kabuto en 23 de Julio 2021, 01:40
No me llevo muy bien con las pilas y las colas....

En cualquier caso, aquí no veo que se estén buscando números primos:
Código: [Seleccionar]
if(aux.peek()%2==0||aux.peek()==1){
                push(aux.peek());
                aux.pop();
                if(aux.isEmpty()){
                    break;
                }
            }else{
                aux.pop();
                if(aux.isEmpty()){
                    break;
                }

Con ese if else, se está distinguiendo entre pares e impares, pero no primos.
Que NINGÚN número par es primo.
Pero no todos los impares son primos.

Necesitarías un método de apoyo, que sea tipo boolean, de manera que reciba un entero y diga TRUE si es primo o FALSE si no lo es.

Un número primo es aquel que solo es divisible por sí mismo (bueno, y por 1, porque todos los números son divisibles por 1)
Por ejemplo si el método recibe el número 9, pues ha de comprobar si es divisible por 8, por 7, por 6, por 5, por 4, por 3 ó por 2.
Si es divisible por alguno de ellos, entonces NO es primo.

Resulta que 9 SÍ es divisible por 3,
Citar
9 % 3 == 0 es TRUE
Por tanto, 9 NO es primo.

Para desarrollar un algoritmo que compruebe lo de ser primo, ya habrás deducido que se necesita un bucle que vaya en orden inverso comenzando por n-1 hasta llegar a 2.
Y en cada iteración comprobar si n es divisible por alguno de los números de esa secuencia.

Intenta escribir ese algoritmo, o busca ejemplos por la red, que los habrá a montones.