linguagem c#
Pretendo iniciar uma série de Posts mostrando como pode ser feita a implementação de estruturas de dados avançadas.
Para quem aprende estruturas de dados em uma liguagem estruturada, a tradução da estrutura para o Mundo OO pode ser traumática, porém quero mostrar aqui para vocês que a forma de se raciocinar em OO é bem mais interessante e o trabalho é facilitado.
A primeira estrutura que estarei mostrando é a estrutura de uma Lista Simplesmente Encadeada.
Ela consiste em em uma "alocação sequêncial de memória", em liguangens não OO utilizaríamos ponteiros para fazer essa alocação dinânica, porém em nosso cenário isso não é necessário já que existe uma flexibilidade muito grande entre os tipos.
Mostrarei a estrutura e os algoritmos aqui, sem comentários no código.
Vamos ao código.
Primeiro Criamos uma Classe Node, ela será o nosso trunfo do alocamento dinâmico. Contem 2 campos fundamentais, Info para receber um objeto e Next para refernciar o próximo objeto da nossa lista.
public class Node
{
public Node(object info, Node next) { this.Info = info; Next = next; }
public Node(object info) { Info = info; Next = null; }
public object Info = null; public Node Next = null;
}
Utilizei 2 contrutores diferentes, eles nos ajudarão na codificação mais adiante.
A próxima classe a ser criada é a classe Nodes, que é uma coleção de objetos Node, ela é muito útil para percorrer a lista toda. Esse tipo de Classe está presente nas coleções que conhecemos nativamente no .NET Framework, como por exemplo os "Items" de um ComboBox. Ela funciona como um indexador. Foi implementada, mas não utlizaremos todos os seus recursos.
public class Nodes : CollectionBase
{
public Node this[int item] {get{return this.GetNode(item);}}
public void Add(Node node) { List.Add(node); }
public bool Remove(int