INE 5384
Estruturas de Dados
Profa. 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
Listas Ordenadas
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.
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)
Características de uma Lista Ordenada
seqüência finita de elementos
Seqüência Finita de Elementos
8 13 20 45. . .21
Características de uma Lista Ordenada
Seqüência Finita de Elementos
8 13 20 45. . .21
posição = 1 posição = 3
Características de uma Lista Ordenada
Seqüência: próximo e anterior
sucessor(próximo)
predecessor(anterior)
8 13 20 45. . .21
Características de uma Lista Ordenada
Seqüência: início e fim
início final
8 13 20 45. . .21
Características de uma Lista Ordenada
Comprimento
Lista Vazia
Comprimento = 5
Comprimento = 0
8 13 20 4521
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
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
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
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.
Alternativas de Implementação
• Lista Ordenada como Array
• Lista Ordenada como Lista Encadeada
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...
Lista Ordenada como Array
Exemplo:
410 32 65 87
30138 2120 4532
9 N...
Lista Ordenada como Array
Classe ListaOrdenadaArray implementa ListaOrdenada
Atributos
• elementos (array com objetos Comparable)
• numeroElementos
Métodos
• construtor ()
+
• métodos especificados na interface ListaOrdenada
Operações sobre a Lista Ordenada
Exemplo: inserção do elemento 15
30138 2120 4532
21138 2015 3230 45
Operações sobre a Lista Ordenada
Exemplo: exclusão do elemento 30
21138 2015 3230 45
21138 2015 4532
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; }
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)
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)
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)
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)
Lista Ordenada Encadeada
Os elementos, ordenados, estão associados entre si através de elos.
ene2e1 ...
Lista Ordenada Encadeada
Exemplo
45323020
inicio numeroElementos
6
fim
138
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
Lista Ordenada Encadeada
Classe NodoComparable
Atributos:
• elemento (Comparable)
• proximo (referência a um outro objeto da classe
NodoComparable)
en
elemento próximo
Lista Ordenada Encadeada
Exemplo: inserção do elemento 15
45323020
inicio numeroElementos
6
fim
138
15
Lista Ordenada Encadeada
Exemplo: exclusão do elemento 30
4532302015
inicio numeroElementos
7
fim
138
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;
}
…
}
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)
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++;
}
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)
Top Related