Estruturas de Dados

Download Report

Transcript Estruturas de Dados

ESTRUTURA DE DADOS
Professor Victor Sotero
Estrutura de Dados
1
MODELO DE COMPUTADOR
Estrutura de Dados
2
TIPOS DE DADOS BÁSICOS
•
•
•
•
1- Inteiro
2-Real
3- Lógico
4-Caracter
• Esses são os mais utilizados até agora, mas
também existe outros tipos de dados, como os
vetores, matrizes e registros que serão vistos
mais na frente.
Estrutura de Dados
3
INÍCIO
• Algoritmo:
– Sequência de ações executáveis para a solução de um
determinado tipo de problema
Exemplo: “Receita de Bolo”
– Em geral, algoritmos trabalham sobre
Estruturas de Dados
• Conjunto de dados que representam uma situação real
• Abstração da realidade
– Estruturas de Dados e Algoritmos estão intimamente
ligados
Estrutura de Dados
4
REPRESENTAÇÃO DOS DADOS
Dados podem estar representados (estruturados) de
diferentes maneiras. Normalmente, a escolha da
representação é determinada pelas operações que serão
utilizadas sobre eles.
Exemplo: números inteiros
• Representação por palitinhos: II + IIII = IIIIII
Boa para pequenos números (operação simples)
• Representação decimal: 1278 + 321 = 1599
Boa para números maiores (operação complexa)
Estrutura de Dados
5
O QUE É UMA ESTRUTURA DE
DADOS?
Estrutura de Dados
6
ESTRUTURA DE DADOS
• Geralmente, os algoritmos são elaborados para
manipulação de dados e quando estes dados estão
organizados de forma coerente, representam uma
estrutura de dados.
• Os tipos Primitivos (inteiro, real, caracter e lógico) não
são suficientes para representar todos os tipos de dados.
Geralmente são utilizados os tipos primitivos para
construir outras estruturas de dados mais complexas.
Estrutura de Dados
7
ESTRUTURA DE DADOS
• A organização dos dados é chamada de
estrutura composta de dados que se divide
em duas formas fundamentais: homogêneas
(vetores e matrizes) e heterogêneas
(registros).
Estrutura de Dados
8
TIPOS DE ESTRUTURAS DE DADOS
• As estruturas de dados são chamadas tipos de dados
compostos que dividem-se em homogêneos (vetores
e matrizes) e heterogêneos (registros).
• As estruturas homogêneas são conjuntos de dados
formados pelo mesmo tipo de dado primitivo.
• As estruturas heterogêneas são conjuntos de dados
formados por tipos de dados primitivos diferentes
(campos do registro) em uma mesma estrutura.
Estrutura de Dados
9
TIPOS DE DADOS BÁSICOS
• Tipos construídos
– Vetor(array): agrega número fixo de dados de um
mesmo tipo.
• vet [ limite_inf .. limite_sup ] de tipobásic
Estrutura de Dados
10
VETORES (VCU)
Variáveis compostas unidimensionais são variáveis
compostas por um conjunto de dados referenciados por
um mesmo nome e que necessitam de somente um
índice para que seus elementos sejam endereçados.
Sintaxe da declaração:
tipo IDENTIFICADOR = vetor [LI..LF] de <tipo>;
IDENTIFICADOR : lista de variáveis;
Onde:
• LI : representa o limite inicial do vetor;
• LF : representa o limite final do vetor;
• <tipo> : representa qualquer um dos
tipos básicos ou tipo anteriormente
definido;
• lista de variáveis : lista de variáveis
(separadas por vírgula) que terão o
mesmo
tipo denotado por IDENTIFICADOR.
Estrutura de Dados
11
MANIPULAÇÃO DE VETORES
Ao imaginar o elevador de um prédio,
sabemos que este é capaz de acessar qualquer
um de seus andares. Entretanto, não basta
saber que andar desejamos atingir se não
soubermos o nome do edifício, pois qualquer
um possui andares. O que precisamos de
antemão é saber o nome do edifício e só
então nos preocuparmos para qual daqueles
andares queremos ir. O mesmo acontece com
o vetor.
Estrutura de Dados
12
MANIPULAÇÃO DE VETORES
O nome do vetor é determinado por meio do
identificador que foi utilizado na definição de variáveis, e
a posição, por meio da constante, expressão aritmética
ou variável que estiver dentro dos colchetes, também
denominada índice.
Após isolar um único elemento do vetor, poderemos
manipulá-lo através de qualquer operação de entrada,
saída ou atribuição.
Exemplo:
leia V[5];
V[5] ← V[5] + 1;
escreva V[5];
Estrutura de Dados
13
CAMPO
• CAMPO
É um conjunto de caracteres ou um campo isolado, por
exemplo o Nome_Completo, que possui características
próprias para armanezar dados sobre o nome de um
funcionário.
Essas características englobam o tipo de dados que devem
possuir, o tamanho e outra informações importantes.
Estrutura de Dados
14
REGISTRO
• Conjunto de campos com características sobre uma
pessoa, local, receita e outros. Por exemplo: um registro
de um funcionário vai conter informações como: nome,
data de nascimento, endereço, salário, data de admissão,
etc...
• Nós podemos dizer que o registro é o único tipo de dado
que pode agregar diversos tipos de dados dentro dele.
Estrutura de Dados
15
ARQUIVOS
• Nada mais é que um conjunto de registros
(linhas) que identificam a informação através
de uma chave ou índice agilizando a
manipulação das informações.
Estrutura de Dados
16
BANCO DE DADOS
• Conjunto de arquivos ou
tabelas com informações
que podem ser
compartilhadas com
vários usuários e assim
são relacionadas.
Estrutura de Dados
17
VARIÁVEIS COMPOSTAS HOMOGÊNIAS
Já sabemos que um conjunto homogêneo de dados é
composto por variáveis do mesmo tipo primitivo,
porém, se tivéssemos um conjunto em que os
elementos não são do mesmo tipo, teríamos então
um conjunto heterogêneo de dados. Exemplificando,
poderíamos ter um conjunto de animais
quadrúpedes, formado por cães (matilha), camelos
(cáfila), búfalos (manada), etc.
Estrutura de Dados
18
REGISTROS
Uma das principais estruturas de dados é o registro.
Para exemplificar, imagine uma passagem de ônibus,
que é formada por um conjunto de dados logicamente
relacionados, porém de tipos diferentes, tais como
número da passagem (inteiro), origem e destino
(caractere), data (caractere), horário
(caractere), poltrona (inteiro), distância (real), que são
subdivisões do registro (elementos do conjunto),
também chamadas de campos. Logo, um registro é
composto por campos que são partes que especificam
cada um dos dados.
Estrutura de Dados
19
REGISTROS (SINTAXE)
tipo IDENTIFICADOR = registro
tipo1 : campo1;
tipo2 : campo2;
.
.
.
.
tipon : campon;
fim registro;
IDENTIFICADOR : lista de variáveis;
Onde:
• IDENTIFICADOR : representa o nome
associado ao tipo registro construído;
• tipo1, tipo2, tipon : representam qualquer
um dos tipos básicos ou tipo
anteriormente definido;
• campo1, campo2, campon : representam
nomes associados a cada campo do
registro;
• lista de variáveis : lista de variáveis
(separadas por vírgula) que terão o mesmo
tipo denotado por IDENTIFICADOR.
Estrutura de Dados
20
REGISTROS (cont.)
Estrutura de Dados
21
CRIANDO REGISTROS
• Para declarar um registro em algoritmos deve ser feito da
mesma forma que declaramos uma variável, ou seja, no
início do algoritmo.
• Ex:
File: REGISTRO <ínicio da estrutura com nome File>
Nome_Completo: inteiro;
Endereco: String [50];
Sexo: Char;
Salario :real;
Fim_Registro
<fim da estrutura>
Estrutura de Dados
22
REGISTROS(exemplo)
tipo REGPASSAGEM = registro
inteiro : NUMERO, POLTRONA;
caractere : ORIGEM, DESTINO,
DATA, HORÁRIO;
real: DISTANCIA;
fim registro;
REGPASSAGEM : PASSAGEM;
O exemplo corresponde à definição de um modelo REGPASSAGEM de um
registro e à criação de uma área de memória chamada PASSAGEM, capaz
de conter sete subdivisões.
Estrutura de Dados
23
MANIPULAÇÃO DE REGISTROS
Em determinados momentos podemos precisar de todas
as informações contidas no registro (PASSAGEM) ou de
apenas algum campo do registro (como freqüentemente,
o número da poltrona).
Quando acessamos o registro genericamente, estamos
referenciando obrigatoriamente todos os campos por ele
envolvidos.
Exemplo:
leia (PASSAGEM);
escreva (PASSAGEM)
Estrutura de Dados
24
MANIPULANDO REGISTROS
Para utilizar um campo específico do registro,
devemos diferenciar esse campo. Para tal
utilizamos o caractere “.” (ponto) para
estabelecer a separação entre o nome do
registro e o nome do campo.
Exemplo:
leia (PASSAGEM.POLTRONA);
escreva (PASSAGEM.NUMERO);
Estrutura de Dados
25
CRIANDO E LENDO UMA
ESTRUTURA DE DADOS
1. Declarar as variáveis para
3- Solicitar a digitação do nome e
criação do registro Cadastro:
notas e armazenar nas variáveis:
Ler Aluno.NomeAluno;
Cadastro=registro
Ler Aluno.Nota1;
NomeAluno: String [50];
Ler Aluno.Nota2;
Nota1: real;
Ler Aluno.Nota3;
Ler Aluno.Nota4;
Nota2: real;
Fim
Nota3: real;
Nota4: real;
Fim_registro
2- Criar uma variável de nome Aluno
que terá o formato de Cadastro (registro):
Aluno: Cadastro
Estrutura de Dados
26
REGISTRO DE CONJUNTOS
Os registros vistos até agora possuíam em
seus campos apenas informações de tipos
primitivos, entretanto, podemos dispor
também de campos que são compostos, ou
seja, formados por outros tipos construídos.
Por enquanto só trataremos de problemas
com vetores.
Estrutura de Dados
27
REGISTRO DE CONJUNTOS
Digamos que possuímos um registro de estoque de um
produto, contendo como um de seus campos um valor
numérico que indique baixas por dia do produto, por dia de
semana. Temos então, um vetor de seis posições, na qual cada
posição corresponde a um dia útil da semana.
Para declarar o tipo registro anterior, utilizamos um tipo
construído vetor; então, precisamos primeiramente
declarar tal tipo, e depois o tipo registro; isto é,
precisamos declarar todos os conjuntos que serão
incluídos no registro antes da sua declaração.
Estrutura de Dados
28
REGISTRO DE CONJUNTOS
(exemplo)
Sintaxe da declaração:
Exemplos:
a) tipo VDIAS = vetor [1..6] de inteiro;
tipo REGPROD = registro
caractere : NOME;
inteiro : CODIGO;
real : PRECO;
VDIAS : BAIXA;
fim registro;
REGPROD : PRODUTO;
Estrutura de Dados
29
REGISTRO DE CONJUNTOS
Nas estruturas compostas homogêneas (vetores e
matrizes) utilizamos tipos de dados primitivos como
sendo os elementos dessas estruturas. Agora
utilizaremos como componente dessa estrutura não
apenas um tipo primitivo, mas sim os tipos construídos,
neste caso os registros. Supondo que quiséssemos
manter um registro de informações relativas às
passagens rodoviárias de todos os lugares de um ônibus,
utilizaríamos um registro referente a cada poltrona
(PASSAGEM), e para agrupar todos eles utilizaríamos um
conjunto desses registros.
Estrutura de Dados
30
REGISTRO DE CONJUNTOS (cont.)
Como possuímos 44 lugares num ônibus, numerados
seqüencialmente de 1 até 44, podemos, para uni-los,
criar um vetor no qual cada posição é um elemento
de tipo construído registro (PASSAGEM).
Estrutura de Dados
31
SINTAXE DE DECLARAÇÃO
Como possuímos um vetor composto por registros, não
podemos declarar esse vetor sem antes ter declarado seus
elementos; devemos então declarar primeiro o tipo
construído registro e depois o vetor.
a)
tipo REGPASSAGEM = registro
inteiro : NUMERO, POLTRONA;
caractere : ORIGEM, DESTINO,
DATA, HORÁRIO;
real: DISTANCIA;
fim registro;
tipo VETPASSAGEM = vetor [1..44] de REGPASSAGEM;
VETPASSAGEM : ONIBUS;
Estrutura de Dados
32
TIPOS DE DADOS X ESTRUTURA DE
DADOS
Embora estes termos sejam parecidos, eles
têm significados diferentes. Em linguagens de
programação, o tipo de dados de uma
variável define o conjunto de valores que a
variável pode assumir.
Estrutura de Dados
33
TIPOS DE DADOS
• Uma declaração de variável em uma linguagem como C
ou Pascal especifica:
1. O conjunto de valores que pode assumir.
2. O conjunto de operações que podemos efetuar.
3. A quantidade de bytes que deve ser reservada
para ela.
4. Como o dado representado por esses bytes deve
ser interpretado (por exemplo, uma cadeia de bits pode
ser interpretada como um inteiro ou real...).
Resumindo: tipos de dados podem ser vistos como métodos para interpretar o
conteúdo da memória do computador.
Estrutura de Dados
34
TIPOS DE DADOS
•
Podemos ver também o conceito de Tipo de Dados de
uma outra perspectiva: não em termos do que um
computador pode fazer (interpretar os bits...) mas em termos
do que os usuários desejam fazer (somar dois inteiros...).
• Este conceito de Tipo de Dado divorciado do hardware é
chamado Tipo Abstrato de Dado - TAD.
• Estrutura de Dados é um método particular de se
implementar uma TAD.
Estrutura de Dados
35
TIPO ABSTRATO DE DADOS - TAD
• A implementação de um TAD escolhe uma ED
para representá-lo. Cada ED é construída dos
tipos primitivos (inteiro,real, char,...) ou dos
tipos compostos (array, registro,...) de uma
linguagem de programação.
Estrutura de Dados
36
EXEMPLOS DE ED
LINEARES
NÃO LINEARES
Listas Ordenadas
Árvores
Pilhas
Grafos
Filas
Deques
Estrutura de Dados
37
PILHAS, FILAS E DEQUES
• Arrays, assim como listas*, são freqüentemente usados para
implementar coleções seqüenciais de dados onde as
alterações (inserção/remoção) são efetuadas apenas no início
ou no final da seqüência:
• Pilha: inserção e remoção na mesma extremidade
• Fila: inserção numa extremidade e remoção na outra
• Deque (double-ended queue): inserção e remoção em
ambas extremidades
* OBS.: Lembre que estamos empregando o termo “array”
para denotar coleções de dados de mesmo tamanho
armazenados contiguamente em memória. Falaremos de
listas mais tarde.
Estrutura de Dados
38
LISTAS LINEARES
• Estrutura de dados organizada de forma linear,
onde a mesma pode ter n nós (n>=0).
• Quando n=0 dizemos que é uma lista vazia.
Podemos: consultar, inserir, deletar sobre os nós de uma lista.
Estrutura de Dados
39