Buscar

02-Introducao ED

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
}  Tiago Maritan 
}  tiago@ci.ufpb.br 
Universidade Federal da Paraíba 
Centro de Informática 
Departamento de Informática 
Estrutura de Dados 
Introdução às ED 
Estrutura de Dados: o que é? 
2 
}  É o ramo da Ciências da Computação que estuda os 
diversos mecanismos de organização de dados para 
atender aos diferentes requisitos de processamento. 
 
 
Ex 1: Como armazenar os dados de um 
sistema de arquivos num computador? 
3 
}  Através de estruturas do tipo Árvore! 
Ex 2: Como armazenar uma lista de clientes 
num sistema computacional ??? 
4 
}  Através de estruturas do tipo Array (vetor) ou Lista. 
Ex 3: Como estruturar o relacionamentos 
entre dados dos usuários numa rede social? 
5 
}  Através de estruturas do tipo Grafo! 
Motivação 
6 
}  O objetivo da disciplina é, portanto, analisar as melhores 
alternativas para manipular eficientemente os dados 
de uma aplicação computacional. 
Algoritmos e Estruturas de Dados 
}  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 representa uma situação real 
}  Abstração da realidade 
}  Estruturas de Dados e Algoritmos estão intimamente ligados 
8 
Algoritmos e Estruturas de Dados 
Algoritmos Estruturas de Dados 
A escolha de uma estrutura de dados adequada 
pode simplificar a implementação do algoritmo para 
um dado problema 
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) 
 
 
Abstração e Tipos Abstratos de Dados 
10 
11 
Abstração e Tipos Abstratos de Dados 
}  Abstração: 
Copyritght 1991 © Grady Booch 
12 
Abstração e Tipos Abstratos de Dados 
}  Definição de Abstração: 
“Uma abstração é uma visualização ou 
uma representação de uma entidade que 
inclui somente os atributos de 
importância em um contexto 
particular.” 
[Robert Sebesta] 
13 
Abstração e Tipos Abstratos de Dados 
Exemplos de Abstrações: Abstração para o mundo 
14 
Abstração e Tipos Abstratos de Dados 
Exemplos de Abstrações: 
Abstrações para prédios 
15 
Abstração e Tipos Abstratos de Dados 
}  Abstração: 
}  Técnica utilizada para dominar a complexidade do mundo real, 
permitindo-nos modelar uma entidade ou conceito deste 
mundo de forma simplificada... 
}  ... focando apenas no que é interessante para resolver 
o problema. 
16 
Abstração e Tipos Abstratos de Dados 
}  Abstração em programação: 
}  Abstração de processos: 
}  Dividimos um programa em subprogramas (funções) menores e 
mais fáceis de escrever e compreender ("dividir para conquistar"). 
}  Para usar um subprograma escrito por terceiros abstraímos a sua 
implementação e nos concentramos na sua interface. 
}  Abstração de dados: 
}  Serve para representarmos entidades reais do domínio do problema 
numa linguagem de programação, identificando as propriedades destas 
entidades que interessam ao sistema bem como suas operações. 
17 
Abstração de Processos 
}  Quem usa as funções abaixo interessa-se por: 
}  Saber quantos são os parâmetros para as funções chamadas e 
em que ordem são passados 
}  Saber quais os tipos dos parâmetros 
}  Saber os tipos dos dados que as funções retornam 
}  Saber o significado desse dado retornado 
int main() { 
 char valor[] = "4"; 
 int num; 
 num = atoi(valor); 
 printf("%f", sqrt(num)); 
} 
18 
Abstração de Dados 
}  Define-se uma estrutura e operações para um novo tipo: 
typedef struct st_stack { 
 int top; 
 float data[MAX]; 
} stack; 
 
stack* newstack (int) {...} 
int push (stack *, float) {...} 
int pop (stack *, float *) {...} 
int isempty (stack) {...} 
int top (stack, float*) {...} 
int destroy (stack *) {...} 
 
