Você está na página 1de 21

Estruturas de Dados

Estruturas de Dados Fundamentais

Estruturas de Dados
Fundamentais

Todos os tipos abstratos de dados (pilhas, filas, deques, etc.)


podem ser implementados usando um vetor (array) ou um tipo
de estrutura encadeada (lista encadeada)
Por isso, o vertor e a lista encadeada so chamados de
estruturas de dados fundamentais
Estudaremos as seguintes estruturas fundamentais:

Vetores

Vetores multidimencionais (matrizes)

Listas Encadeadas

Vetores

Provavelmente o vetor a estrutura mais comum (simples)


usada para agregar dados

Em Java, um vetor um objeto que contm uma lista de


objetos (referncias para objetos) ou tipos primitivos, todos
do mesmo tipo

Estrutura homognea: conjunto de dados do mesmo tipo

Cada elemento pode ser acessado pela sua posio (ndice)

Alocao de memria esttica e sequencial

Uma vez alocado, o tamanho de um vetor est fixado

Exemplo: int[] a = new int[5];


0

Vetores

Exemplo: int[] a = new int[5];


a[0] = 1
1
0
0
0

a[1] = 2

a[2] = 3

a[3] = 4

a[4] = 5

Vetores

Em Java (e na maioria das linguagens de programao) cada


vetor tem um campo para indicar seu tamanho (length)

Em nosso exemplo: a.length tem valor 5

O Java testa em tempo de execuo a validade de cada


ndice
ndices vlidos: 0 at length-1
Quando um ndice invlido usado, ocorre a exceo
IndexOutOfBoundsException
Representao na memria

int
5

length

int
0

int
0

int
0

int
0

int
0

Vetores

Vantagens:

Simplicidade

Acesso direto

Desvantagens:

Tamanho fixo

Vetores Multidimencionais

Um vetor multidimencional de dimenso n uma coleo de


tens que so acessados atravs de n expresses de
subscritos

Exemplo: (i,j)-simo elemento de um vetor x bidimencional


acessado pela expresso x[i,j]

Em Java:
int[ ][ ] x = new int[3][5];
x[i] seleciona o i-simo vetor unidimencional
Enquanto, x[i][j] seleciona o j-simo elemento deste vetor
Podemos ter vetores

Bidimencionais: int[ ][ ] x = new int[3][5]


Tridimencionais: int[ ][ ][ ] x = new int[3][5][2]
Etc.

Matrizes

Vetores bidimencionais
Conjunto de dados do mesmo tipo (estrutura homognea)
Cada elemento pode ser acessado pela sua posio (ndices)
Alocao esttica e sequencial

Uma vez alocado, o tamanho de uma matriz est fixado


Representao (simplificada) na memria

Matrizes

Vantagens:

Simplicidade

Acesso direto

Desvantagens:

Tamanho fixo

Listas Encadeadas

possvel criar ''vetores'' de tamanhos variveis usando


alocao dinmica ?

Elementos so criados somente quando necessrio


Esto espaados na memria
Como saber onde est o prximo elemento do vetor ?

Ponteiros: cada elemento guarda a posio do prximo


Alm disso, um ponteiro para o primeiro elemento e um
ponteiro para o ltimo elemento
Cada elemento possui uma ligao com o prximo
elemento
Esta estrutura recebe o nome de lista encadeada ou lista
ligada

Listas Encadeadas

Considere um vetor e uma lista encadeada, qual a


complexidade de insero de um item novo no incio da
estrutura ?
Vetor

Criar um novo vetor de tamanho uma nidade maior

Inserir o novo item na posio inicial

Copiar os items do vetor velho para o novo vetor

Complexidade: O(n)

Lista encadeada

Definir o primeiro item como o prximo do novo item

Definir o primeiro item como o novo item

Complexidade: O(1)

Listas Encadeadas

Uma definio para lista encadeada

Conjunto ordenado de EDs (elementos) com acesso


sequencial onde incluso, excluso e consulta de seus
elementos podem acontecer de forma aleatoria

Aberta: ltimo elemento (n) aponta para nada (null)

Fechada (circular): ltimo n aponta para o primeiro

Simplesmente encadeada: referncia para o prximo n

Duplamente encadeada: referncia para o prximo n e


referncia para o n anterior

Listas Encadeadas

Exemplos de utilizao:

Listas Encadeadas

Vantagem

Tamanho varivel
Desvantagem

Acesso sequencial

Existem algumas variaes de listas encadeadas

Adotaremos a seguinte estrutura:

Cada elemento aponta apenas para o prximo


elemento (ou null para o ltimo elemento)
Uma referncia para o primeiro elemento
Uma referncia para o ltimo elemento

Listas Encadeadas

Operaes sobre as listas

Criar uma lista vazia

Inserir um item novo (em qualquer posio)

Remover um item

Localizar um item

Copiar a lista

Combinar duas ou mais listas

Dividir uma lista em duas ou mais

Etc.

Listas Encadeadas

Representao de uma lista encadeada na memria


ListaLigada
head
tail

Elemento
dado
proximo
Elemento
dado

Integer
3
Integer
1

proximo
Elemento
dado

Integer
20

proximo

Vamos implementar uma lista encadeada!!!

Listas Encadeadas

Aplicao para listas simplesmente encadeada:

Soma de inteiros (super) longos

O hardware da maioria dos computadores s permite


inteiros de um tamanho mximo especfico. Como
representar inteiros positivos de tamanhos arbitrariamente
grandes ?
Usando uma lista para armazenar pedaos do valor: cada
elemento armazena alguns dgitos do nmero.
Por exemplo, o nmero 1234 5678 9012 3456, seria
armazenado como:

Listas Encadeadas

Soma de inteiros (super) longos

Como escrever uma funo que retorne a soma de dois


nmeros inteiros deste tipo ?

Listas Encadeadas

Soma de inteiros (super) longos

Como recuperar o nmero somado para colocar na nova


lista ?
Soma % 10000 (por que 4 zeros ?)
Como recuperar o ''sobe 1'' ?

Soma / 10000

Listas Encadeadas

Algoritmo para soma de inteiros de duas listas l1 e l2

Considerando que cada lista tem uma funo getDado(i) que retorna o
dado da posio i ou 0 (zero) caso o tamanho da lista menor do que i;
e a funo adicionaFim(d) para adicionar um dado d no final da lista

sobe1 = 0
max = tamanho (nmero de dados) da maior lista entre l1 e l2
for(i=1; i <= max, i++){
e1 = l1.getDado(i);
e2 = l2.getDado(i);
soma = e1+e2+sobe1;
resultado = soma % 10000;
sobe1 = soma / 10000;
l.adicionaFim(resultado);
}
if(sobe1 > 0){
l.adicionaFim(sobe1);
}
retorna l;

Matrizes Esparas

Uma matriz dita esparsa quando possui uma grande


quantidade de elementos que valem zero
Matrizes esparsas tm aplicaes em problemas de
engenharia, fsica (por exemplo, o mtodo das malhas para
resoluo de circuitos eltricos ou sistemas de equaes
lineares)
A matriz esparsa implementada atravs de um conjunto de
listas ligadas que apontam para elementos diferentes de zero.
De forma que os elementos que possuem valor zero no so
armazenados

Um espao significativo de memria economizado armazenando


apenas os termos diferentes de zero
As operaes usais sobre essas matrizes (somar, multiplicar, etc)
tambm podem ser feitas em tempo muito menor se no armazenarmos
as posies que contm zeros

Você também pode gostar