Você está na página 1de 36

Estruturas de Dados e

Tipos Abstratos de Dados


Gustavo Bastos
Faculdade dos Guararapes
Aula 2 - 2006_2
Revisão
 Objetivos, Ementa e Bibliografia
 Revisão de Algoritmos
 Estruturas de controle
 Estruturas de dados
 Funções
Como pagar as contas?
 Embora seja chato, é preciso pagar
as contas
 Como lidar com as contas
 Separar por tipo
 Separar por data de vencimento
 Juntar em um único conjunto (mais fácil)
 Pagar as contas de uma vez só
 Maratona de pagamento
Algoritmo para pagar
contas
Nome algoritmo: algoPagarConta
inicio
enquanto houver contas pendentes
escolha uma conta;
se tiver bastante dinheiro
pague a conta;
senão
peça empréstimo e reze;
fim.
Modos de escolher a conta
 Existem vários modos de escolher
 Data de vencimento, valor, importância
 Os dois mais simples são
 Primeira que entra primeira que sai
(First-In First-Out) (FIFO)
 Última que entra primeira que sai (Last-
In First-Out) (LIFO)
Modos de Escolher a conta
 Pelo método FIFO
 Paga a conta mais antiga
 Contas são pagas na ordem de chegada
 Boa política quando o dinheiro é curto
 Pelo método LIFO
 Paga a conta mais recente
 Contas pagas na ordem reversa da chegada
 Boa política quando nós temos muito dinheiro
Algoritmo sobre um conjunto
de contas
Nome algoritmo: gerenciarConta
inicio
coloque uma conta no conjunto;
examine uma conta específica no conjunto;
remova uma conta específica do conjunto;
verifique se existe uma conta no conjunto;
fim.
Como pagar contas
 Para lidar com um conjunto de contas
 Precisamos saber usar as operações do
algoritmo anterior
 As operações definem o que fazer,
mas não como fazer
 Definir uma regra para escolher uma
conta
 Cria um programa mais específico e
implementável
Usando LIFO para pagar
contas
Nome algoritmo: gerenciarContaLifo
inicio
coloque uma conta no conjunto;
examine a conta mais recente no conjunto;
remova a conta mais recente do conjunto;
verifique se existe uma conta no conjunto;
fim.
Usando LIFO para pagar
contas
 Que estrutura utilizar?
 Uma pasta de contas
 Procedimento durante o algoritmo
algoPagarConta
 Contas novas vão para o início da pasta
 Verificamos o início da pasta
 Removemos a conta, se é possível pagá-
la
Usando FIFO para pagar
contas
Nome algoritmo: gerenciarContaFifo
inicio
coloque uma conta no conjunto;
examine a conta mais antiga no conjunto;
remova a conta mais antiga do conjunto;
verifique se existe uma conta no conjunto;
fim.
Usando FIFO para pagar
contas
 Que estrutura utilizar?
 Uma pasta de contas
 Dois procedimentos para algoPagarConta
 Primeiro
 Contas novas vão para o início da pasta
 Verificamos o final da pasta
 Removemos a conta, se é possível pagá-la
 Segundo
 Contas novas vão para o final da pasta
 Verificamos o início da pasta
 Removemos a conta, se é possível pagá-la
Abstração
 O algoritmo gerenciarConta possui
um tipo comum de processamento
 Chegada de algo novo, armazene
 De vez em quando, pegue um novo dado
para processar
 Se as operações usarem “coisas” ao
invés de “contas”
 Os algoritmos já estão descritos
Algoritmo sobre um conjunto
de dados
Nome algoritmo: gerenciarDados
inicio
coloque um dado no conjunto;
examine um dado específico no conjunto;
remova um dado específico do conjunto;
verifique se existe um dado no conjunto;
fim.
Definições
 Estrutura de dados
 É um modo de armazenar dados em um
computador para que eles possam ser
usados eficientemente(1)
 Tipo Abstrato de dados
 É a especificação de um conjunto de
dados e de um conjunto operações que
podem ser realizadas sobre os dados(2)

(1) http://en.wikipedia.org/wiki/Data_structure
(2) http://en.wikipedia.org/wiki/Abstract_data_type
Estruturas de Dados
 Escolha cuidadosa da estrutura permite
algoritmos melhores
 Uma boa estrutura permite menos
processamento
 São implementadas por tipos primitivos,
compostos, ponteiros e operações
 Diferentes tipos, diferentes funções
 B-trees usadas em BD
Estruturas de Dados
 Escolher bem a estrutura de dados é primordial
 Grandes sistemas são difíceis de implementar e
precisam de performance
 Algoritmos se adequam às estruturas
 Às vezes, escolhe-se as estruturas pelos seus
