Estrutura de dados

57
ESTRUTURA DE DADOS I Prof. Alan Mello Email: [email protected]

Transcript of Estrutura de dados

Page 1: Estrutura de dados

ESTRUTURA DE DADOS I

Prof. Alan Mello

Email: [email protected]

Page 2: Estrutura de dados

AULA 1: 20/01/2013 (SEGUNDA)

Page 3: Estrutura de dados

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.

Page 4: Estrutura de dados

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.

Page 5: Estrutura de dados

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?

Alan Mello
Segundo Szwarcfiter e Maekenzon, um algoritmo é um processo sistemático para a resolução de problema.
Alan Mello
Um Algoritmo é uma seqüência de instruções ordenadas, e sem ambigüidades de forma lógica para a resolução de uma determinada tarefa ou problema.Algoritmo não é a solução de um problema, pois, se assim fosse, cada problema teria um único algoritmo. Algoritmo é um caminho para a solução de um problema, e em geral, os caminhos que levam a uma solução são muitas.
Alan Mello
Um Programa é a formalização de um algoritmo em uma determinada linguagem de programação, segundo suas regras de sintaxe e semântica, de forma a permitir que o computador possa entender a seqüência de ações.
Alan Mello
Um algoritmo é um procedimento computacional definido que recebe um ou mais valores (entrada) e produz um ou mais valores (saída).
Alan Mello
Se formos pensar, veremos que tudo o que fazemos é um algoritmo, é um procedimento que recebe uma entrada e envia uma saída. Não só no computador, mas na vida. Quando eu falo com alguém, eu espero sua entrada (o que a pessoa fala pra mim), então penso e transformo essa entrada numa saída (a resposta que vou dar pra pessoa). E assim é com várias outras coisas. Podemos dizer também que acordar é um algoritmo, por exemplo:Entrada: Meu cérebro disse que eu estou acordado!Percebi que acordei, mas estou com sono. Espero um pouco.Saída: Abrir os olhos.Saída: Se espreguiçar.Saída: Tirar a coberta.Saída: Sentar na cama.Saída: Sair da cama.
Alan Mello
Segundo Wirth, são formulações completas de algoritmos abstratos, baseados em representações e estruturas específicas de dados.
Alan Mello
Abstração é a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais. Em modelagem orientada a objetos, uma classe é uma abstração de entidades existentes no domínio do sistema de software.
Alan Mello
Abstração (do latim abstractio)1 é uma operação intelectual que consiste em isolar, por exemplo num conceito, um elemento à exclusão de outros, do qual então se faz abstração.2 Por exemplo, abstraindo uma bola de futebol de couro, por uma bola de futebol, retemos apenas a informação enxuta das propriedades e comportamentos da palavra.
Alan Mello
Segundo Lages as estruturas de dados são usadas nos algortmos para representar as informações do problema a ser resolvido.
Alan Mello
Segundo Veloso et al, leigos pensarão em computadores, ou seja, aquelas máquinas maravilhosas. Uma pessoa iniciada pensará em programas que comandam os computadores. Já um especialista pensará primordialmente em dados, de uma forma ou de outra.No fim das contas, computadores servem para armazenar informação e programas para manipula-las.
Page 6: Estrutura de dados

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.

Page 7: Estrutura de dados

INTRODUÇÃO

Benefícios das Estruturas de Dados:

– Organização da informação

– Melhora o desempenho

– Proporciona o reuso de código

- Proporciona interoperabilidade

Page 8: Estrutura de dados

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

Alan Mello
pg 2: Estrutura de dados VELOSO
Page 9: Estrutura de dados

INTRODUÇÃO

Desenvolvimento de programas

Destaque em três pontos

Estruturas de dados

Operações

Estrutura de representação

Alan Mello
pg 2: Estrutura de dados VELOSO
Page 10: Estrutura de dados

INTRODUÇÃO

Desenvolvimento de programas

Resumindo, um programa é encarado como (representação de) um algoritmo que manipula (representações de) dados.

Alan Mello
pg 2: Estrutura de dados VELOSO
Page 11: Estrutura de dados

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.

Alan Mello
pg 6: Estrutura de dados VELOSO
Page 12: Estrutura de dados

INTRODUÇÃO

Tipos de Dados

Tipos Primitivos

São tipos básicos predefinidos, ex: Inteiro, real, lógico, caracter.

Page 13: Estrutura de dados

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

Page 14: Estrutura de dados

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

Page 15: Estrutura de dados

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

Page 16: Estrutura de dados

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

Page 17: Estrutura de dados

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.

Page 18: Estrutura de dados

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

Page 19: Estrutura de dados

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.

Page 20: Estrutura de dados

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

Page 21: Estrutura de dados

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)

Page 22: Estrutura de dados

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

Page 23: Estrutura de dados

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>

Page 24: Estrutura de dados

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

Page 25: Estrutura de dados

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.

Page 26: Estrutura de dados

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”.

Page 27: Estrutura de dados

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.

Page 28: Estrutura de dados

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.

Page 29: Estrutura de dados

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.

Page 30: Estrutura de dados

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.

Page 31: Estrutura de dados

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.

Page 32: Estrutura de dados

INTRODUÇÃO

Tipos de Dados

Comandos básicos

Iteração: para v de i incr p até f faça A

Page 33: Estrutura de dados

INTRODUÇÃO

Tipos de Dados

Comandos básicos

Seleção: conforme v faça v1:c1; v2:c2;...;vn:cn; (outro : c)

Page 34: Estrutura de dados

INTRODUÇÃO

Tipos de Dados

Procedimentos

Procedimento rotina

Procedimento função

Page 35: Estrutura de dados

INTRODUÇÃO

Tipos de Dados

Procedimentos

Procedimento rotina

Formato: proc nome (lista_de_parâmetros)

Page 36: Estrutura de dados

INTRODUÇÃO

Tipos de Dados

Procedimentos

Procedimento função

Formato: proc nome (lista_de_parâmetros) : retorno

Page 37: Estrutura de dados

AULA 2: 21/01/2014 (TERÇA)

Page 38: Estrutura de dados

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 ]

Page 39: Estrutura de dados

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

Page 40: Estrutura de dados

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);

Page 41: Estrutura de dados

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.

Page 42: Estrutura de dados

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”)

Page 43: Estrutura de dados

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”)

Page 44: Estrutura de dados

INTRODUÇÃO

Matrizes

Matrizes Unidimensionais

Representação Natural

Exercício

1) Explique por que o procedimento anterior usa a variável auxiliar novaMatriz.

Page 45: Estrutura de dados

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”)

Page 46: Estrutura de dados

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] ]

Page 47: Estrutura de dados

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.

Alan Mello
Veloso [et al] pg: 84
Page 48: Estrutura de dados

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.

Alan Mello
Silvio do Lago Pereira pg: 7
Page 49: Estrutura de dados

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;

Alan Mello
Veloso [et al] pg: 85
Page 50: Estrutura de dados

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.

Page 51: Estrutura de dados

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.

Page 52: Estrutura de dados

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]

Page 53: Estrutura de dados

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

Page 54: Estrutura de dados

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

Page 55: Estrutura de dados

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

Page 56: Estrutura de dados

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

Page 57: Estrutura de dados

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?