Array
(
)

Algoritmo de Pilha para Fila

Alexandrino
   - 15 mai 2014

Pessoal, o algoritmo a seguir funciona certinho como pilha, eu preciso de um que funcione como fila, ou seja, que as inclusões sejam feitas no final e as exclusões no começo.
Por favor.
#Código

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
public class Pilha 
{ 
   private int[] valores; 
   private int topo; 
 
   public Pilha(int n) /* Método construtor */ 
   { 
       if (n > 0) 
       { 
           valores = new int[n]; 
           topo = -1; 
       } 
   } 
 
   public int Push(int valor)   /* Método para empilhar */ 
   { 
       if (topo < valores.Length - 1) 
       { 
           topo++; 
           valores[topo] = valor; 
           return 0; 
       } 
       return -1; 
   } 
 
   public int Pop() /* Método para desempilhar */ 
   { 
       if (topo >= 0) 
       { 
           int valor = valores[topo]; 
           topo--; 
           return valor; 
       } 
       else return -1;  /* Stack Underflow */ 
   } 
 
   public string ImprimirPilha()    /* Método para imprimir a pilha */ 
   { 
       string saida = "\t"; 
       if (topo >= 0) 
       { 
           for (int i = topo; i >= 0; i--) 
           { 
               saida = saida + valores[i] + "\n\t"; 
           } 
           return saida; 
       } 
       else return "\tPilha Vazia"; 
   } 
} 
 
namespace ConsoleApplication1 
{ 
   class Program 
   { 
       static void Main(string[] args) 
       { 
           Pilha pilha = new Pilha(5); 
           int sair = 0; 
           string imprime = ""; 
           while (sair == 0) 
           { 
               imprimeOpcoes(); 
               int opcao = int.Parse(Console.ReadLine()); 
               if (opcao == 0) 
               { 
                   sair = 1; 
               } 
               else 
                   if (opcao == 1) 
                   { 
                       Console.Clear(); 
                       Console.WriteLine("Digite um numero para inserir na pilha\n"); 
                       pilha.Push(int.Parse(Console.ReadLine())); 
                       imprime = pilha.ImprimirPilha(); 
                       Console.WriteLine(imprime); 
                   } 
                   else 
                       if (opcao == 2) 
                       { 
                           Console.Clear(); 
                           pilha.Pop(); 
                           imprime = pilha.ImprimirPilha(); 
                           Console.WriteLine(imprime); 
                       } 
                       else 
                           if (opcao == 3) 
                           { 
                               Console.Clear(); 
                               imprime = pilha.ImprimirPilha(); 
                               Console.WriteLine(imprime); 
                           } 
           } 
       } 
       static public void imprimeOpcoes() 
       { 
           Console.WriteLine("\nEscolha uma opção:\n"); 
           Console.WriteLine("Sair digite 0"); 
           Console.WriteLine("Inserir na pilha digite 1"); 
           Console.WriteLine("Tirar da pilha digite 2"); 
           Console.WriteLine("Imprimir pilha digite 3\n"); 
       } 
   } 
}

Joel Rodrigues
   - 19 mai 2014

Opa, você precisa realmente desenvolver o algorítmo? Pois existem as classes Stack e Queue que usam esses conceitos de pilha e fila.

Joel Rodrigues
   - 19 mai 2014

Essas classes são explicadas neste artigo: Queue e Stack – Trabalhando com os modelos FIFO e LIFO em .NET