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
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
C D
C D
B C D
B C D F
C D E F
C D E
C E
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;
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.
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
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()
FILAS
Filas
O que uma fila em nosso cotidiano? As filas so diferentes das listas?
Em quais sentidos?
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
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.
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;
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.
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;
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!
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;
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.