Estrutura de Dados em Java - Do Básico ao Avançado
1. Introdução às Estruturas de Dados
Estruturas de dados são formas organizadas de armazenar e gerenciar dados de forma eficiente. Em Java,
podemos implementar estruturas como listas, pilhas, filas, árvores e grafos.
Essas estruturas são fundamentais para o desenvolvimento de algoritmos eficientes e para a resolução de
problemas complexos.
Vamos explorar cada estrutura em detalhes, com exemplos em Java e atividades para prática.
2. Listas (Simples, Duplamente Encadeadas)
As listas são estruturas de dados lineares que armazenam elementos em sequência. Existem diversos tipos
de listas:
- Lista Simplesmente Encadeada: Cada elemento aponta para o próximo.
- Lista Duplamente Encadeada: Cada elemento possui um ponteiro para o próximo e para o anterior.
Exemplo de Lista Simples em Java:
class Node {
int data;
Node next;
Estrutura de Dados em Java - Do Básico ao Avançado
Node(int data) {
this.data = data;
this.next = null;
class LinkedList {
Node head;
void add(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
} else {
Node current = head;
while (current.next != null) {
current = current.next;
current.next = newNode;
3. Pilhas (Stacks)
Estrutura de Dados em Java - Do Básico ao Avançado
A pilha é uma estrutura de dados linear que segue o princípio LIFO (Last In, First Out). Os elementos são
adicionados e removidos do topo da pilha.
Exemplo de implementação em Java:
class Stack {
int top = -1;
int[] stack = new int[100];
void push(int value) {
if (top < stack.length - 1) {
stack[++top] = value;
int pop() {
if (top >= 0) {
return stack[top--];
return -1;
}
Estrutura de Dados em Java - Do Básico ao Avançado
4. Filas (Queues)
A fila é uma estrutura de dados linear que segue o princípio FIFO (First In, First Out). Os elementos são
inseridos no final e removidos do início.
Exemplo de implementação em Java:
class Queue {
int front = 0, rear = 0;
int[] queue = new int[100];
void enqueue(int value) {
queue[rear++] = value;
int dequeue() {
return queue[front++];
5. Árvores Binárias
Estrutura de Dados em Java - Do Básico ao Avançado
Árvores são estruturas hierárquicas compostas por nós. Cada nó pode ter filhos e um pai.
- Árvore Binária: Cada nó possui no máximo dois filhos.
- Árvore Binária de Busca (BST): Os nós à esquerda são menores e à direita são maiores que o nó pai.
Exemplo de implementação em Java:
class TreeNode {
int data;
TreeNode left, right;
TreeNode(int data) {
this.data = data;
this.left = null;
this.right = null;
class BinaryTree {
TreeNode root;
void insert(int value) {
root = insertRecursive(root, value);
Estrutura de Dados em Java - Do Básico ao Avançado
TreeNode insertRecursive(TreeNode node, int value) {
if (node == null) {
return new TreeNode(value);
if (value < node.data) {
node.left = insertRecursive(node.left, value);
} else {
node.right = insertRecursive(node.right, value);
return node;
6. Grafos
Grafos são estruturas compostas por vértices e arestas. Eles podem ser representados de várias formas:
- Lista de Adjacência: Cada vértice possui uma lista de nós conectados.
- Matriz de Adjacência: Uma matriz NxN onde cada posição indica a existência de uma aresta.
Exemplo de implementação em Java:
Estrutura de Dados em Java - Do Básico ao Avançado
import java.util.*;
class Graph {
private int V;
private LinkedList<Integer>[] adj;
Graph(int V) {
this.V = V;
adj = new LinkedList[V];
for (int i = 0; i < V; i++) {
adj[i] = new LinkedList<>();
void addEdge(int v, int w) {
adj[v].add(w);
7. Atividades
1. Implemente uma lista duplamente encadeada em Java.
2. Crie uma pilha que armazene caracteres e permita visualizar o topo.
Estrutura de Dados em Java - Do Básico ao Avançado
3. Desenvolva uma fila circular com capacidade fixa de 10 elementos.
4. Crie um método que insira elementos em uma árvore BST e outro que realize a travessia em ordem.
5. Implemente um grafo com 5 vértices e realize a busca em profundidade (DFS).
8. Gabarito das Atividades
1. A lista duplamente encadeada terá um ponteiro prev e next em cada nó.
2. A pilha de caracteres pode utilizar um array de chars e métodos push, pop e peek.
3. A fila circular deve ajustar os ponteiros front e rear de forma circular.
4. A inserção em uma BST segue a lógica de comparação; a travessia in-order segue a ordem esquerda,
raiz, direita.
5. A DFS pode ser implementada utilizando pilhas ou recursão.