Dúvida Cruel

Olá galera blz estou com uma dúvida na verdade sou novo trabalhando com estrutura de dados dentro do java e tenho um problema para resolver fiquei até meio assim de postar aqui pois tenho total consciência de não postar o enunciado pois não quero q ninguém faça para mim e sei que isso vai contra as regras do fórum porém se puderem ler o pdf o link pois a minha duvida é.

No final ele diz que eu posso escolher qualquer estrutura eu até comecei com uma porem empaquei.

E cai na duvida cruel de qual seria a melhor estrutura para resolver o problema visando que tenho me de recomeçar e ser um tempo perdido novamente, pois tenho q entregar amanha.

Entendo que alguém mais experiente lendo o enunciado saberia qual estrutura usar para um fácil manipulação dos dados e implementação.Eu não busco nada pronto apenas gostaria de uma clareada de ideias acho que se tiver alguém que leciona aulas vai entender a minha peleja como aluno, pois as vezes travamos e não conseguimos sair do lugar. Ou pode ser que eu esteja indo mal mesmo na matéria e não estou vendo a resolução que está clara.

Bom de qualquer forma segue:

Peço desculpas se estou indo contra as regras do fórum.

Mais estou empacado nisso a dias fritando os nerônios e não consigo sair do lugar.

Att.

Como eu disse na primeira postagem eu não estava aqui procurando pronto.

Apesar de ninguém ter conseguido responder minha dúvida estou postando aqui a solução do meu problema.

No caso não sei se está correta ainda, pois ainda não obtive o feedback do meu tutor.

Porém foi o mais próximo que cheguei do enunciado.

Espero que possa ajudar alguém caso necessário.

Motivo da escolha da ED:

Utilizamos Lista Ligada para o projeto. Levamos em consideração o fato de que com a Lista Ligada pode-se adicionar elementos em qualquer posição sem ter que refazer a estrutura com um tamanho maior. Da mesma forma para a remoção, onde podemos remover o primeiro grupo de classes de uma determinada fila sem ter que redimensionar a estrutura de dados, ou seja, não precisamos deslocar as outras pessoas da fila após uma remoção ou inserção na mesma.

Informo que foi em grupo o projeto então tem códigos misturados ai, porém acho que da para entender.

Atenciosamente,

[code]
import java.util.LinkedList;
import java.util.Scanner;