algoritmos
 Tarefas chaves necessárias precisam de um estrutura
específica
 Em ambos os casos, a escolha da estrutura é
fundamental
Estruturas de Dados
 Escolha da estrutura de dados é
fundamental
 Muitos métodos de planejamento e
linguagens seguem esta idéia
 Muita linguagens permitem reuso das
estruturas de dados
 Através de interfaces
 Linguagens Orientadas a Objetos
usam classes
Estruturas de Dados
 Modernas linguagens de programação
fornecem muitas estruturas de dados nas
bibliotecas padrão
 C++, Java, C#
 Dúvida: estruturas de dados são
implementações ou interfaces?
 Depende da perspectiva
 Interface entre duas funções
 Implementação de métodos de acesso ao
armazenamento dos dados
Exemplos de Estruturas de
Dados
 Arrays
 Registros
 Listas Encadeadas
 Árvores binárias
Tipos Abstratos de Dados
(TAD)
 Conjunto de dados e operações sobre
os dados
 É abstrato porque é independente de
implementação
 Definições
 Matemática
 Programada como uma interface
 A interface fornece um construtor e
operações sobre o construtor
Separação interface e
implementação
 Em um computador, tipos abstratos
de dados usam interface
 Protegendo a implementação
 Usuários de TAD se preocupam com a
interface
 Implementação pode mudar no futuro
TAD e Estruturas de
Dados
 Existe uma distinção entre tipos abstratos de dados e
estruturas de dados usadas na sua implementação
 Exemplo: Tipo abstrato de dados Lista
 Representações
 Array ou lista encadeada
 Lista é um tipo com operações
 (inserir, remover, etc)
 Lista encadeada é uma estrutura de dados baseada em
ponteiros
 Pode ser usada para representar uma lista
 Lista encadeada é usada para representar TAD Lista
 Os termos se confundem
Exemplos de TAD
 Fila
 Pilha
 Lista
 Árvore Binária de Busca
 Grafos
Exercício de fixação
 Procurar dois outros tipos de dados
não citados e fazer uma pequena
apresentação de 5 minutos. Grupo de
no máximo 4 componentes.
Estruturação da
Informação
 Computação tem várias interpretações
 Computadores maravilhosos (pessoa
leiga)
 Programas interessantes (usuário)
 Dados que são processados (especialista)
 Computadores armazenam e
informações e programas
Estruturação da Informação
 Importância de estruturar a
informação
 Lista telefônica e fichário em ordem
alfabética
Desenvolvimento de
programas
 Passos para desenvolver uma solução
para um problema
 Especificação do problema
(Planejamento)
 Projeto em alto nível (Projeto)
 Análise de alternativas (Projeto)
 Refinamento e codificação (Codificação)
 Verificação do comportamento (Teste)
Desenvolvimento de
programas
 Passo 1
 Entender as relações existentes entre os
dados do problema
 Passo 2
 Descobrir quais alterações serão feitas
nos dados (alto nível)
 Passo 3
 Sugerir soluções variadas
Desenvolvimento de
programas
 Passo 4
 Refinar as transformações do passo 2
para as funcionalidades da linguagem
 Passo 5
 Avaliação do programa quanto ao
desempenho
 Pontos importantes
 Estruturas de dados, operações e
representação
Desenvolvimento de
programas
 Estruturas de dados
 Relações lógicas entre os dados
 Operações
 Modos de manipular as estruturas
 Estruturas de representação
 Modo de armazenar os dados no
computador
 Preservam as relações e operações
Desenvolvimento de
programas
 Programa
 Algoritmo que manipula dados
 Estruturas de dados adequadas
 Programas corretos, eficazes, seguros e
eficientes.
Exercícios
 Qual regra descreve os seguintes
fatos:
 Carros esperando em um lava-jato
 Badejas na entrada de uma lanchonete
 Páginas de um calendário de mesa
 Trabalhos na fila de impressão
Exercícios
 Implemente um conjunto cuja regra
para escolher um elemento
‘específico’ seja selecionar um
elemento aleatoriamente no conjunto.
Todos os elementos possuem a
mesma probabilidade.
Resumo
 Introdução
 Conceitos FIFO e LIFO
 Estruturas de Dados
 Conceitos e utilidades
 Tipos de dados abstratos
 Conceitos e utilidades
Referências
 Data structure
 http://en.wikipedia.org/wiki/Data_structure
 Abstract data type
 http://en.wikipedia.org/wiki/Abstract_data_
type
 Veloso, Paulo e outros. Estruturas de
Dados. 4ed. 1988.
 Van Wyk, Christopher J. Data structures
and C programs. 1988.

Você também pode gostar