Você está na página 1de 98

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, Filas e Pilhas

LISTAS - INTRODUO

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

Listas, Filas e Pilhas

COMPORTAMENTO DE UMA LISTA

Comportamento de uma Lista


Lista: Vazia!

Comportamento de uma Lista


Lista:
Inserir C

Comportamento de uma Lista


Lista:

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 E D 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, Filas e Pilhas

LISTAS - IMPLEMENTAO

Listas
Implementando as listas:
As listas podem ser implementadas de vrias formas, mas num aspecto mais geral podemos separar em duas principais:
Em Arrays; ou Encadeadas.

Listas em Arrays
Em Arrays:
Imagine que a lista anterior tinha posies fixas e prdeterminadas:
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:

Listas Encadeadas
Exemplo de elemento Contato da lista:

Contato
string Nome; long Telefone; string Email;

Listas Encadeadas
Exemplo da Idia de Encadeamento:
Contato string Nome; long Telefone; string Email; Contato string Nome; long Telefone; string Email; Contato string Nome; long Telefone; string Email;

Mas como fazer isto?

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.

Listas Encadeadas
Exemplo de elemento encadeado:

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 um objeto 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, Filas e Pilhas

LISTAS ENCADEADAS EM JAVA

Listas Encadeadas
Exerccio para entregar:
Implemente as funes apresentadas no Menu proposto anteriormente para a classe Contato proposta; Os Contatos devero ser armazenados numa Lista Encadeada (Simples, ou Duplamente); Voc dever ter no total 6 mtodos criados, com seus respectivos parmetros ou retornos (quando necessrio):
Menu() Main() Cadastrar() ListarTodos() Pesquisar() Remover()

Listas, Filas e Pilhas

FILAS

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.

Fim da Fila

Inicio da Fila

Filas
Inserindo Elementos:
Inserir o elemento G
G

Fim da Fila

Inicio da Fila

Filas
Inserindo Elementos:
O elemento entra na ltima posio.

Fim da Fila

Inicio da Fila

Filas
Inserindo Elementos:
E avana at a primeira posio disponvel.

Fim da Fila

Inicio da Fila

Filas
Inserindo Elementos:
Inserir o elemento B
B

Fim da Fila

Inicio da Fila

Filas
Inserindo Elementos:
O elemento entra na ltima posio

Fim da Fila

Inicio da Fila

Filas
Inserindo Elementos:
E avana at a primeira posio disponvel.

Fim da Fila

Inicio da Fila

Filas
Inserindo Elementos:
Inserir o elemento D
D

Fim da Fila

Inicio da Fila

Filas
Inserindo Elementos:
O elemento entra na ltima posio

Fim da Fila

Inicio da Fila

Filas
Inserindo Elementos:
E avana at a primeira posio disponvel.

Fim da Fila

Inicio da Fila

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!
D B G

Fim da Fila

Inicio da Fila

Filas
Removendo Elementos:
Remover o elemento da fila:
G

Retiramos o primeiro elemento da fila; Neste momento o elemento deve ser utilizado.

Fim da Fila

Inicio da Fila

Filas
Removendo Elementos:
Remover o elemento da fila:
G

E os demais elementos avanam na fila.

Fim da Fila

Inicio da Fila

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.

Listas, Filas e Pilhas

IMPLEMENTANDO FILAS

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_Fila) { if (Inicio_Fila == null)
return true;

else
return false;

Filas
Inserindo Elementos:
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; Inicio_Fila = Inicio_Fila.Proximo; //Utiliza ou retorna o elemento x...

Filas
Exerccio:
Implemente um programa que contemple uma fila de contatos para um call center; As opes do programa devem ser:
Inserir Contato:
Deve solicitar ao usurio os dados e incluir o contato na fila;

Prximo Contato:
Dever pegar o Contato do Inicio da Fila, remov-lo e mostrar os seus dados na tela para o usurio efetuar o contato com o cliente.

Sair.

Listas, Filas e Pilhas

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

Z
Pilha p

Pilhas
Pilha Vazia: Topo Inserindo elemento Y Y

Z
Pilha p

Pilhas
Pilha Vazia: Topo

Z
Pilha p

Pilhas
Pilha Vazia: Topo Inserindo elemento X X

Z
Pilha p

Pilhas
Pilha Vazia: Topo

X Y

Z
Pilha p

Pilhas
Pilha Vazia: Topo Retirar o elemento Y?
No.

X Y

Z
Pilha p

Pilhas
Pilha Vazia: Topo Aux = Desempilhar(p); Aux

Z
Pilha p

Pilhas
Pilha Vazia: Topo Aux2 = Desempilhar(p); Aux

X Aux2
Y

Z
Pilha p

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; Topo_Pilha = Topo_Pilha.Proximo; //Utiliza o elemento x...

Pilhas - Exerccio
Crie um programa que gerencie uma PILHA de TAREFAS a serem cumpridas. As tarefas so Strings que descrevem uma ao a ser executada. O usurio dever ter duas opes:
Inserir tarefa na pilha; e Obter a prxima tarefa da pilha.