Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Everton.

Problema com lista.

Recommended Posts

Escrever um algoritmo que leia um conjunto de até 500 valores inteiros. O valor 0 (zero) finaliza a entrada de dados. Para cada valor lido, determinar se ele é um número par ou ímpar. Se o número for par, então incluí-lo na FILA PAR; caso contrário, incluí-lo na FILA ÍMPAR. Após o término da entrada de dados, retirar um elemento de cada fila alternadamente (iniciando-se pela FILA ÍMPAR) até que ambas as filas estejam vazias. Se o elemento retirado de uma das filas for divisível por 3 (três), então incluí-lo em uma PILHA; caso contrário, remover um elemento da PILHA. Finalmente, exiba o conteúdo da pilha.

 

 

Implementação da pilha

 

 

 

package exercicio_02;

public class Pilha {
   private int elementos[];
   private int topo;

   public Pilha(int tam) {
       elementos = new int[tam];
       topo = -1;
   }

   public int push(int elem) {
       if (topo == elementos.length - 1) {
           // Pilha cheia!! não é possível inserir novos elementos!
           return -1;
       } else {
           topo++;
           elementos[topo] = elem;
           return 1;
       }
   }

   public int pop() {
       int e;

       if (topo == -1) {
           // Pilha vazia!! Não é possível remover o elemento do topo
           return -1;
       } else {
           e = elementos[topo];
           topo--;
           return e;
       }
   }

   public boolean vazia(){
       if (topo >= 0)
           return false;
       else
           return true;
   }

   public int topo(){
       return elementos[topo];
   }

   public int numElementos(){
       return topo + 1;
   }

   public boolean estaNaFila(int e){
       boolean achou = false;

       for(int i = 0; i <= topo; i++)
           if(elementos[i] == topo)
               achou = true;

       return achou;
   }

   public void imprime(){
       for(int i = 0; i <= topo; i++){
           System.out.print(" " + elementos[i] + " -");
       }
       System.out.println("--> TOPO\n");
   }
}

 

 

 

 

Implementação da fila

 

 

 

package exercicio_02;

public class Fila {

   int elementos[], inicio, fim, nElementos;

   public Fila(int tam) {
       elementos = new int[tam];
       inicio = fim = -1;
       nElementos = 0;
   }

   public int insere(int e) {
       if (nElementos == elementos.length) {
           // Fila Cheia!!!
           return -1;
       } else {
           nElementos++;
           fim = (fim + 1) % elementos.length;
           elementos[fim] = e;

           if (nElementos == 1) {
               inicio = fim;
           }

           return 1;
       }
   }

   public int remove() {
       int e;
       if (nElementos == 0) {
           // Fila Vazia!!!!
           return -1;
       } else {
           e = elementos[inicio];
           nElementos--;
           inicio = (inicio + 1) % elementos.length;

           return e;
       }

   }
}

 

 

 

 

Implementação da main

 

 

 


package exercicio_02;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

// Alan Sullivan - Rafael Pinheiro
public class Main {

   public static void main(String[] args) {
       int e, i, totalListas;

       List<Integer> listaPares = new ArrayList<Integer>();
       List<Integer> listaImpares = new ArrayList<Integer>();

       Fila fila_pares, fila_impares;
       Pilha pilha;

       Scanner entrada = new Scanner(System.in);

       System.out.print("Digite um valor inteiro: ");
       e = entrada.nextInt(); // recebe número inteiro

       while (e != 0) {
           if (e % 2 == 0) {
               listaPares.add(e); //Adiciona na Lista Par
           } else {
               listaImpares.add(e); //Adiciona na Lista Impar
           }

           System.out.print("Digite um valor inteiro: ");
           e = entrada.nextInt(); // recebe número inteiro
       }

       fila_pares = new Fila(listaPares.size());
       fila_impares = new Fila(listaImpares.size());

       for (i = 0; i < listaPares.size(); i++) {
           e = listaPares.get(i);
           fila_pares.insere(e);
       }

       for (i = 0; i < listaImpares.size(); i++) {
           e = listaImpares.get(i);
           fila_impares.insere(e);
       }

       totalListas = listaPares.size() + listaImpares.size();
       pilha = new Pilha(totalListas);

       for (i = 1; i <= totalListas; i++) {
           if (i % 2 == 0) {
               e = fila_pares.remove();
           } else {
               e = fila_impares.remove();
           }

           if (e % 3 == 0) {
               pilha.push(e);
           } else {
               pilha.pop();
           }
       }
       pilha.imprime();
   }
}

 

 

 

Só com reza braba. x.x

Compartilhar este post


Link para o post
Compartilhar em outros sites

você n explicou que problema está tendo com seu código? Algum erro de compilação?? Lógica?? O que é que não está funcionando??

 

Tem certeza que esse método é para classe pilha?

public boolean estaNaFila(int e){
       boolean achou = false;

       for(int i = 0; i <= topo; i++)
           if(elementos[i] == topo)
               achou = true;

       return achou;
   }

 

Posta aí o que está acontecendo p gente poder dar uma ajuda..

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.