Tipos Abstratos de Dados (TADs) 
19 
}  Um Tipo Abstrato de Dados (TAD) é um modelo de 
estrutura de dados que especifica: 
}  O tipo dos dados armazenados; 
}  As operações definidas sobre esses dados; 
}  Os tipos de parâmetros dessas operações 
TAD = encapsula dados + operações 
Tipos Abstratos de Dados (TADs) 
20 
}  Características de um TAD: 
}  Conceito matemático básico que define o tipo de dado; 
}  Define O QUE cada operação faz, não como faz. 
}  Não se relaciona com detalhes de implementação; 
}  Não se preocupa com eficiência de espaço e tempo, pois estas 
são questões de implementação; 
}  Estrutura de Dados: é um método particular para 
implementar um TAD em uma LP. 
Algoritmos e Estrutura de 
Dados I 
Ex: Lista de números inteiros 
}  Operações 
}  Faz Lista Vazia 
}  Insere número no começo da lista 
}  Remove de uma posição i 
20 13 02 30 Implementação por Vetores: 
void Insere(int x, Lista L) { 
 for(i=0;...) {...} 
 L[0] = x; 
} 
20 13 02 30 
Implementação por Listas Encadeadas 
void Insere(int x, Lista L) { 
 p = CriaNovaCelula(x); 
 L^.primeiro = p; 
 ... 
} 
Programa usuário do TAD: 
int main() { 
 Lista L; 
 int x; 
 
 x = 20; 
 
FazListaVazia(L); 
 Insere(x,L); 
 ... 
} 
22 
Operações em TADs 
}  Operações típicas de TADs: 
1.  Criação de um TAD; 
2.  Inclusões e remoções de dados no TAD; 
3.  Percurso no TAD (varre todos os dados armazenados); 
4.  Busca (busca algum dado dentro da estrutura). 
Implementação de TADs 
}  Em Linguagens OO (C++, Java) a implementação de 
TADs é feita através de classes 
}  Em Linguagens estruturadas (C, pascal) a 
implementação é feita pela definição de tipos 
juntamente com a implementação de funções 
24 
Tipos Abstratos de Dados 
}  Um TAD pilha implementado em C como um array: 
typedef struct st_pilha { 
 int topo; 
 float dados[MAX]; 
} pilha; 
 
void cria_pilha (pilha *){...} 
int empilha (pilha *, float) {...} 
int desempilha (pilha *, float *) {...} 
int ta_vazia (pilha) {...} 
int topo (pilha, float*) {...} 
int limpa (pilha *) {...} 
 
Representação ou estrutura 
do TAD pilha 
Operações do TAD pilha 
25 
Tipos Abstratos de Dados 
}  Um cliente para o TAD pilha: 
int main() { 
 pilha p; 
 float x; 
 
 cria_pilha(&p); 
 if (ta_vazia(p)) { 
 empilha(&p, 1.2f); 
 empilha(&p, 3.0f); 
 } 
 topo(&p, &x); 
 if (x == 3.0f) 
 desempilha (&p, &y); 
 limpe (&p); 
} 
Em respeito ao encapsulamento, 
não há acessos à representação 
da pilha nos clientes, mas apenas às 
suas operações. 
26 
Tipos Abstratos de Dados 
}  A implementação muda para lista encadeada: 
typedef struct st_pilha { 
 float dado; 
 struct st_pilha *prox; 
} nopilha; 
typedef nopilha* pilha; 
 
void cria_pilha (pilha *){...} 
int empilha (pilha *, float) {...} 
int desempilha (pilha *, float *) {...} 
int ta_vazia (pilha) {...} 
int topo (pilha, float*) {...} 
int limpa (pilha *) {...} 
 
