ine 5384 estruturas de dados prof a. patrícia vilain 2003.2

35
INE 5384 Estruturas de Dados Prof a . Patrícia Vilain 2003.2

Upload: internet

Post on 17-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2

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

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

Listas Ordenadas

Page 4: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Lista Ordenada Encadeada

Exemplo

45323020

inicio numeroElementos

6

fim

138

Page 28: INE 5384 Estruturas de Dados Prof a. Patrícia Vilain 2003.2

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

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

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

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

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

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

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

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)