390 likes | 500 Vues
INE 5384 Estruturas de Dados Prof a . Patrícia Vilain 2003.2. Conteúdo. 1. 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.
E N D
INE 5384 Estruturas de Dados Profa. Patrícia Vilain 2003.2
Conteúdo 1. 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
Pilha PILHA:lista linear cujas inserções e exclusões se realizam em uma única extremidade (topo da lista). O último elemento colocado na pilha fica no topo. O elemento retirado da pilha é sempre o elemento do topo da pilha. Uma pilha contém: • um método para inserir elementos na pilha (empilha) • um método para retirar elementos da pilha (desempilha) • um método para acessar o topo da pilha (retornaTopo) As filas são conhecidas como listas LIFO (Last In First Out) - último que entra, primeiro que sai.
Exemplos de Pilhas • Pilha de livros • Pilha de caixas • Pilha de “objetos” quaisquer, …
Exemplo de Pilha topo 3 . . . 25 12
Operações sobre uma Pilha desempilha empilha 3 3 3 . . . 25 retornaTopo 12 LIFO: “last-in; first-out”
Interface da Pilha public interface Pilha{ ??? }
Interface da Pilha public interface Pilha{ void empilha(Objectelemento); Objectdesempilha(); Objecttopo(); boolean estaVazia (); int numeroElementos (); Iterator iterator (); ListIterator listIterator (); }
Alternativas de Implementação • Pilha como Array • Pilha como Lista Encadeada
Pilha como Array Seja pilha uma estrutura linear representada através de um array P com N posições. Uma pilha tem um atributo topo que indica a posição do topo da pilha no array. . . . 3 0 1 2 5 4 N-1 Pilha: 7 25 32 . . . 14 1 Onde deve ficar o topo da pilha?
Pilha como Array Seja pilha uma estrutura linear representada através de um array P com N posições. Uma pilha tem um atributo topo que indica a posição do topo da pilha no array. . . . 3 0 1 2 5 4 N-1 Pilha: 7 25 32 . . . 14 1 topo
Pilha como Array - Construtor public class PilhaArray implements Pilha { private Object[] elementos; private int numElementos; private int aumento; ??? } a partir do numElementos sabemos qual é o topo Complexidade: O(?)
Pilha como Array - Construtor public class PilhaArray implements Pilha { private Object[] elementos; private int numElementos; private int aumento; public PilhaArray (int tamanho) { this.elementos = new Object[tamanho]; this.numElementos = 0; this.aumento = tamanho / 10; } … } Complexidade: O(1)
Pilha como Array - Construtor public class PilhaArray implements Pilha { private Object[] elementos; private int numElementos; private int aumento; public PilhaArray (int tamanho, int aumento) { this.elementos = new Object[tamanho]; this.numElementos = 0; this.aumento = aumento; } … } Complexidade: O(1)
Pilha como Array - Empilha . . . 3 0 1 2 5 4 N-1 Pilha: 25 1 7 . . . 32 topo = numElementos-1 . . . 3 0 1 2 5 4 N-1 Pilha: 25 1 7 . . . 32 8 topo = numElementos-1
Pilha como Array - Empilha public void empilha (Object elemento) { ??? } Complexidade: O(?)
Pilha como Array - Empilha - continuar public void empilha (Object elemento) { if (this.numElementos == this.elementos.length) { Object[] novoArray = new Object[this.elementos.length + aumento]; System.arraycopy(elementos,0,novoArray,0,this.elementos.length); this.elementos = novoArray; } this.elementos[this.numElementos] = elemento; this.numElementos++; } Complexidade: O(N) ???
Pilha como Array - Desempilha . . . 3 0 1 2 5 4 N-1 Pilha: 7 25 32 . . . 14 1 topo 3 0 1 2 4 N-1 Pilha: 7 25 32 . . . 14 topo
Pilha como Array - Desempilha public Object desempilha() { ??? } Complexidade: O(?)
Pilha como Array - Desempilha public Object desempilha() { if (this.numElementos > 0 { Object elemento = this.elementos[this.numElementos-1]; this.elementos[this.numElementos-1] = null; this.numElementos--; return elemento; } else throw new ExcecaoPilha ("piha vazia!"); } Complexidade: O(1)
Pilha como Array - Topo . . . 3 0 1 2 5 4 N-1 Pilha: 25 1 7 . . . 32 topo Topo = 3
Pilha como Array - Topo public Object topo() { ??? } Complexidade: O(?)
Pilha como Array - Topo public Object topo() { if (this.numElementos > 0) return this.elementos[this.numElementos-1]; else throw new ExcecaoPilha ("piha vazia!"); } Complexidade: O(1)
Pilha como Array • estaVazia public boolean estaVazia (){ return this.numElementos == 0; } • numeroElementos public int numeroElementos (){ return this.numElementos; } Complexidade: O(1) Complexidade: O(1)
Pilha Encadeada inicio numeroElementos fim 5 14 32 7 25 1 Onde deve ficar o topo da pilha?
Pilha Encadeada inicio numeroElementos fim 5 14 32 7 25 1 topo Onde deve ficar o topo da pilha?
Pilha Encadeada - Construtor public class PilhaEncadeada implements Pilha { private Nodo inicio; private int numElementos; public PilhaEncadeada() { ??? } … } Complexidade: O(?)
Pilha Encadeada - Construtor public class PilhaEncadeada implements Pilha { private Nodo inicio; private int numElementos; public PilhaEncadeada() { this.inicio = null; this.numElementos = 0; } … } Complexidade: O(1)
Pilha Encadeada - Empilha inicio numeroElementos 5 14 32 7 25 1 topo inicio numeroElementos 6 20 14 32 7 25 1 topo
Pilha Encadeada - Empilha public void empilha (Object elemento) { ??? } Complexidade: O(?)
Pilha Encadeada - Empilha public void empilha (Object elemento) { Nodo nodo = new Nodo(elemento); nodo.atribuiProximo(this.inicio); this.inicio = nodo; this.numElementos++; } Complexidade: O(1)
Pilha Encadeada - Desempilha inicio numeroElementos 6 20 14 32 7 25 1 topo inicio numeroElementos 5 14 32 7 25 1 topo
Pilha Encadeada - Desempilha public Object desempilha() { ??? } Complexidade: O(?)
Pilha Encadeada - Desempilha public Object desempilha() { if (this.numElementos > 0){ Object elemento = inicio.retornaElemento(); this.inicio = this.inicio.retornaProximo(); this.numElementos--; return elemento; } else throw new ExcecaoPilha ("pilha vazia"); } Complexidade: O(1)
Pilha Encadeada - Topo inicio numeroElementos 5 14 32 7 25 1 topo Topo = 14
Pilha Encadeada - Topo public Object topo() { ??? } Complexidade: O(?)
Pilha Encadeada - Topo public Object topo() { if (this.numElementos > 0) return this.inicio.retornaElemento(); else throw new ExcecaoPilha ("pilha vazia"); } Complexidade: O(1)
Pilha Encadeada • estaVazia public boolean estaVazia() { return this.numElementos == 0; } • numeroElementos public int numeroElementos() { return this.numElementos; } Complexidade: O(1) Complexidade: O(1)