/*

  • To change this template, choose Tools | Templates

  • and open the template in the editor.
    /
    /
    *

  • @author wyllvp
    */
    public class FilaBrasileira {

    public static LinkedList filaGeral;
    public static int quantidadeFilas;
    public static int quantidadeClasses;
    public static int tamanhoGrupos;
    public static int contadorClasses;
    public static boolean iniciou = false;
    public static int classesAtuais;

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {

      Scanner scan = new Scanner(System.in);
      String digitado;
      String metodo;

      while (true) {

       digitado = scan.nextLine();
      
      
       if (digitado.matches("(\\d+)\\s{1}(\\d+)\\s{1}(\\d+)")) {
      
           iniciar(Integer.parseInt(digitado.replaceAll("(\\d+)\\s{1}(\\d+)\\s{1}(\\d+)", "$1")),
                   Integer.parseInt(digitado.replaceAll("(\\d+)\\s{1}(\\d+)\\s{1}(\\d+)", "$2")),
                   Integer.parseInt(digitado.replaceAll("(\\d+)\\s{1}(\\d+)\\s{1}(\\d+)", "$3")));
      
       } else if (digitado.matches("[I][N][S][E][R][E]\\s{1}(\\d+)\\s{1}(\\w{1,10})")) {
      
           insere(Integer.parseInt(digitado.replaceAll("[I][N][S][E][R][E]\\s{1}(\\d+)\\s{1}(\\w{1,10})", "$1")),
                   digitado.replaceAll("[I][N][S][E][R][E]\\s{1}(\\d+)\\s{1}(\\w{1,10})", "$2"));
      
       } else if (digitado.matches("[R][E][M][O][V][E]\\s{1}(\\d+)")) {
           remove(Integer.parseInt(digitado.replaceAll("[R][E][M][O][V][E]\\s{1}(\\d+)", "$1")));
       } else {
           metodo = digitado.replaceAll("(\\w+)(\\s+)(.*)", "$1");
           switch (metodo) {
               case "IMPRIME":
                   imprime();
                   break;
               case "FIM":
                   fim();
               default:
                   System.out.println("Comando inválido");
           }
       }
      

      }
      }

    /*

    • Método que inicia a fila geral e as sub filas
    • @ author Rafael - Willian - Rodrigo - Fábio
    • @ param f - valor para a quantidade de filas que terá
    • @ param c - valor para a quantidade de Classes que poderá ter
    • @ param g - valor para a quantidade que um grupo de classes pode assumir na fila

    */
    public static void iniciar(int f, int c, int g) {
    quantidadeClasses = c;
    quantidadeFilas = f;
    tamanhoGrupos = g;
    classesAtuais = 0;

     if (!(quantidadeFilas >= 1)) {
         System.out.println("Quantidade de Filas inválida");
         return;
     }
    
     if (!(quantidadeClasses >= 0)) {
         System.out.println("Quantidade de Classes inválida");
         return;
     }
    
     if (!(tamanhoGrupos >= 1)) {
         System.out.println("Tamanho para os grupos inválido");
         return;
     }
    
     filaGeral = new LinkedList<LinkedList>();
    
     for (int i = 0; i < quantidadeFilas; i++) {
    
         filaGeral.add(new LinkedList<LinkedList>());
    
     }
    
     iniciou = true;
    

    }

    /*

    • Método que inseri uma nova pessoa na melhor fila
    • @ author Rafael - Willian - Rodrigo - Fábio
    • @ param pessoa - identificacao de uma pessoa
    • @ param classe - identifica a classe que esta pessoa pertence

    */
    public static void insere(int pessoa, String classe) {

     boolean achouClasse = false;
    
     for (int cont1 = 0; cont1 < quantidadeFilas; cont1++) {
         for (int cont2 = 0; cont2 < filaGeral.get(cont1).size(); cont2++) {
             if (classe.equals((filaGeral.get(cont1).get(cont2) + "").replaceAll("(\\w+)\\d+", "$1"))) {
                 achouClasse = true;
             }
         }
     }
    
     if (!achouClasse) {
         classesAtuais++;
     }
    
     if ((iniciou && (classesAtuais <= quantidadeClasses)) || (achouClasse)) {
         int menorFila = 0;
         int tamanhoMenorFila = filaGeral.get(0).size();
         boolean podeParar = false;
         int tamanhoPelaClasse = filaGeral.get(0).size();
         int menorPelaClasse = 0;
         boolean podeInserir = true;
    
         for (int i = 1; i < quantidadeFilas; i++) {
             if (filaGeral.get(i).size() < tamanhoMenorFila) {
                 tamanhoMenorFila = filaGeral.get(i).size();
                 menorFila = i;
             }
         }
    
         for (int i = 0; i < quantidadeFilas; i++) {
    
             boolean primeiraPassagem = true;
             int contador = 0;
    
             for (int j = 0; j < filaGeral.get(i).size(); j++) {
    
                 int percorrendoPosicao = filaGeral.get(i).size();
    
                 if (classe.equals((filaGeral.get(i).get(j) + "").replaceAll("(\\w+)\\d+", "$1"))) {
    
                     percorrendoPosicao = j;
    
                     while (classe.equals((filaGeral.get(i).get(percorrendoPosicao) + "").replaceAll("(\\w+)\\d+", "$1"))) {
    
                         percorrendoPosicao++;
    
                         if (primeiraPassagem) {
                             contador++;
                         }
    
                         if (percorrendoPosicao == filaGeral.get(i).size()) {
                             break;
                         }
                     }
                     primeiraPassagem = false;
                 }
    
                 if (percorrendoPosicao < tamanhoMenorFila) {
    
                     if (!(contador >= tamanhoGrupos)) {
    
                         tamanhoPelaClasse = j;
                         tamanhoMenorFila = percorrendoPosicao;
                         menorFila = i;
    
                     } else {
                         podeInserir = false;
                     }
                 }
             }
         }
         if (podeInserir) {
             filaGeral.get(menorFila).add(tamanhoMenorFila, classe + pessoa);
         }
     }
    

    }

    /*

    • Método que imprimi todas as filas

    • em ordem

    • @ author Rafael - Willian - Rodrigo - Fábio
      */
      public static void imprime() {

      for (int i = 0; i < quantidadeFilas; i++) {

       System.out.print("#" + (i + 1) + ": ");
      
       for (int j = 0; j < filaGeral.get(i).size(); j++) {
      
           System.out.print(filaGeral.get(i).get(j) + " ");
      
       }
       System.out.println();
      

      }
      System.out.println();
      }

    /*

    • Método que remove um grupo de classe que estiver na frente de uma fila
    • @ author Rafael - Willian - Rodrigo - Fábio
    • @ param fila - identifica qual a fila que sera retirada o grupo de classes
    • que estiver na frente

    */
    public static void remove(int fila) {

     if (fila > 0 && fila <= filaGeral.size()) {
    
         String classeExcluir = (filaGeral.get(fila - 1).get(0) + "").replaceAll("(\\w+)\\d+", "$1");
    
         while (filaGeral.get(fila - 1).size() > 0
                 && classeExcluir.equals((filaGeral.get(fila - 1).get(0) + "").replaceAll("(\\w+)\\d+", "$1"))) {
    
             filaGeral.get(fila - 1).removeFirst();
    
         }
     }
    

    }

    /*

    • Método que finaliza a aplicação
    • @ author Rafael - Willian - Rodrigo - Fábio

    */
    public static void fim() {
    System.exit(0);
    }
    }[/code]