Estruturas de Dados em C#: Pilha, Fila e Lista Encadeada
Estruturas de Dados em C#: Pilha, Fila e Lista
// definição da classe Pilha
public class Pilha
{
private const int CAPACIDADE = 5; // define o tamanho máximo desta pilha.
private Funcionario[] dados = new Funcionario[CAPACIDADE]; // vetor para guardar os dados da pilha.
private int topo = -1; // variável que indica a posição no vetor do topo da pilha.
// este método informa o tamanho da pilha
public int Tamanho()
{return topo + 1; // lembre-se que o vetor inicia da posição zero...}
// este método empilha um valor string na pilha
public void Empilha(Funcionario p_valor)
{
if (Tamanho() != CAPACIDADE)
{
topo++;
dados[topo] = p_valor;
}
else
{
throw new Exception("A pilha está cheia!!!");
}
}
// este método desempilha um valor da pilha
public Funcionario Desempilha()
{
if (Tamanho() == 0)
{
throw new Exception("A pilha está vazia!!!");
}
else
{
topo--;
return dados[topo + 1];
}
}
// este método devolve o valor que está no topo
public Funcionario RetornaTopo()
{
if (Tamanho() == 0)
throw new Exception("A pilha está vazia!!!");
else
return dados[topo];
}
}
Classe Funcionario
// definição da classe Funcionario
public class Funcionario
{
#region Propriedades
private string nome;
public string Nome
{
get { return nome; }
set { nome = value; }
}
private double salario;
public double Salario
{
get { return salario; }
set
{
if (value < 0)
throw new Exception("Salário não pode ser negativo.");
salario = value;
}
}
#endregion
public Funcionario()
{
}
public Funcionario(string pNome, double pSalario)
{
// atribuir às propriedades para que seja feita a validação
Salario = pSalario;
Nome = pNome;
}
}
Classe Fila
class Fila
{
const int CAPACIDADE = 5; // capacidade máxima da fila
private int quantidade = 0; // qtde 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]; // armazena os dados da fila
// retorna o tamanho da fila
public int tamanho()
{
return quantidade;
}
// enfileira um valor string
public void enfileirar(string p_valor)
{
if (tamanho() == CAPACIDADE)
{
throw new Exception("A fila está cheia!!!!");
}
else
{
dados[fim] = p_valor;
fim = (fim + 1) % CAPACIDADE;
quantidade++;
}
}
// remove o primeiro elemento da fila e o devolve
public string desenfileira()
{
if (tamanho() == 0)
{
throw new Exception("A fila está vazia!");
}
else
{
string valor = dados[inicio];
inicio = (inicio + 1) % CAPACIDADE;
quantidade--;
return valor;
}
}
public string RetornaInicio()
{
if (tamanho() == 0)
{
throw new Exception("A fila está vazia!");
}
else
{
return dados[inicio];
}
}
public string RetornaFim()
{
if (tamanho() == 0)
{
throw new Exception("A fila está vazia!");
}
else
{
// return dados[(fim + CAPACIDADE - 1) % CAPACIDADE];
if (fim == 0)
return dados[CAPACIDADE - 1];
else
return dados[fim - 1];
}
}
public string Listar()
{
int totalImpresso = tamanho();
string retorno = "";
int posicaoAtual = inicio;
while (totalImpresso > 0)
{
retorno = retorno + dados[posicaoAtual] + " - ";
posicaoAtual = (posicaoAtual + 1) % CAPACIDADE;
totalImpresso--;
}
return retorno;
}
}
Classe Lista
class Lista
{
private const int CAPACIDADE = 10;
private Aluno[] dados = new Aluno[CAPACIDADE];
private int quantidade = 0;
public int tamanho()
{
return quantidade;
}
public void insereNaPosicao(int p_posicao, Aluno p_valor)
{
if (tamanho() == CAPACIDADE)
{
throw new Exception("A lista está cheia!!!\n\n");
}
else
{
quantidade++;
for (int i = tamanho() - 1; i > p_posicao; i--)
{
dados[i] = dados[i - 1];
}
dados[p_posicao] = p_valor;
}
}
public Aluno removeDaPosicao(int posicao)
{
if (tamanho() == 0)
{
throw new Exception("A lista está vazia!!!!");
}
else
{
Aluno aux = dados[posicao];
for (int i = posicao; i < tamanho() - 1; i++)
{
dados[i] = dados[i + 1];
}
quantidade--;
return aux;
}
}
public void insereNoInicio(Aluno p_valor)
{
insereNaPosicao(0, p_valor);
}
public void insereNoFim(Aluno p_valor)
{
insereNaPosicao(tamanho(), p_valor);
}
public string ImprimeLista()
{
string r = "\n\nImpressão dos dados da lista:\n";
for (int i = 0; i < tamanho(); i++)
{
r = r + dados[i].Ra.ToString() + " - " + dados[i].Nome + Environment.NewLine;
}
return r;
}
public Aluno RetornaPrimeiro()
{
if (tamanho() == 0)
throw new Exception("A lista está vazia!");
else
return dados[0];
}
public Aluno RetornaUltimo()
{
if (tamanho() == 0)
throw new Exception("A lista está vazia!");
else
return dados[tamanho() - 1];
}
public Aluno Pesquisa(int ra)
{
for (int i = 0; i < tamanho(); i++)
{
if (dados[i].Ra == ra)
return dados[i];
}
return null;
}
} // fim da classe Lista