Implementação de Pilha, Fila e Lista em C#
Classe Pilha
public class Pilha
{
private const int CAPACIDADE = 5; // define o tamanho máximo desta pilha.
private string[] dados = new string[CAPACIDADE]; // vetor para guardar os dados da pilha.
private int topo = -1; // variável que indicará a posição no vetor do topo da pilha.
public int Tamanho() // este método informa o tamanho da pilha
{
return topo + 1; // lembre-se que o vetor inicia na posição zero...
}
public bool Vazia() // este método retorna true se a pilha estiver vazia
{
return Tamanho() == 0;
}
public void Empilha(string p_valor) // este método empilha um valor string na pilha
{
if (Tamanho() != CAPACIDADE)
{
topo++;
dados[topo] = p_valor;
}
else
{
throw new Exception("A pilha está cheia!!!");
}
}
public string Desempilha() // este método desempilha um valor da pilha
{
if (Vazia() == true)
{
throw new Exception("A pilha está vazia!!!");
}
else
{
topo--;
return dados[topo + 1];
}
}
public string RetornaTopo() // este método devolve o valor que está no topo
{
if (Vazia() == true)
throw new Exception("A pilha está vazia!!!");
else
return dados[topo];
}
}
Classe Fila
public class Fila
{
const int CAPACIDADE = 5; // capacidade máxima da fila
private int quantidade = 0; // quantidade de elementos enfileirados
private int inicio = 0; // indica qual a primeira posição da fila
private int fim = 0; // indica a próxima posição
private string[] dados = new string[CAPACIDADE]; // armazenar os dados da fila
public int tamanho() // retorna o tamanho da fila
{
return quantidade;
}
public void enfileirar(string p_valor) // enfileira um valor string
{
if (tamanho() == CAPACIDADE)
{
throw new Exception("A fila está cheia!!!!");
}
else
{
dados[fim] = p_valor;
fim = (fim + 1) % CAPACIDADE;
quantidade++;
}
}
public string desenfileira() // remove o primeiro elemento da fila e devolve
{
if (tamanho() == 0)
{
throw new Exception("A fila está vazia!");
}
else
{
string valor = dados[inicio];
inicio = (inicio + 1) % CAPACIDADE;
quantidade--;
return valor;
}
}
}
Classe Lista
public class Lista
{
private const int CAPACIDADE = 10;
private string[] dados = new string[CAPACIDADE];
private int quantidade = 0;
public int tamanho()
{
return quantidade;
}
public void insereNaPosicao(int p_posicao, string p_valor)
{
if (tamanho() == CAPACIDADE)
throw new Exception("A lista está cheia!!!\n\n");
else if (p_posicao > tamanho())
throw new Exception("Não é possível inserir nesta posição");
else
{
quantidade++;
for (int i = tamanho() - 1; i > p_posicao; i--)
{
dados[i] = dados[i - 1];
}
dados[p_posicao] = p_valor;
}
}
public string removeDaPosicao(int posicao)
{
if (tamanho() == 0)
throw new Exception("A lista está vazia!!!");
else if (posicao > tamanho() - 1)
throw new Exception("Posição inválida!!!");
else
{
string aux = dados[posicao];
for (int i = posicao; i < tamanho() - 1; i++)
{
dados[i] = dados[i + 1];
}
quantidade--;
return aux;
}
}
public void insereNoInicio(string p_valor)
{
insereNaPosicao(0, p_valor);
}
public void insereNoFim(string p_valor)
{
insereNaPosicao(tamanho(), p_valor);
}
public void imprimeLista()
{
Console.WriteLine("\n\nImpressão dos dados da lista:\n");
for (int i = 0; i < tamanho(); i++)
{
Console.WriteLine(dados[i]);
}
}
}