Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
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
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
Acesso sequencial
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
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
Listas Encadeadas
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
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
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