Estruturas de Dados em C#: Pilha, Fila e Lista Encadeada

Computação17,3 KB

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

Baixar

PDF Word HTML