Você está na página 1de 96

Tipos de Dado Abstrato:

Listas, Filas e Pilhas


Estruturas de Dados
Prof. Vilson Heck Junior
Introduo
Tradicionalmente conhecidos como Tipos
de Dado Abstrato, so algumas
Estruturas de Dados bsicas e
importantes para a construo de
algoritmos mais bem elaborados;
Nas prximas aulas, aprenderemos o que
so listas, filas e pilhas, bem como
aprenderemos utiliz-las para resolver
alguns problemas computacionais.
LISTAS - INTRODUO
Listas, Filas e Pilhas
Listas
Listas so conjuntos de elementos,
objetos, variveis, tarefas, ou qualquer
coisa que se possa enumerar e formar
um conjunto;
As listas esto presentes em nossa vida,
desde o nosso nascimento, por exemplo,
com a lista de compras que nossos pais
tiveram que fazer para ns.
Listas
Exemplo de Lista de Compras:
5Kg de farinha;
2Kg de aucar;
500g de carne moda;
2Kg de arroz;
4L de leite;
1Kg de feijo;
Etc..
Listas
Exemplo de Lista Telefnica:
Asdf de Zxcv: (44) 4444-4444
Beutrano Cruz: (33) 3333-3333
Ciclano da Silva: (22) 2222-2222
Fulano de Tal: (11) 1111-1111
COMPORTAMENTO DE UMA LISTA
Listas, Filas e Pilhas
Comportamento de uma Lista
Lista: Vazia!
Comportamento de uma Lista
Lista:
Inserir C
C
Comportamento de uma Lista
Lista:
C
Comportamento de uma Lista
Lista:
Inserir D
C
D
Comportamento de uma Lista
Lista:
C
D
Comportamento de uma Lista
Lista:
Inserir B
B
C
D
Comportamento de uma Lista
Lista:
B
C
D
Comportamento de uma Lista
Lista:
Inserir F
B
C
D
F
Comportamento de uma Lista
Lista:
B
C
D
F
Comportamento de uma Lista
Lista:
Inserir E
B
C
D E
F
Comportamento de uma Lista
Lista:
B
C
D
E
F
Comportamento de uma Lista
Lista:
B
C
D
E
F
Comportamento de uma Lista
Lista:
Remover B
B
C
D
E
F
Comportamento de uma Lista
Lista:
Remover B
B
C
D
E
F
Comportamento de uma Lista
Lista:
C
D
E
F
Comportamento de uma Lista
Lista:
Remover F
C
D
E
F
Comportamento de uma Lista
Lista:
Remover F
C
D
E
F
Comportamento de uma Lista
Lista:
C
D
E
Comportamento de uma Lista
Lista:
Remover D
C
D
E
Comportamento de uma Lista
Lista:
Remover D
C
D
E
Comportamento de uma Lista
Lista:
C
E
LISTAS - IMPLEMENTAO
Listas, Filas e Pilhas
Listas
Implementando as listas:
As listas podem ser implementadas de
vrias formas, mas num aspecto mais geral
podemos separar em duas principais:
EmArrays; ou
Encadeadas.
Listas em Arrays
Em Arrays:
Imagine que a lista anterior
tinha posies fixas e pr-
determinadas:
Um array uma estrutura com
posies fixas, cada elemento
da lista deve ser colocado em
uma posio no array;
Ao inserir ou excluir um
elemento, talvez seja necessrio
realocar todos os demais
elementos.
Listas em Arrays
Prs:
Criar um array de qualquer tamanho
muito simples;
No h necessidade de compreender
ponteiros ou referncias;
Contras:
Limitaes quanto ao tamanho de memria;
Custo computacional maior;
Alocao de memria exagerada.
Listas Encadeadas
Encadeado, Dicionrio Houaiss:
adjetivo
1. disposto ou ligado por ou como por
cadeias; ordenado, junto;
2. preso, submetido;
Listas Encadeadas
Prs:
Extremamente eficiente no custo de
memria e de processamento;
Nunca acarreta em movimentar todos os
elementos;
Contras:
Envolve conceitos mais avanados de
programao:
Ponteiros ou Referncias.
Listas Encadeadas
Para criarmos uma lista encadeada,
precisamos primeiro definir o que ser
armazenado nela;
Por exemplo, para criarmos uma lista de
contatos, gostaramos de armazenar os
nomes, telefones e e-mails de diversas
pessoas:
Exemplo de elemento Contato da lista:
Listas Encadeadas
Contato
string Nome;
long Telefone;
string Email;
Listas Encadeadas
Exemplo da Idia de Encadeamento:
Mas como fazer isto?
Contato
string Nome;
long Telefone;
string Email;
Contato
string Nome;
long Telefone;
string Email;
Contato
string Nome;
long Telefone;
string Email;
Listas Encadeadas
Conforme vamos criando elementos na
memria do computador, estes
elementos vo ficando espalhados e
desconexos;
Para criar listas encadeadas precisamos
criar elementos que faam referncia a
outro elemento, ou seja, indiquem onde
podemos encontrar um outro elemento.
Exemplo de elemento encadeado:
Listas Encadeadas
Contato
string Nome;
long Telefone;
string Email;
Contato Proximo;
Listas Encadeadas
Exemplo com Elemento Encadeado:
Contato
string Nome = abc
long Telefone = 123
string Email = a@b
Contato Proximo =
Contato
string Nome = zxy
long Telefone = 987
string Email = c@d
Contato Proximo =
Contato
string Nome = qwe
long Telefone = 546
string Email = r@f
Contato Proximo =
Listas Encadeadas
Exemplo Duplamente Encadeado:
Contato
string Nome = abc
long Telefone = 123
string Email = a@b
Contato Proximo =
Contato Anterior =
Contato
string Nome = zxy
long Telefone = 987
string Email = c@d
Contato Proximo =
Contato Anterior =
Contato
string Nome = qwe
long Telefone = 546
string Email = r@f
Contato Proximo =
Contato Anterior =
Listas Encadeadas
Iniciando uma lista vazia:
Contato Inicio_Lista = null;
Contato Fim_Lista = null;
O valor de referncia null usado para
quando ainda no existe umobjeto na memria
para qual a varivel ir fazer referncia;
O ltimo elemento da lista aponta para null.
Iniciando uma lista com 1 elemento:
Contato Inicio_Lista = new Contato();
Listas Encadeadas
Criando a Lista:
Contato Inicio_Lista = new Contato();
Contato Fim_Lista = Inicio_Lista;
Inicio_Lista.Nome = abc;
Inicio_Lista.Telefone = 123;
Inicio_Lista.Email = a@b;
Inicio_Lista.Proximo = null;
Contato
string Nome = abc
long Telefone = 123
string Email = a@b
Contato Proximo =
Listas Encadeadas
Adicionando um segundo elemento:
Contato novo = new Contato();
novo.Nome = zxy;
novo.Telefone = 987;
novo.Email = c@d;
novo.Proximo = null;
Fim_Lista.Proximo = novo;
Fim_Lista = novo;
Contato
string Nome = abc
long Telefone = 123
string Email = a@b
Contato Proximo =
Contato
string Nome = zxy
long Telefone = 987
string Email = c@d
Contato Proximo =
Listas Encadeadas
Percorrendo a lista:
Contato aux = Inicio_Lista;
while (aux != null) {
//Faz alguma tarefa com o elemento aux
aux = aux.Proximo;
}
Listas Encadeadas
Removendo o elemento zxy:
Inicio_Lista.Proximo = null;
Contato
string Nome = abc
long Telefone = 123
string Email = a@b
Contato Proximo =
Contato
string Nome = zxy
long Telefone = 987
string Email = c@d
Contato Proximo =
LISTAS ENCADEADAS EM JAVA
Listas, Filas e Pilhas
Outras Funes
Listar?
Pesquisar?
Remover?
FILAS
Listas, Filas e Pilhas
Filas
O que uma fila em nosso cotidiano?
As filas so diferentes das listas?
Em quais sentidos?
Onde usamos filas em nosso cotidiano?
Detalhe o funcionamento de uma fila.
Filas
Existem muitos exemplos de fila no
mundo real:
Uma fila de banco;
No ponto de nibus;
Um grupo de carros aguardando sua vez no
pedgio;
Entre outros.
Filas
Uma fila um conjunto de itens a partir do
qual podem-se eliminar itens numa
extremidade (chamada incio da fila) e no
qual podem-se inserir itens na outra
extremidade (chamada final da fila).
Filas
Filas so casos especiais de listas;
Obs: Nas listas, quando precisvamos
criar um novo elemento, poderamos
inseri-lo ou remov-lo de qualquer
posio da lista, exemplos:
Na primeira posio;
Na ltima posio; ou
Em qualquer parte no meio da lista.
Filas
Numa fila existe uma regra bsica a ser
seguida:
Primeiro a Chegar o Primeiro a Sair;
Do ingls: FIFO First In, First Out;
Um novo elemento da fila somente pode
ser inserido na ltima posio(fim da
fila);
Um elemento s pode ser removido da
primeira posio (inicio da fila).
Filas
Tem um sentido de chegada:
Fila vazia.
Inicio da Fila
Fim da Fila
Filas
Inserindo Elementos:
Inserir o elemento G
G
Inicio da Fila
Fim da Fila
Filas
Inserindo Elementos:
O elemento entra na ltima posio.
G
Inicio da Fila
Fim da Fila
Filas
Inserindo Elementos:
E avana at a primeira posio disponvel.
G
Inicio da Fila
Fim da Fila
Filas
Inserindo Elementos:
Inserir o elemento B
G
Inicio da Fila
Fim da Fila
B
Filas
Inserindo Elementos:
O elemento entra na ltima posio
G
Inicio da Fila
Fim da Fila
B
Filas
Inserindo Elementos:
E avana at a primeira posio disponvel.
G
Inicio da Fila
Fim da Fila
B
Filas
Inserindo Elementos:
Inserir o elemento D
G
Inicio da Fila
Fim da Fila
B
D
Filas
Inserindo Elementos:
O elemento entra na ltima posio
G
Inicio da Fila
Fim da Fila
B D
Filas
Inserindo Elementos:
E avana at a primeira posio disponvel.
G
Inicio da Fila
Fim da Fila
B D
Filas
Removendo Elementos:
Remover o elemento B?
No podemos remover elementos que no
estejam no inicio da fila!
Da mesma forma, o elemento D no pode ser
removido!
G
Inicio da Fila
Fim da Fila
B D
Filas
Removendo Elementos:
Remover o elemento da fila:
Retiramos o primeiro elemento da fila;
Neste momento o elemento deve ser utilizado.
G
Inicio da Fila
Fim da Fila
B D
Filas
Removendo Elementos:
Remover o elemento da fila:
E os demais elementos avanam na fila.
G
Inicio da Fila
Fim da Fila
B D
Filas
Exemplos de uso de filas na computao:
Filas de impresso:
Impressoras tem uma fila, caso vrios documentos sejam
impressos, por um ou mais usurios, os primeiros
documentos impressos sero de quem enviar primeiro;
Filas de processos:
Vrios programas podem estar sendo executados pelo
sistema operacional. O mesmo tem uma fila que indica a
ordem de qual ser executado primeiro;
Filas de tarefas:
Um programa pode ter um conjunto de dados para
processar. Estes dados podem estar dispostos em uma
fila, onde o que foi inserido primeiro, ser atendido
primeiro.
Filas
Variaes de Filas:
Fila de Prioridades:
Cada item tem uma prioridade. Elementos mais
prioritrios podem ser atendidos antes, mesmo
no estando no inicio da fila;
Fila Circular:
Neste tipo de fila os elementos nem sempre so
removidos ao serem atendidos, mas voltam ao
fim da fila para serem atendidos novamente
mais tarde.
IMPLEMENTANDO FILAS
Listas, Filas e Pilhas
Filas
As Trs Operaes Bsicas de uma Fila:
Inserir(q, x) insere o item x no final da fila
q; (Ingls - Enqueue)
x = Remover(q) elimina o primeiro
elemento da fila q e define x com seu
contedo; (Ingls Dequeue)
Vazia(q) verifica se a fila esta est vazia,
retornando Verdadeiro caso esteja vazia e
Falso caso hajam elementos na fila. (Ingls
Empty)
Filas
As filas podem ser implementadas em
listas encadeadas ou em vetores;
Vetores:
Devemos ter duas variveis indicando a
posio do inicio e do fim da fila;
Lista Encadeada:
Devemos ter duas referncias, uma ao
elemento de inicio da fila e outra ou
elemento do fim da fila.
Filas
Criar a fila Vazia:
Contato Inicio_Fila = null;
Contato Fim_Fila = null;
Verificar se a fila esta vazia:
public static boolean Vazia(Contato inicio) {
if (inicio == null) {
return true;
} else {
return false;
}
}
Filas
Inserindo Elementos (ao fim):
Contato Novo = new Contato();
//Preenche valores do Novo contato
if (vazia(Inicio_Fila)) {
Inicio_Fila = Novo;
} else {
Fim_Fila.Proximo = Novo;
}
Fim_Fila = Novo;
Filas
Removendo Elemento:
Contato x = Inicio_Fila;
if ( vazia(Inicio_Fila) == false ) {
Inicio_Fila = Inicio_Fila.Proximo;
}
//Utiliza ou retorna o elemento x...
PILHAS
Listas, Filas e Pilhas
Pilhas
Um dos conceitos mais teis na cincia
da computao o de pilha;
Pilhas
Como eram as listas?
Insere, remove ou utiliza qualquer elemento
inserido;
Como eram as filas?
Insere apenas no fim da fila, utiliza e
remove apenas o primeiro elemento
inserido;
Pilhas
Como so as Pilhas?
Insere-se elementos no topo da pilha;
Remove-se ou utiliza-se apenas o elemento
que estiver no topo da pilha!
LIFO (ou FILO):
Last In, First Out;
ltimo a entrar, primeiro a sair;
Pilhas
Operaes em Pilhas:
Empilhar(p, x) insere um novo elemento x
no topo da pilha p; Ingls: Push
x = Desempilhar(p) remove o elemento do
topo da pilha e retorna para x; Ingls: Pop
bool vaz = PilhaVazia(p) verifica se a pilha
p esta vazia; Ingls: Empty
Pilhas
Pilha Vazia: Topo = null;
Pilha p
Pilhas
Pilha Vazia: Topo = null;
Inserindo elemento Z
Z
Pilha p
Pilhas
Pilha Vazia: Topo
Pilha p
Z
Pilhas
Z
Y
Pilha Vazia: Topo
Inserindo elemento Y
Pilha p
Pilhas
Z
Y
Pilha Vazia: Topo
Pilha p
Pilhas
Z
Y
Pilha Vazia: Topo
Inserindo elemento X
X
Pilha p
Pilhas
Z
Y
Pilha Vazia: Topo
X
Pilha p
Pilhas
Z
Y
Pilha Vazia: Topo
Retirar o elemento Y?
No.
X
Pilha p
Pilhas
Z
Y
Pilha Vazia: Topo
Aux = Desempilhar(p);
X
Pilha p
Aux
Pilhas
Z
Y
Pilha Vazia: Topo
Aux2 = Desempilhar(p);
X
Pilha p
Aux
Aux2
Pilhas
As pilhas podem ser implementadas em
listas encadeadas ou em vetores;
Vetores:
Ter uma varivel indicando a posio do
topo da pilha;
Lista Encadeada:
Devemos ter uma referncia ao elemento
do topo da pilha.
Pilhas
Criar a pilha vazia:
Contato Topo_Pilha = null;
Verificar se a pilha esta vazia:
public static boolean Vazia(Contato Topo_Pilha) {
if (Topo_Pilha == null) {
return true;
} else {
return false;
}
}
Pilhas
Inserindo Elementos:
Contato Novo = new Contato();
//Preenche valores do Novo contato
Novo.Proximo = Topo_Pilha;
Topo_Pilha = Novo;
Pilhas
Removendo Elemento:
Contato x = Topo_Pilha;
if (Topo_Pilha != null) {
Topo_Pilha = Topo_Pilha.Proximo;
}
//Utiliza ou retorna o elemento x...

Você também pode gostar