Empilha e Enfileira

Gostaria de entender melhor o que esses programas fazem, e para que servem algumas linhas de codigo…
Obrigada!!

Enfileira

import javax.swing.JOptionPane;

   public class enfileira
   {
       public static void main (String ags[])
	   {
        int ind, fim, valor;
        String incluir;
        int [] fila = new int [10];
        
        for(ind=0; ind<10; ind++)
        {
            fila[ind] = 0;
        }
        
        fim = 0;
        incluir = "S";
        
        do {
            if(fim == 10){
                JOptionPane.showMessageDialog(null, "Fila já cheia!!", "Entrada", 3);
                incluir = "N";
            }
            
            else {
                valor = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe valor para enfileirar", "Entrada", 3));
                fila[fim] = valor;
                fim = fim+1;
                incluir = JOptionPane.showInputDialog(null, "Deseja Enfileirar outro? S/N: ", "Entrada", 3);
                incluir = incluir.toUpperCase();
            }
        }
        while(incluir.equals("S"));
        JOptionPane.showMessageDialog(null, "Elementos Enfileirados", "Saída", 1);
        
        for(ind=0; ind<10; ind++) 
        {
            JOptionPane.showMessageDialog(null, "["+ind+"]: "+fila[ind]+" ", "Saída", 1);
        }
      }
    }    

Empilha

import javax.swing.JOptionPane;

   public class empilha
   {
       public static void main (String ags[])
	   {
       int pilha[] = new int[10];    
       int i;
       int topo;
       int valor;
       String incluir;

       for(i = 0 ; i<10; i++)
       {
         pilha[i] = 0;
     
       }

        topo = 0;

        incluir = "S";

     while (incluir.equals("S"))
      {
         if (topo > 9)
    	{
          JOptionPane.showMessageDialog(null,"Pilha Cheia!");
        
          incluir = ("N");
    	}
        
        else
        	{
        	
        	valor = Integer.parseInt(JOptionPane.showInputDialog(null,"Informe o Valor para Empilhar"));
        	
        	pilha[topo] = valor;
            
            topo = topo +1;
            
            
            incluir = JOptionPane.showInputDialog(null,"Deseja Empilhar Outro? S/N");
            incluir = incluir.toUpperCase();	
           	}
    }

      for(i = 0 ; i < 10; i ++)
     {
	JOptionPane.showMessageDialog(null, pilha[i]);
     }
   }  
}

Estes programas são implementações de 2 tipos de estrutura de dados, Fila e Pilha respectivamente.

A estrutura Fila tem o comportamento FIFO (primeiro dado que entra é o primeiro que sai).
A estrutura Pilha tem o comportamento LIFO (último dado que entra é o primeiro que sai).

O primeiro código (Fila) cria uma fila de 10 posições, onde o usuário vai informando valores que vão sendo “enfileirados”, até que ele informe “N” ou a fila esteja cheia (10 elementos). Logo após imprime o resultado.

O segundo código (Pilha) apresenta problema na parte onde é impresso o resultado: tem que ser do topo para a base, ou seja, em ordem decrescente (lembre: último dado que entra é o primeiro que sai).

Há maneiras melhores e mais simples de implementar estas estruturas. Segue um exemplo de Fila de inteiros:

Esta classe que eu postei de Fila utiliza a idéia de “array circular”.

Em vez de deslocar todos os elementos sempre que há uma entrada ou saída da fila, existem duas váriaveis indicando o ínicio e o fim para fazer este controle.