Listas Ligadas
Listas Ligadas
Sejam bem-vindos a mais uma do curso Estruturas de Dados Essenciais. Hoje vamos abordar, mais uma vez, uma estrutura de sequência, só que com uma abordagem diferente.
Hoje falaremos sobre listas ligadas, nossa primeira estrutura de nós.
Alguns dos conceitos que veremos aqui serão importantes para entendermos e construírmos outras estruturas extremamente importantes em toda a ciência da computação, as árvores.
Introdução
Listas ligadas são estruturas de dados que representam uma sequência de elementos. Cada elemento é um nó que contém um valor e uma referência para o próximo nó.
Aqui está um exemplo de uma lista ligada com três elementos:
1 -> 2 -> 3
Cada nó contém um valor e uma referência para o próximo nó. O último nó da lista tem uma referência nula.
Tipos de Listas Ligadas
Existem vários tipos de listas ligadas. As mais comuns são:
- Simplesmente ligada: Cada nó contém uma referência para o próximo nó.
- Duplamente ligada: Cada nó contém uma referência para o próximo nó e para o nó anterior.
- Circular: A referência do último nó aponta para o primeiro nó.
- Circular duplamente ligada: A referência do último nó aponta para o primeiro nó e a referência do primeiro nó aponta para o último nó.
ADT Lista Ligada
build(X): Cria uma nova lista ligada.insert(value): Insere um novo valor na lista ligada.delete(value): Remove um valor da lista ligada.search(value): Busca um valor na lista ligada.size(): Retorna o tamanho da lista ligada.isEmpty(): Retorna se a lista ligada está vazia.
Implementação
Vamos implementar uma lista ligada simples em Ruby.
class Node
attr_accessor :value, :next
def initialize(value)
@value = value
@next = nil
end
end
class LinkedList
def initialize
@head = nil
end
def insert(value)
node = Node.new(value)
if @head.nil?
@head = node
else
current = @head
while current.next
current = current.next
end
current.next = node
end
end
def delete(value)
current = @head
if current.value == value
@head = current.next
else
while current.next
if current.next.value == value
current.next = current.next.next
break
end
current = current.next
end
end
end
def search(value)
current = @head
while current
return true if current.value == value
current = current.next
end
false
end
def size
count = 0
current = @head
while current
count += 1
current = current.next
end
count
end
def isEmpty
@head.nil?
end
end
Casos de Uso
- Fila: Listas ligadas são muito utilizadas para implementar filas.
- Pilha: Listas ligadas são muito utilizadas para implementar pilhas.
- …