INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.
Transcript of INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.
![Page 1: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/1.jpg)
INE 5384
Estruturas de Dados
Profa. Patrícia Vilain
2003.2
![Page 2: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/2.jpg)
Conteúdo1. Introdução
2. Listas
3. Listas Ordenadas
4. Filas
5. Pilhas
6. Árvores
• Árvore Binária e Árvore AVL
• Árvore N-ária e Árvore B
7. Tabelas de Dispersão (Hashing)
8. Métodos de Ordenação de Dados
![Page 3: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/3.jpg)
Listas Ordenadas
![Page 4: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/4.jpg)
Lista Ordenada
LISTA ORDENADA: lista linear na qual os elementos aparecem em ordem, ou seja, do menor para o maior.
Inserção de um elemento em uma lista ordenada:
• pré-condição: lista já está ordenada.
• pós-condição: lista continua ordenada.
![Page 5: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/5.jpg)
Exemplos de Listas Ordenadas
• Itens de um índice remissivo (ordenados pelo nome do item)
• Nomes dos alunos em uma lista de chamada (ordenados pelo nome do aluno)
• Nomes dos aprovados em um concurso público (ordenados pelo resultado da prova)
![Page 6: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/6.jpg)
Características de uma Lista Ordenada
seqüência finita de elementos
Seqüência Finita de Elementos
8 13 20 45. . .21
![Page 7: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/7.jpg)
Características de uma Lista Ordenada
Seqüência Finita de Elementos
8 13 20 45. . .21
posição = 1 posição = 3
![Page 8: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/8.jpg)
Características de uma Lista Ordenada
Seqüência: próximo e anterior
sucessor(próximo)
predecessor(anterior)
8 13 20 45. . .21
![Page 9: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/9.jpg)
Características de uma Lista Ordenada
Seqüência: início e fim
início final
8 13 20 45. . .21
![Page 10: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/10.jpg)
Características de uma Lista Ordenada
Comprimento
Lista Vazia
Comprimento = 5
Comprimento = 0
8 13 20 4521
![Page 11: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/11.jpg)
Operações sobre uma Lista Ordenada
Inserção de elemento
não é possível especificar a posição de inserção
8 13 20 45. . .2115
8 13 20 45. . .21155
![Page 12: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/12.jpg)
Operações sobre uma Lista Ordenada
Remoção de elemento
8 13 20 45. . .21155
posição = 1
posição = 3
8 13 20 45. . .21155
elemento = 20
8 13 20 45. . .21155
![Page 13: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/13.jpg)
Operações sobre uma Lista Ordenada
Consulta
• Elemento da posição 2 8
• Verificar se o elemento 20 está na lista true
8 13 20 45. . .21155
![Page 14: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/14.jpg)
Lista Ordenada
Uma lista ordenada deve armazenar somente objetos que possam ser comparáveis.
É necessário que o objeto tenha algum método para comparar se ele é menor, igual ou maior que outro objeto.
![Page 15: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/15.jpg)
Alternativas de Implementação
• Lista Ordenada como Array
• Lista Ordenada como Lista Encadeada
![Page 16: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/16.jpg)
Lista Ordenada como Array
Os elementos, ordenados, ficam justapostos na memória através da utilização de um vetor unidimensional.
410 32 65 87
e5e2e1 e4e3 e7e6 em...
9 N...
![Page 17: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/17.jpg)
Lista Ordenada como Array
Exemplo:
410 32 65 87
30138 2120 4532
9 N...
![Page 18: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/18.jpg)
Lista Ordenada como Array
Classe ListaOrdenadaArray implementa ListaOrdenada
Atributos
• elementos (array com objetos Comparable)
• numeroElementos
Métodos
• construtor ()
+
• métodos especificados na interface ListaOrdenada
![Page 19: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/19.jpg)
Operações sobre a Lista Ordenada
Exemplo: inserção do elemento 15
30138 2120 4532
21138 2015 3230 45
![Page 20: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/20.jpg)
Operações sobre a Lista Ordenada
Exemplo: exclusão do elemento 30
21138 2015 3230 45
21138 2015 4532
![Page 21: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/21.jpg)
Lista Ordenada como Array public class ListaOrdenadaArray implements ListaOrdenada {
private Comparable[] elementos;
private int numElementos;
private int aumento;
public ListaOrdenadaArray (int tamanho) {
this.elementos = new Comparable[tamanho];
this.numElementos = 0;
this.aumento = tamanho / 10; }
public ListaOrdenadaArray (int tamanho, int aumento) {
this.elementos = new Comparable[tamanho];
this.numElementos = 0;
this.aumento = aumento; }
![Page 22: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/22.jpg)
PROFESSORA
public void insere (Comparable elemento){
/**
* Insere o objeto na lista ordenada.
* A lista continua ordenada após a inserção do elemento
*/
if (this.numElementos == this.elementos.length){
Comparable[] novoArray = new Comparable[this.elementos.length + aumento];
System.arraycopy(elementos,0,novoArray,0,this.elementos.length);
this.elementos = novoArray;
}
int cont = this.numElementos-1;
while (cont >= 0 && elemento.compareTo(this.elementos[cont]) < 0){
this.elementos[cont+1] = this.elementos[cont];
cont--;
}
this.elementos[cont+1] = elemento;
this.numElementos++;
}
Complexidade: O(N)
![Page 23: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/23.jpg)
PROFESSORA
public int retornaPosicao (Comparable elemento){
// SEM PESQUISA BINÁRIA
/**
* Retorna a primeira posicao do elemento, considerando
* que a lista comeca na posicao 0.
* Caso o elemento nao exista na lista, retorna -1.
*/
int cont = 0;
while (cont<this.numElementos && this.elementos[cont].compareTo(elemento)<0)
cont++;
if (cont<this.numElementos && this.elementos[cont].compareTo(elemento)==0)
return cont;
else
return -1;
}
Complexidade: O(N)
![Page 24: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/24.jpg)
PROFESSORA
public int retornaPosicao(Comparable elemento) {
// COM PESQUISA BINÁRIA COM RECURSÃO
return posicao (elemento, 0, this.numElementos-1);
}
private int posicao (Comparable elemento, int inicio, int fim){
if (fim < inicio)
return -1;
else {
int meio = (inicio+fim) /2;
if (this.elementos[meio].compareTo(elemento) == 0) //encontrou
return meio;
else
if (this.elementos[meio].compareTo(elemento) > 0) //esta' na primeira parte
return posicao (elemento,inicio,meio-1);
else//esta' na segunda parte
return posicao (elemento,meio+1,fim);
}
}
Complexidade: O(logN)
![Page 25: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/25.jpg)
PROFESSORA
public int retornaPosicao(Comparable elemento) {
// COM PESQUISA BINÁRIA SEM RECURSÃO
int fim = this.numElementos-1;
int inicio = 0;
while (inicio <= fim) {
int meio = (inicio+fim) /2;
if (this.elementos[meio].compareTo(elemento) == 0) //encontrou
return meio;
else
if (this.elementos[meio].compareTo(elemento) > 0) //esta' na primeira parte
fim = meio - 1;
else//esta' na segunda parte
inicio = meio + 1;
}
return -1;
}
Complexidade: O(logN)
![Page 26: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/26.jpg)
Lista Ordenada Encadeada
Os elementos, ordenados, estão associados entre si através de elos.
ene2e1 ...
![Page 27: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/27.jpg)
Lista Ordenada Encadeada
Exemplo
45323020
inicio numeroElementos
6
fim
138
![Page 28: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/28.jpg)
Lista Ordenada Encadeada
Classe ListaOrdenadaEncadeada implementa ListaOrdenada
Atributos
• inicio (referência a objeto da classe NodoComparable)
• fim (referência a objeto da classe NodoComparable)
• numeroElementos
Métodos
• construtor ()
+
• métodos especificados na interface ListaOrdenada
![Page 29: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/29.jpg)
Lista Ordenada Encadeada
Classe NodoComparable
Atributos:
• elemento (Comparable)
• proximo (referência a um outro objeto da classe
NodoComparable)
en
elemento próximo
![Page 30: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/30.jpg)
Lista Ordenada Encadeada
Exemplo: inserção do elemento 15
45323020
inicio numeroElementos
6
fim
138
15
![Page 31: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/31.jpg)
Lista Ordenada Encadeada
Exemplo: exclusão do elemento 30
4532302015
inicio numeroElementos
7
fim
138
![Page 32: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/32.jpg)
Lista Ordenada Encadeada
public class ListaOrdenadaEncadeada implements ListaOrdenada {
private NodoComparable inicio;
private NodoComparable fim;
private int numElementos;
public ListaOrdenadaEncadeada() {
this.inicio = null;
this.fim = null;
this.numElementos = 0;
}
…
}
![Page 33: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/33.jpg)
PROFESSORA
public void insere (Comparable elemento){
/**
* Insere o objeto na lista ordenada.
* A lista continua ordenada após a inserção do elemento
*/
NodoComparable nodo = new NodoComparable (elemento);
NodoComparable aponta = this.inicio;
NodoComparable anterior = null;
while (aponta != null && aponta.retornaElemento().compareTo(elemento)<0){
anterior = aponta;
aponta = apon ta.retornaProximo();
}
...
Complexidade: O(N)
![Page 34: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/34.jpg)
PROFESSORA...
if (aponta == this.inicio){
nodo.atribuiProximo(this.inicio);
this.inicio = nodo;
if (this.fim == null)
this.fim = nodo;
}
else
if (aponta == null){ //inserir no final da lista
this.fim.atribuiProximo(nodo);
this.fim = nodo;
}
else{ //inserir no meio da lista
anterior.atribuiProximo(nodo);
nodo.atribuiProximo(aponta);
}
this.numElementos++;
}
![Page 35: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2.](https://reader035.fdocumentos.com/reader035/viewer/2022062623/552fc10a497959413d8c093e/html5/thumbnails/35.jpg)
PROFESSORA
public int retornaPosicao (Comparable elemento){
/**
* Retorna a primeira posicao do elemento, considerando
* que a lista comeca na posicao 0.
* Caso o elemento nao exista na lista, retorna -1.
*/
NodoComparable aponta = this.inicio;
int cont = 0;
while (aponta!=null && aponta.retornaElemento().compareTo(elemento)<0){
aponta = aponta.retornaProximo();
cont++;
}
if (aponta!=null && aponta.retornaElemento().compareTo(elemento)==0)
return cont;
else
return -1;
}
Complexidade: O(N)