3. EMENTA
Conceitos básicos em estruturas de dados. Organização linear e
não-linear. Organização aleatória. Listas lineares: filas e pilhas.
Listas não-lineares: arvores e grafos.
4. BIBLIOGRAFIA
GUIMARÃES, A. M.; LAGES, N. A. C. Algoritmos e Estrutura de Dados.
Rio de Janeiro: LTC, 1994.
VELOSO, P. [et al]. Estrutura de Dados. Rio de Janeiro: Elsevier, 1983 –
28° impressão.
VILLAS, M. V. [et al]. Estrutura de Dados: Conceitos e Técnicas de
Implementação. Rio de Janeiro: Campus, 1983
PEREIRA, S. L. Estrutura de Dados: Conceitos e Aplicações. São Paulo:
Érica, 1996, 2° edição.
SZWAREFITER, J. L.; MARKENZON, L. Estrutura de Dados e Seus
Algoritmos. Rio de Janeiro: LTC, 1994.
5. INTRODUÇÃO
O que significa abstração?
O que é um algoritmo?
O que é um programa de computador?
O que é computação?
O que são estruturas de Dados?
6. INTRODUÇÃO
Objetivos das Estruturas de Dados
- Teórico: Identificar e desenvolver modelos matemáticos,
determinando que classes de problemas podem ser resolvidos
com o uso deles. Obs: um modelo matemático representa um
aspecto físico.
- Prática: Criar representações concretas dos objetos e
desenvolver rotinas capazes de atuar sobre estas
representações, de acordo com o modelo considerado.
7. INTRODUÇÃO
Benefícios das Estruturas de Dados:
– Organização da informação
– Melhora o desempenho
– Proporciona o reuso de código
- Proporciona interoperabilidade
8. INTRODUÇÃO
Desenvolvimento de programas
– Especificações do problema
– Projeto em alto nível
– Análise das alternativas
- Refinamento e codificação
– Verificação do comportamento
9. INTRODUÇÃO
Desenvolvimento de programas
Destaque em três pontos
- Estruturas de dados
- Operações
- Estrutura de representação
10. INTRODUÇÃO
Desenvolvimento de programas
Resumindo, um programa é encarado como (representação de)
um algoritmo que manipula (representações de) dados.
11. INTRODUÇÃO
Tipos de Dados
A noção de tipo de dados ocorre na maioria das linguagens de
programação. Ao declararmos o tipo de uma variável ,
delimitamos o conjunto de valores que ela pode tomar e as
operações que podemos efetuar sobre ela.
12. INTRODUÇÃO
Tipos de Dados
Tipos Primitivos
São tipos básicos predefinidos, ex: Inteiro, real, lógico, caracter.
13. INTRODUÇÃO
Tipos de Dados
Tipos Primitivos
Tipo Inteiro
- São valores inteiros (negativos, zero ou positivos)
- Operações permissíveis: soma, subtração, multiplicação, divisão
inteira, resto da divisão.
- Formato: int
14. INTRODUÇÃO
Tipos de Dados
Tipos Primitivos
Tipo real
- São números racionais, isto é, números normalmente
representados por uma parte inteira e uma parte fracionária.
- Operações permissíveis: soma, subtração, multiplicação e
divisão.
- Formato: real
15. INTRODUÇÃO
Tipos de Dados
Tipos Primitivos
Tipo lógico
- Consistem em exatamente dois valores: Verdadeiro e falso.
- Operações permissíveis: e, ou, não.
- Formato: log
16. INTRODUÇÃO
Tipos de Dados
Tipos Primitivos
Tipo caractere
- São chamados “caracteres alfanuméricos”: os dígitos decimais
(0-9), as letras (A-Z) e alguns sinais especiais (espaço em branco,
sinais de pontuação etc.)
- Operações permissíveis: comparação.
- Formato: car
17. INTRODUÇÃO
Tipos de Dados
Tipos estáticos de dados
A estrutura desses dados são completamente definidos antes de
começarmos a efetuar operações. Logo, este tipo de dado tem
tamanho definido.
Tipos dinâmicos de dados
São aqueles que sofrem alteração estruturas quando estão sendo
manipulados. Logo, este tipo de dado não tem tamanho definido.
18. INTRODUÇÃO
Tipos de Dados
Funções de Transferência
Em muitos casos basta considerar operações que manipulam
valores de um determinado tipo e produzem resultados no mesmo
tipo. Porém, em alguns casos, mais de um tipo de dado é
manipulado, assim como, o resultado da manipulação um tipo de
dado pode ser outro tipo de dado. Ex: trunc(a : float) : int
19. INTRODUÇÃO
Tipos de Dados
Mecanismos para construção de tipos
Permitem a construção de outro tipo a partir dos tipos primitivos. Ex
de mecanismos: vetor, registro, sequência, referência, alternativa.
20. INTRODUÇÃO
Tipos de Dados
Mecanismos para construção de tipos
Vetor
O vetor permite a construção de um tipo cujos valores são
agregados homogêneos de um tamanho definido, isto é, seus
componentes são todas de um mesmo tipo. Ex: vetor [1...10] de
inteiros.
Formato: tipo valor-mensal : vet [1...12] de real
21. INTRODUÇÃO
Tipos de Dados
Mecanismos para construção de tipos
Registro
Agregados heterogêneos, isto é, os componentes desta
construção não são necessariamente de um mesmo tipo. Ex:
registro (código do funcionário: inteiro, salário: real )
Formato: tipo funcionario : reg (código : int, salario: real)
22. INTRODUÇÃO
Tipos de Dados
Mecanismos para construção de tipos
Sequência
Tipo cujos objetos são coleção ordenadas de objetos do tipo de
dados, sem qualquer limitação no seu tamanho (exceto por ser
finito). Ex: cadeia de caracteres.
Formato: tipo cadeia : seq car
23. INTRODUÇÃO
Tipos de Dados
Mecanismos para construção de tipos
Enumeração
Permite definir tipos de dados por meio dos valores que os dados
daquele tipo podem tomar. Ex: mês possíveis em um ano.
Formato: tipo mês : enum <jan, fev, mar, abr, maio, jun, jul, ago,
set...dez>
24. INTRODUÇÃO
Tipos de Dados
Variáveis, declarações e expressões
Nomes (identificadores) podem ser utilizados para denotar
variáveis. Tal identificador é atribuído explicitamente na
declaração da variável. Ademais, cada variável possui um
conjunto de expressões válidas.
Formato: var nome : tipo
25. INTRODUÇÃO
Tipos de Dados
Comandos básicos
São utilizados para descrever algoritmos que manipulem variáveis
que, por sua vez, estão associadas com tipos de dados. São
exemplos de comandos: Atribuição, Entrada, Saída, Condicionais,
Iteração e Seleção.
26. INTRODUÇÃO
Tipos de Dados
Comandos básicos
Atribuição: v <- e
A avaliação da expressão “e” fornece um valor, que deve ser do
tipo declarado para a variável “v” e que passa a ser o valor de
“v”.
27. INTRODUÇÃO
Tipos de Dados
Comandos básicos
Entrada: leia(v1, v2,...,vn)
A execução deste comando faz com que as variáveis listadas
recebam valores do dispositivo de entrada.
28. INTRODUÇÃO
Tipos de Dados
Comandos básicos
Saída: escreva(v1, v2,...,vn)
A execução deste comando faz com que o dispositivo de saída
escreva os valores atuais dessas variáveis.
29. INTRODUÇÃO
Tipos de Dados
Comandos básicos
Condicional: se L então A (senão B)
Primeiramente, a condição L é avaliada, dando um valor lógico.
Se este valor é verdadeiro então o comando A é executado; caso
contrário, é executado o comando B.
30. INTRODUÇÃO
Tipos de Dados
Comandos básicos
Iteração: enquanto L faça A
Continua a realizar a tarefa A desde de que a condição exposta
em L seja atendida; caso contrário, deixará de realizar a tarefa A.
31. INTRODUÇÃO
Tipos de Dados
Comandos básicos
Iteração: repita A até (que) L
O comando A é executado, pelo menos uma vez, antes da
avaliação de L.
32. INTRODUÇÃO
Tipos de Dados
Comandos básicos
Iteração: para v de i incr p até f faça A
33. INTRODUÇÃO
Tipos de Dados
Comandos básicos
Seleção: conforme v faça v1:c1; v2:c2;...;vn:cn; (outro : c)
34. INTRODUÇÃO
Tipos de Dados
Procedimentos
- Procedimento rotina
- Procedimento função
35. INTRODUÇÃO
Tipos de Dados
Procedimentos
Procedimento rotina
Formato: proc nome (lista_de_parâmetros)
36. INTRODUÇÃO
Tipos de Dados
Procedimentos
Procedimento função
Formato: proc nome (lista_de_parâmetros) : retorno
38. INTRODUÇÃO
Matrizes
- Bidimensional: dois índices devem ser fornecidos: linha e coluna
Formato: tipo matriz : vet [ i...i ] [ j...j ]
- Unidimensionais: apenas um índice deve ser fornecido.
Formato : tipo matriz : vet [ i ...i ]
39. INTRODUÇÃO
Matrizes
Matrizes Unidimensionais
Operações
1) Consulta: dado um índice i é fornecido o valor M(i), desde que i
esteja dentro dos limites, isto é, -N <= i <= N. Formato: consul (M,
i ) : valor
2) Alteração: dado um índice i e um valor r, coloca-se na posição
i o valor r. Formato: alter (M, i, r) : M
40. INTRODUÇÃO
Matrizes
Matrizes Unidimensionais
Exercício
1) Considera a matriz M: [ -2 | 4 | 7 | 8 | 3.2 ], mostre qual Tipo de Dados Primitivo ela foi
declarada. Ademais, demonstre os resultados das operações:
A. consul (M, 2);
B. consul (M , 6);
C. consul (N, 3);
D. alter (M, 2, 1);
E. alter (M, 4, 2);
F. alter (M, i, 1);
G. alter (G, 0, -3);
41. INTRODUÇÃO
Matrizes
Matrizes Unidimensionais
Exercício
2) Declare uma matriz M com tamanho 4 de real e atribua valores.
Ademais, escreva os procedimento: consul (M, i) e alter (M, i, r).
Por fim, chame o procedimentos consul e alter enviando como
parâmetro a matriz M e índices ou valores aleatórios. Demostre os
resultados.
42. INTRODUÇÃO
Matrizes
Matrizes Unidimensionais
Representação Natural : índices podem ser negativos.
Preocupação: 1) Limites da Matriz 2) Tipo de Dados definido;
proc consul (m : vet [-2...4] de real, i : int ) : real
se (-2 <= i <= 4)
então
retorne m [ i ]
senão
escreva (“índice inadmissível”)
43. INTRODUÇÃO
Matrizes
Matrizes Unidimensionais
Representação Natural
Preocupação: 1) Limites da Matriz 2) Tipo de Dados definido;
proc alter (m : vet [-2...4] de real, i : int, r : real ) : vet [-2...4] de real
var novaMatriz : vet [-2..4] de real
se (-2 <= i <= 4)
então
inicio
novaMatriz = m;
novaMatriz[ i ] = r;
retorne novaMatriz
fim
senão
escreva (“índice inadmissível”)
44. INTRODUÇÃO
Matrizes
Matrizes Unidimensionais
Representação Natural
Exercício
1) Explique por que o procedimento anterior usa a variável auxiliar
novaMatriz.
45. INTRODUÇÃO
Matrizes
Matrizes Unidimensionais
Representação Baseada : índices começam a partir de 1
Preocupação: 1) Limites da Matriz 2) Tipo de Dados definido;
proc consul (m : vet [4] de real, i : int ) : real
se (1 <= i <= 4)
então
retorne m [ i ]
senão
escreva (“índice inadmissível”)
46. INTRODUÇÃO
Matrizes
Representação na Memória: linear
var vetor : vet [4] de int
Em geral vet será armazenado na memória em células contíguas,
cada um contendo um inteiro, a partir de um endereço de base,
como a seguir: [ [b...b+n] ]
47. LISTA LINEARES
Motivação
Frequentemente nos deparamos, na solução de determinados
problemas, com conjuntos de dados que se relacionam entre si de
alguma forma, refletindo algumas propriedades que estes dados
apresentam no problema real. Naturalmente, queremos que tal
formato seja preservado quando representado no computador.
Em lista lineares, a relação de ordem é estudada.
48. LISTA LINEARES
Definição
Uma lista linear é uma coleção L [a1, a2, ..., an], n >= 0, cuja
propriedade estrutural baseia-se apenas na posição relativa dos
elementos, que são dispostos linearmente. Se n = 0, dizemos que a
lista L é vazia; caso contrário, são válidas as seguintes
propriedades:
1) a1 é o primeiro elemento de L;
2) an é o último elemento de L;
3) Ak, 1 < k < n, é precedido pelo elemento ak-1 e seguido por ak +1
em L.
49. LISTA LINEARES
Operações
Entre diversas operações que podem ser realizadas sobre listas lineares, temos:
Acessar o k-ésimo nó da lista, para o obter ou alterar o dado nele contido;
Inserir um novo nó após (ou antes) o k-ésimo nó da lista;
Remover o k-ésimo nó da lista;
Concatenar duas listas;
Determinar o número de nós de uma lista;
Localizar o nó que contêm um dado valor;
50. LISTA LINEARES
Representações
A escolha da representação dependerá da frequência com que
determinadas operações serão executadas sobre a lista. A seguir
são apresentadas as duas formas mais frequentes usadas para
representar listas lineares: por contiguidade dos nós e por
encadeamento dos nós.
51. LISTA LINEARES
Representações
A escolha da representação dependerá da frequência com que
determinadas operações serão executadas sobre a lista. A seguir
são apresentadas as duas formas mais frequentes usadas para
representar listas lineares: por contiguidade dos nós e por
encadeamento dos nós.
52. LISTA LINEARES
Representações
Por contiguidade dos nós
- Explora a sequencialidade da memória do computador.
- Esta estrutura é a mesma do agregado homogêneo.
Definição: tipo lista : vet [N] de tipo
Declaração: var l : lista
Representação: l1 = l [1]
l2 = l [2]
ln = l [n]
53. LISTA LINEARES
Algoritmos em lista representadas por contiguidade
1) Acessar o K-ésimo nó de uma lista
Proc acessar (l : lista, k: int, fim: int, sinal: log, val: tipo)
Se k <= 0 ou k > fim
Então
sinal = F;
Senão
Início
val = l [k];
sinal = V;
fim
54. LISTA LINEARES
Algoritmos em lista representadas por contiguidade
1) Alterar o valor do K-ésimo nó de uma lista
Proc alterar (l : lista, k: int, fim: int, sinal: log, val: tipo)
Se k <= 0 ou k > fim
Então
sinal = F;
Senão
Início
l [k] = val;
sinal = V;
fim
55. LISTA LINEARES
Algoritmos em lista representadas por contiguidade
1) Inserir um nó antes do K-ésimo nó de uma lista
Proc inserir (l : lista, k: int, fim: int, sinal: log, val: tipo)
Var i: int;
Se k <= 0 ou k > fim
Então
sinal = F;
Senão
Início
para i de fim incr – 1 até k faça
l[i+ 1] = l [i];
fim = fim + 1;
l [k] = val;
sinal = V;
fim
56. LISTA LINEARES
Algoritmos em lista representadas por contiguidade
1) Remover o K-ésimo nó de uma lista
Proc remover (l : lista, k: int, fim: int, sinal: log, val: tipo)
Var i: int;
Se k <= 0 ou k > fim
Então
sinal = F;
Senão
Início
para i de k incr 1 até fim - 1 faça
l[i] = l [i + 1];
fim = fim - 1;
sinal = V;
fim
57. LISTA LINEARES
Algoritmos em lista representadas por contiguidade
Exercício
1) Explique a finalidade do comando para nos procedimentos
para inserir e remover um nó. O tempo necessário para se remover
um nó depende de sua posição?