Pilhas Filas e Listas Pilha

Propaganda
LEIC-FEUP 2001/2002
Algoritmos e Estruturas de Dados 1
Pilhas Filas e Listas
Sumário
z Pilha: interface, aplicações e implementação
z Fila: interface, aplicações e implementação
z Lista Ligada: interface, aplicações e implementação
PFL
Pilha
‰
Estrutura LIFO (last in, first out)
z Acesso restrito ao último elemento inserido
‰
Operações
z Inserir:
push
z Remover: pop
z Pesquisar: top
push
pop
top
PFL
Cristina Ribeiro
Estruturas Lineares 1
LEIC-FEUP 2001/2002
Algoritmos e Estruturas de Dados 1
Interface
//
//
//
//
//
//
//
//
//
//
//
Stack interface
******************PUBLIC OPERATIONS*********************
void push( x )
--> Insert x
void pop( )
--> Remove most recently inserted item
Object top( )
--> Return most recently inserted item
Object topAndPop( )
--> Return and remove most recent item
boolean isEmpty( )
--> Return true if empty; else false
void makeEmpty( )
--> Remove all items
******************ERRORS********************************
top, pop, or topAndPop on empty stack
public interface Stack
{
boolean isEmpty( );
Object top( )
throws Underflow;
void
pop( )
throws Underflow;
Object topAndPop( ) throws Underflow;
void
push( Object x );
void
makeEmpty( );
}
PFL
Class Stack em java.util
§3.8 Class Stack
public class java.util.Stack
extends java.util.Vector (I-§3.10)
{
// Constructors
public Stack();
§3.8.1
//
public
public
public
public
public
Methods
boolean empty();
Object peek();
Object pop();
Object push(Object
int search(Object
§3.8.2
§3.8.3
§3.8.4
item); §3.8.5
o);
§3.8.6
}
Não usa interface: define operações da pilha como extensão de vector
- permite outras operações (de vector)
PFL
Cristina Ribeiro
Estruturas Lineares 2
LEIC-FEUP 2001/2002
Algoritmos e Estruturas de Dados 1
Aplicações
‰
Compilação de linguagens de programação
z verificação sintáctica (gramáticas)
• Pilha é adequada para guardar contextos, mantendo disponível o corrente
z chamada de procedimentos
• Chamada: empilha registo de activação
• Saída: desempilha registo correspondente
• visibilidade das variáveis decorre da sua posição na pilha
z avaliação de expressões
• Pilha mantém operandos, operadores e resultados intermédios
z expressões: conversão para notação posfixa
• Pilha mantém operadores até operandos respectivos estarem disponíveis
• Precedência e associatividade de operadores determina a ordem de saída
PFL
Stack - análise
‰
Operações sobre a pilha devem ser em tempo constante
z inserção e remoção na pilha só envolvem o topo
‰
Implementação em array
z em geral: tempo constante
z duplicação do array: gasta tempo da ordem da dimensão do array (para a cópia)
z amortização: duplicação é O(N) mas o custo é distribuído pelos acessos aos N
elementos adicionais obtidos; resultado é acréscimo constante em cada
operação
PFL
Cristina Ribeiro
Estruturas Lineares 3
LEIC-FEUP 2001/2002
Algoritmos e Estruturas de Dados 1
Fila
‰
Estrutura FIFO (first in, first out)
z Inserção na cauda e remoção da cabeça
‰
Operações
z Inserir:
enqueue
z Remover: dequeue
z Pesquisar: getFront
enqueue
dequeue
getFront
PFL
Interface
//
//
//
//
//
//
//
//
******************PUBLIC OPERATIONS*********************
void enqueue( x )
--> Insert x
Object getFront( )
--> Return least recently inserted item
Object dequeue( )
--> Return and remove least recent item
boolean isEmpty( )
--> Return true if empty; else false
void makeEmpty( )
--> Remove all items
******************ERRORS********************************
getFront or dequeue on empty queue
public interface Queue
{
boolean isEmpty( );
Object getFront( ) throws Underflow;
Object dequeue( ) throws Underflow;
void enqueue( Object X );
void makeEmpty( );
}
PFL
Cristina Ribeiro
Estruturas Lineares 4
LEIC-FEUP 2001/2002
Algoritmos e Estruturas de Dados 1
Lista Ligada
‰
Estrutura com nós que armazenam elementos
z manter referências para elementos do início e fim da lista
‰
Operações
z Inserir:
a seguir à posição corrente
z Remover: na posição corrente
z Pesquisar: por conteúdo ou por posição
first
last
PFL
Nós: inserção e remoção
Nó da lista
Class ListNode
{
Object element;
ListNode next;
}
Inserir a seguir ao
nó corrente
tmp = newListNode();
tmp.element = x;
tmp.next = current.next;
current.next = tmp;
ou
current.next = newListNode(x, current.next);
Apagar a seguir ao
nó corrente
current.next = current.next.next;
PFL
Cristina Ribeiro
Estruturas Lineares 5
LEIC-FEUP 2001/2002
Algoritmos e Estruturas de Dados 1
Operações na Lista
‰
Operações de acesso a elementos da lista
z requerem referência a nós da lista
z Necessário garantir que acesso aos nós da lista é seguro
‰
Acesso directo aos nós da lista
z não garante encapsulamento de informação
z utilizador da estrutura pode passar referência para objecto que não é da lista
‰
Lista definida em 2 partes: a lista e o iterador
z classe da lista: operações são só as permitidas sobre a lista como um todo
z classe do iterador: suporta operações de acesso a elementos
• mantém referência para uma lista e posição corrente
• possível mais do que um iterador sobre a mesma lista
PFL
Cristina Ribeiro
Estruturas Lineares 6
Download