E a implementação 
das operações 
Modifica-se 
a representação do TAD 
27 
Tipos Abstratos de Dados 
}  O cliente, no entanto, não se altera: 
int main() { 
 pilha p; 
 float x; 
 
 cria_pilha(&p); 
 if (ta_vazia(p)) { 
 empilha(&p, 1.2f); 
 empilha(&p, 3.0f); 
 } 
 topo(&p, &x); 
 if (x == 3.0f) 
 desempilha (&p, &y); 
 limpe (&p); 
} 
28 
Tipos Abstratos de Dados 
}  Entretanto, se o encapsulamentofosse violado... 
int main() { 
 pilha p; 
 float x; 
 
 cria_pilha(&p); 
 if (p.topo == -1) { 
 empilha(&p, 1.2f); 
 empilha(&p, 3.0f); 
 } 
 x = p.dados[p.topo]; 
 if (x == 3.0f) 
 desempilha (&p, &y); 
 limpe (&p); 
} 
Acessos à estrutura do TAD 
violam o encapsulamento e 
aumentam o acoplamento 
entre o TAD e seus clientes 
Estes acessos à representação 
do TAD são específicos para a 
implementação com arranjos. 
Não servem para a nova 
implementação com lista! 
29 
Tipos Abstratos de Dados 
}  O conjunto de operações públicas que um TAD oferece é 
chamado de Interface do TAD. 
}  Mudanças nos clientes só são necessárias se interface for 
modificada 
30 
Tipos Abstratos de Dados 
}  Suporte para TADs em C: 
}  C permite que se implementem TADs em módulos. 
}  Arquivo de cabecalho (extensão .h): 
}  Define tipo e os protótipos das funções. 
}  Arquivo de programa (extensão .c): 
}  Implementa as operações 
 
}  O encapsulamento de C é limitado 
}  Clientes podem acessar os campos da estrutura do tipo. 
31 
Exemplo de um módulo pilha em C 
}  Arquivo de cabeçallho (pilha.h): 
#define MAX 100 
 
typedef struct st_pilha { 
 int topo; 
 float dados[MAX]; 
} pilha; 
 
// protótipos das funções 
void cria_pilha (pilha *); 
int empilha (pilha *, float); 
int desempilha (pilha *, float *); 
int ta_vazia (pilha); 
int topo (pilha, float*); 
int limpa (pilha *); 
32 
Exemplo de um módulo pilha em C 
}  Arquivo de programa (pilha.c): 
#include "pilha.h" 
 
void cria_pilha (pilha *p) { 
 ... 
} 
 
int empilha (pilha *p, float e) { 
 ... 
} 
 
... //outras funções 
33 
Tipos Abstratos de Dados 
}  Suporte para TADs em Java e C++: 
}  Implementa TADs usando classes (arquivo .java ou .cpp). 
}  Encapsula dados + operações 
}  Pode-se controlar o nível de acesso aos atributos da 
estrutrura de dados 
34 
Exemplo de classe Pilha em Java 
public class Pilha { 
 private int topo; 
 private float[] dados; 
 
 public void empilha (float e) { 
 ... 
 } 
 
 public float desempilha() { 
 ... 
 } 
 ... // outros métodos 
 
} //fim da classe 
35 
Exemplo de classe Pilha em C++ 
class Pilha { 
 private: 
 int topo; 
 float dados[MAX]; 
 public: 
 void empilha (float e) { 
 ... 
 } 
 
 float desempilha() { 
 ... 
 } 
 ... // outros métodos 
} //fim da classe 
36 
Tipos Abstratos de Dados 
}  Benefícios da programação com TADs: 
}  Organiza programa em unidades lógicas 
}  Podem ser compiladas e mantidas em separado. 
}  Encapsulamento 
}  Promove a independência entre o TAD e seus clientes. 
}  Aumento da confiabilidade 
}  Clientes não têm acesso direto à representação do TAD, a não ser 
por suas operações. 
37 
}  Tiago Maritan 
}  tiago@ci.ufpb.br 
Universidade Federal da Paraíba 
Centro de Informática 
Departamento de Informática 
Estrutura de Dados 
Introdução às ED

Continue navegando

Outros materiais