
Library to Lua Programming Language that aims to provide most used data structures and algorithms.
Criar um repositorio independente e aberto com diversas estruturas de dados implementadas em Lua. A ideia do projeto consiste em expandir o repertorio da biblioteca atraves de contribuicoes externas.
Os contribuidores do repositorio podem ser consultados no arquivo CONTRIBUTORS.
Qualquer um pode contribuir, basta abrir uma issue, realizar um fork e fazer um pull request. Ler CONTRUBUTING.md para todos os detalhes desse processo.
A utilização das estruturas é bem simples. Basta baixar o arquivo ".lua" da estrutura desejada e juntar ao projeto. Após isso, importar e instanciar a classe da estrutura utilizando esse arquivo:
local classe_estrutura = require("estrutura_desejado.lua");
local objeto = classe_estrutura:new()Estrutura basica de arvore binaria de busca. Permite inserir, remover e imprimir elementos em ordem.
- Arvore:new(args)
- Descricao: Metodo construtor que instancia o objeto Arvore.
- Argumentos: (Table) Atributos desejados para a Arvore.
- Retorno: (Object) Arvore instanciada.
- Arvore:insert(elem)
- Descricao: Metodo insert que adiciona um elemento na arvore binaria.
- Argumentos: (Object) Elemento desejado para incluir na arvore.
- Arvore:remove(elem)
- Descricao: Metodo remove que exclui um elemento da arvore binaria.
- Argumentos: (Object) Elemento desejado para remover da arvore.
- Arvore:print()
- Descricao: Metodo que imprime os elementos da arvore em ordem.
local Arvore = require("arvore_binaria");
local arvore = Arvore:new();
arvore:insert(10);
arvore:insert(5);
arvore:insert(15);
arvore:remove(5);
arvore:print();Estrutura balanceada de arvore binaria de busca. Mantem a altura controlada apos insercoes e remocoes internas.
- Arvore:new(args)
- Descricao: Metodo construtor que instancia o objeto Arvore AVL.
- Argumentos: (Table) Atributos desejados para a Arvore AVL.
- Retorno: (Object) Arvore AVL instanciada.
- Arvore:add(new_value)
- Descricao: Metodo add que insere um novo valor na arvore AVL.
- Argumentos: (Object) Valor desejado para incluir na arvore.
- Arvore:print()
- Descricao: Metodo que imprime os elementos e alturas da arvore AVL em ordem.
local AVL = require("avl");
local arvore = AVL:new();
arvore:add(3);
arvore:add(2);
arvore:add(1);
arvore:print();Estrutura basica de fila de prioridade. A ordenacao dos elementos e controlada por uma funcao de comparacao informada na criacao.
- Fila_Prioridade:new(args, func)
- Descricao: Metodo construtor que instancia o objeto Fila_Prioridade.
- Argumentos: (Table) Atributos desejados para a Fila_Prioridade.
- (Function) Funcao de comparacao entre os elementos.
- Retorno: (Object) Fila_Prioridade instanciada.
- Fila_Prioridade:push(objeto)
- Descricao: Metodo push que insere um objeto na fila de prioridade.
- Argumentos: (Object) Objeto desejado para incluir na fila.
- Fila_Prioridade:pop()
- Descricao: Metodo pop que remove o objeto com maior prioridade.
- Retorno: (Object) Objeto removido da fila.
- Fila_Prioridade:print()
- Descricao: Funcao que printa toda a fila.
- Fila_Prioridade:free()
- Descricao: Metodo para liberar a fila de prioridade.
local Fila_Prioridade = require("fila_prioridade");
local fila = Fila_Prioridade:new({}, function(a, b)
return a < b;
end);
fila:push(3);
fila:push(1);
fila:push(2);
print(fila:pop()); --> 1Estrutura basica de fila. Estrutura que segue a logica FIFO(first in, first out).
- Fila:new(args)
- Descricao: Metodo construtor que instancia o objeto Fila.
- Argumentos: (Table) Atributos desejados para a Fila.
- Retorno: (Object) Fila instanciada.
- Fila:push(args)
- Descricao: Metodo push que insere um objeto na Fila.
- Argumentos: (Object) Objeto desejados para incluir na Fila.
- Fila:pop()
- Descricao: Metodo pop que remove um objeto da Fila.
- Retorno: (Object) Objeto removida da Fila.
- Fila:free()
- Descricao: Metodo para liberar a Fila.
Implementacao pronta para operacoes basicas de insercao, remocao, leitura e liberacao da estrutura.
local Fila = require("fila");
local nova_fila = Fila:new();
nova_fila:push("Primeiro_Elemento");
nova_fila:push("Segundo_Elemento");
local elemento_extraido = nova_fila:pop();
print(elemento_extraido);
nova_fila:free();
nova_fila = nil;
Estrutura basica de grafo orientado com pesos nas arestas. Cada no armazena valor e lista de adjacencia.
- Grafo:new(args)
- Descricao: Metodo construtor que instancia o objeto Grafo.
- Argumentos: (Table) Atributos desejados para o Grafo.
- Retorno: (Object) Grafo instanciado.
- Grafo:addNo(index, valor)
- Descricao: Metodo que adiciona um novo no no grafo.
- Argumentos: (Object) Identificador do no.
- (Object) Valor armazenado no no.
- Grafo:removeNo(index)
- Descricao: Metodo que remove um no do grafo.
- Argumentos: (Object) Identificador do no.
- Grafo:addEdge(src, dest, peso)
- Descricao: Metodo que adiciona uma aresta entre dois nos.
- Argumentos: (Object) No de origem.
- (Object) No de destino.
- (Number) Peso da aresta.
- Grafo:removeEdge(src, dest)
- Descricao: Metodo que remove uma aresta entre dois nos.
- Argumentos: (Object) No de origem.
- (Object) No de destino.
- Grafo:printAdjacent(index)
- Descricao: Metodo que imprime a lista de adjacencia de um no.
- Argumentos: (Object) Identificador do no.
- Grafo:print()
- Descricao: Metodo que imprime todos os nos e suas adjacencias.
- Grafo:getValor(index)
- Descricao: Metodo que retorna o valor armazenado em um no.
- Argumentos: (Object) Identificador do no.
- Retorno: (Object) Valor armazenado no no.
local Grafo = require("grafo");
local grafo = Grafo:new();
grafo:addNo(1, "A");
grafo:addNo(2, "B");
grafo:addEdge(1, 2, 5);
grafo:print();Tabela hash simples para armazenamento de numeros inteiros, com insercao, remocao, busca interna e limpeza da estrutura.
- TabelaHash:new(args)
- Descricao: Metodo construtor que instancia o objeto TabelaHash.
- Argumentos: (Table) Atributos desejados para a TabelaHash.
- Retorno: (Object) TabelaHash instanciada.
- TabelaHash:insert(key)
- Descricao: Metodo insert que adiciona uma chave na tabela hash.
- Argumentos: (Number) Chave desejada para incluir.
- TabelaHash:remove(key)
- Descricao: Metodo remove que exclui uma chave da tabela hash.
- Argumentos: (Number) Chave desejada para remover.
- TabelaHash:clear()
- Descricao: Funcao que remove todos os elementos da tabela hash.
- TabelaHash:print()
- Descricao: Funcao que printa os elementos armazenados e suas posicoes.
- TabelaHash:free()
- Descricao: Metodo para liberar a tabela hash.
local TabelaHash = require("hash");
local hash = TabelaHash:new({m = 10});
hash:insert(10);
hash:insert(20);
hash:print();Estrutura basica de Lista. Seguem métodos tradicionais.
- Lua:new(atributos)
- Descricao: Metodo cosntrutor que instancia o objeto Lista..
- Argumentos: (Table) Atributos desejados para a Lista.
- Retorno: (Object) Lista instanciada.
- Lista:append(objeto)
- Descricao: Metodo append que insere um objeto no fim da Lista.
- Argumentos: (Object) Objeto desejados para incluir na Lista.
- Lista:insert(objeto, i)
- Descricao: Metodo append que insere um objeto em uma posição específica da Lista.
- Argumentos: (Object) Objeto desejados para incluir na Lista.
- (Int) Índice da posição para inserir na lista.
- Lista:pop(i)
- Descricao: Metodo pop que remove um objeto específico da Lista.
- Argumentos: (Int) Índice da posição para remover da lista.
- Retorno: (Object) Objeto removida da Lista.
- Lista:print()
- Descricao: Funcao que printa toda a lista
- Lista:count()
- Descricao: Funcao que retorna a quantidade de elementos na lista.
- Retorno: (Int) Quantidade de elementos da lista.
- Lista:extend(lista_base)
- Descricao: Funcao que extende uma lista em outra. Concatena no fim. Ou seja, adiciona a lista_base no fim da lista.
- Argumentos: (Lista) Lista a ser adicionada.
- Lista:clear()
- Descricao: Funcao que remove todos os elementos de uma Lista.
- Lista:index(elemento)
- Descricao: Funcao que retorna o índice do primeiro elemento com o valor especificado.
- Argumentos: (Object) elemento a ser identificado na lista.
- Retorno: (Int) Índice correspondente. Quando não há um elemento, retorna -1;
- Lista:remove(elemento)
- Descricao: Funcao que remove o primeiro elemento com o valor especificado.
- Retorno: (Object) elemento a ser identificado na lista.
- Lista:copy()
- Descricao: Funcao que retorna a cópia de uma lista.
- Argumentos: (Object) elemento a ser identificado na lista.
- Lista:reverse()
- Descricao: Funcao que reverte a ordem dos elementos de uma lista.
- Lista:sort()
- Descricao: Funcao que ordena uma Lista.
- Lista:free()
- Descricao: Metodo para liberar a Lista.
local Lista = require("lista");
local aux = Lista:new();
aux:append("test");
aux:append(17);
aux:append(true);
aux:append("fim");
--Para printar a lista:
aux:print();
aux:free();
aux = nil;Estrutura basica de matriz com acesso por linha, coluna e posicao, alem de suporte a troca de elementos.
- Matriz:new(args, rows, cols)
- Descricao: Metodo construtor que instancia o objeto Matriz.
- Argumentos: (Table) Atributos desejados para a Matriz.
- (Int) Quantidade de linhas.
- (Int) Quantidade de colunas.
- Retorno: (Object) Matriz instanciada.
- Matriz:getLine(line)
- Descricao: Metodo que retorna uma linha da matriz.
- Argumentos: (Int) Linha desejada.
- Retorno: (Table) Linha requisitada.
- Matriz:getCol(col)
- Descricao: Metodo que retorna uma coluna da matriz.
- Argumentos: (Int) Coluna desejada.
- Retorno: (Table) Coluna requisitada.
- Matriz:swap(first_row, first_col, second_row, second_col)
- Descricao: Metodo que troca dois elementos da matriz.
- Argumentos: (Int) Linha do primeiro elemento.
- (Int) Coluna do primeiro elemento.
- (Int) Linha do segundo elemento.
- (Int) Coluna do segundo elemento.
- Matriz:getPos(row, col)
- Descricao: Metodo que retorna o elemento de uma posicao da matriz.
- Argumentos: (Int) Linha desejada.
- (Int) Coluna desejada.
- Retorno: (Object) Elemento da posicao.
- Matriz:setPos(item, row, col)
- Descricao: Metodo que atribui um elemento em uma posicao da matriz.
- Argumentos: (Object) Item desejado.
- (Int) Linha desejada.
- (Int) Coluna desejada.
- Matriz:free()
- Descricao: Metodo para liberar a Matriz.
local Matriz = require("matriz");
local matriz = Matriz:new({}, 2, 2);
matriz:setPos(10, 1, 1);
matriz:setPos(20, 1, 2);
print(matriz:getPos(1, 2)); --> 20Estrutura básica de Pilha. Estrutura de dados que segue a logica LIFO(last in, first out).
- Pilha:new(args)
- Descricao: Metodo construtor que instancia o objeto Pilha.
- Argumentos: (Table) Atributos desejados para a Pilha.
- Retorno: (Object) Pilha instanciada.
- Pilha:push(args)
- Descricao: Metodo push que insere um objeto na Pilha.
- Argumentos: (Object) Objeto desejados para incluir na Pilha.
- Pilha:pop()
- Descricao: Metodo pop que remove um objeto da Pilha.
- Retorno: (Object) Objeto removido da Pilha.
- Pilha:free()
- Descricao: Metodo para liberar a Pilha.
local Pilha = require("pilha");
local nova_pilha = Pilha:new();
nova_pilha:push("Primeiro_Elemento");
nova_pilha:push("Segundo_Elemento");
local elemento_extraido = nova_pilha:pop();
print(elemento_extraido);
nova_pilha:free();
nova_pilha = nil;Estrutura basica de Vetor. Segue metodos tradicionais.
- Vetor:new(args)
- Descricao: Metodo construtor que instancia o objeto Vetor.
- Argumentos: (Table) Atributos desejados para o Vetor.
- Retorno: (Object) Vetor instanciado.
- Vetor:insert(objeto)
- Descricao: Metodo insert que insere um objeto no Vetor.
- Argumentos: (Object) Objeto desejados para incluir no Vetor.
- Vetor:at(index)
- Descricao: Metodo at que acessa um objeto do Vetor.
- Argumentos: (Int) Indice qual se deseja acessar
- Retorno: (Object) Objeto acessado do Vetor.
- Vetor:tam()
- Descricao: Metodo que retorna o tamanho do Vetor.
- Retorno: (Int)Tamanho do Vetor.
- Vetor:front()
- Descricao: Metodo front que acessa o primeiro objeto do Vetor.
- Retorno: (Object) Objeto da primeira posicao do Vetor.
- Vetor:back()
- Descricao: Metodo back que acessao ultimo objeto do Vetor.
- Retorno: (Object) Objeto da ultima posicao do Vetor.
- Vetor:begin()
- Descricao: Metodo begin que seta o iterador para o primeira posicao do Vetor.
- Vetor:finale()
- Descricao: Metodo finale que seta o iterador para a ultima posicao do Vetor.
- Vetor:setIt(index)
- Metodo setIt que seta o iterador para uma posicao arbitraria do Vetor.
- Argumentos: (Int) Indice qual se deseja setar o iterador.
- Vetor:after()
- Descricao: Metodo after que busca o proximo elemento do vetor baseando-se no iterador.
- Retorno: (Object) Objeto da posicao iterada.
- Vetor:before()
- Descricao: Metodo before que busca o elemento anterior do vetor baseando-se no iterador.
- Retorno: (Object) Objeto da posicao iterada.
- Vetor:swap(vetor_base)
- Descricao: Metodo swap que troca todo conteudo do Vetor pelo conteudo de outro Vetor.
- Argumentos: (Vetor) Vetor base para o swap
- Retorno: (Int) Numero de posicoes copiadas
- Vetor:free()
- Descricao: Metodo para liberar o Vetor.
Implementacao pronta para acesso por indice, iteracao simples e troca de conteudo da estrutura.
local Vetor = require("vetor");
local aux = Vetor:new();
aux:insert("test");
aux:insert(17);
aux:insert(true);
aux:insert("fim");
print("Item na posicao 1 do vetor: " .. aux:at(1)); --> Item na posicao 1 do vetor: test
print("Inicio do vetor: " .. aux:front()); --> Inicio do vetor: test
print("Final do vetor: " .. aux:back()) --> Final do vetor: fim
--Para printar a lista:
aux:begin()
for i=1, aux:tam() do
print(aux:after()) -->test 17 true fim
end
aux:swap({1, "trocado", 124, false});
--Para printar a lista:
aux:finale()
for i=1, aux:tam() do
print(aux:before()) -->false 124 trocado 1
end
aux:free();
aux = nil;
Algoritmo de busca em vetor ordenado. Retorna a posicao do valor buscado ou -1 quando o valor nao existe.
- busca_binaria(array, valor)
- Descricao: Funcao que realiza busca binaria em um vetor ordenado.
- Argumentos: (Table) Vetor ordenado para consulta.
- (Object) Valor desejado.
- Retorno: (Int) Posicao encontrada ou -1.
local busca_binaria = require("binarysearch");
local pos = busca_binaria({1, 3, 5, 7}, 5);
print(pos); --> 3Algoritmo de ordenacao simples baseado em trocas sucessivas entre elementos adjacentes.
- bubbleSort(arr)
- Descricao: Funcao que ordena um vetor em ordem crescente.
- Argumentos: (Table) Vetor desejado para ordenacao.
- Retorno: (Table) Vetor ordenado.
local bubbleSort = require("bubblesort");
local resultado = bubbleSort({5, 4, 3, 2, 1});
print(resultado[1]); --> 1Algoritmo para caminho minimo em grafos ponderados sem pesos negativos. Aceita a estrutura Grafo do repositorio ou uma matriz de adjacencia.
- dijkstra(grafo, de, para)
- Descricao: Funcao que calcula a menor distancia entre dois vertices.
- Argumentos: (Object) Grafo ou matriz de adjacencia.
- (Object) Vertice de origem.
- (Object) Vertice de destino.
- Retorno: (Number) Distancia encontrada.
- (Table) Tabela de predecessores do caminho.
local Dijkstra = require("dijkstra");
local Grafo = require("grafo");
local grafo = Grafo:new();
grafo:addNo(1, "A");
grafo:addNo(2, "B");
grafo:addNo(3, "C");
grafo:addEdge(1, 2, 1);
grafo:addEdge(2, 3, 2);
grafo:addEdge(1, 3, 4);
local distancia = Dijkstra.dijkstra(grafo, 1, 3);
print(distancia); --> 3Algoritmo de ordenacao por insercao que organiza os elementos no proprio vetor.
- insertionsort(tabela)
- Descricao: Funcao que ordena um vetor em ordem crescente.
- Argumentos: (Table) Vetor desejado para ordenacao.
- Retorno: (Table) Vetor ordenado.
local insertionsort = require("insertionsort");
local resultado = insertionsort({4, 2, 3, 1});
print(resultado[1]); --> 1Algoritmo de ordenacao por intercalação que divide o vetor em partes menores e depois recombina os resultados.
- mergeSort(vetor)
- Descricao: Funcao que ordena um vetor por intercalação.
- Argumentos: (Table) Vetor desejado para ordenacao.
- Retorno: (Table) Vetor ordenado.
local MergeSort = require("mergesort");
local resultado = MergeSort.mergeSort({4, 1, 3, 2});
print(resultado[1]); --> 1Algoritmo de ordenacao que escolhe um pivo e particiona o vetor em elementos menores e maiores.
- quicksort(tabela)
- Descricao: Funcao que ordena um vetor em ordem crescente.
- Argumentos: (Table) Vetor desejado para ordenacao.
- Retorno: (Table) Novo vetor ordenado.
local quicksort = require("quicksort");
local resultado = quicksort({4, 2, 3, 1});
print(resultado[1]); --> 1Algoritmo para identificacao de componentes fortemente conexas em grafos orientados. Aceita a estrutura Grafo do repositorio ou uma lista de adjacencia.
- tarjan(grafo)
- Descricao: Funcao que calcula as componentes fortemente conexas de um grafo.
- Argumentos: (Object) Grafo ou lista de adjacencia do grafo.
- Retorno: (Table) Lista de componentes encontradas.
local Tarjan = require("tarjan");
local Grafo = require("grafo");
local grafo = Grafo:new();
grafo:addNo(1, "A");
grafo:addNo(2, "B");
grafo:addNo(3, "C");
grafo:addEdge(1, 2, 1);
grafo:addEdge(2, 1, 1);
grafo:addEdge(2, 3, 1);
local componentes = Tarjan.tarjan(grafo);
print(#componentes);Este projeto está em desenvolvimento...