Você está na página 1de 21

Estruturas de Dados

Estruturas de Dados Fundamentais


Prof. Eduardo Alchieri

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 0 0 0 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


1 1 2 2 0 3 0 0

0 0

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 int 0

length 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) Definir o primeiro item como o prximo do novo item Definir o primeiro item como o novo item Complexidade: O(1)

Lista encadeada

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 proximo Elemento dado proximo Integer 20 Integer 3 Integer 1

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