Tipos Abstratos de Dados
Prof. Jussara Almeida
Derivado das transparncias do Prof. Luiz Chaimowicz
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Algoritmos e Estrutura de Dados Algoritmo:
Sequncia de aes executveis para a soluo de um determinado tipo de problema
Exemplo: Receita de Bolo
Em geral, algoritmos trabalham sobre Estruturas de Dados Conjunto de dados que representa uma situao real Abstrao da realidade
Estruturas de Dados e Algoritmos esto intimamente ligados
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Representao dos dados Dados podem estar representados
(estruturados) de diferentes maneiras Normalmente, a escolha da representao
determinada pelas operaes que sero utilizadas sobre eles
Exemplo: nmeros inteiros Representao por palitinhos: II + IIII = IIIIII
Boa para pequenos nmeros (operao simples) Representao decimal: 1278 + 321 = 1599
Boa para nmeros maiores (operao complexa)
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Programas Um programa uma formulao concreta
de um algoritmo abstrato, baseado em representaes de dados especficas
Os programas so feitos em alguma linguagem que pode ser entendida e seguida pelo computador Linguagem de mquina Linguagem de alto nvel (uso de compilador)
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Tipos Abstratos de Dados (TADs) Agrupa a estrutura de dados juntamente com
as operaes que podem ser feitas sobre esses dados
O TAD encapsula a estrutura de dados. Os usurios do TAD s tem acesso a algumas operaes disponibilizadas sobre esses dados
Usurio do TAD x Programador do TAD Usurio s enxerga a interface, no a
implementao
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Tipos Abstratos de Dados (TADs) Dessa forma, o usurio pode abstrair da
implementao especfica.
Qualquer modificao nessa implementao fica restrita ao TAD
A escolha de uma representao especfica fortemente influenciada pelas operaes a serem executadas
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Exemplo: Lista de nmeros inteiros Operaes
Faz Lista Vazia Insere nmero no comeo da lista Remove de uma posio i
20 13 02 30Implementao por Vetores:void Insere(int x, Lista L) { for(i=0;...) {...} L[0] = x;}
20 13 02 30
Implementao por Listas Encadeadas
void Insere(int x, Lista L) { p = CriaNovaCelula(x); L^.primeiro = p; ...}
Programa usurio do TAD:
int main() { Lista L; int x;
x = 20; FazListaVazia(L); Insere(x,L); ...}
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Implementao de TADs Em linguagens orientadas por objeto (C++, Java) a
implementao feita atravs de classes Em linguagens estruturadas (C, pascal) a
implementao feita pela definio de tipos juntamente com a implementao de funes
Nesta disciplina, vamos utilizar os conceitos de linguagens estruturadas C (typedef e structs) e Pascal (type, record)
Orientao por objetos (classes, etc) vai ser vista em disciplinas posteriores (POO, Prog. Modular)
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Estruturas Uma estrutura uma coleo de uma ou mais
variveis, possivelmente de tipos diferentes, colocadas juntas sob um nico nome para manipulao conveniente
Por exemplo, para representar um aluno so necessrias as informaes nome, matrcula, conceito
Ao invs de criar trs variveis, possvel criar uma nica varivel contendo trs campos.
Em C: struct Em Pascal: record
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Estruturas (structs) em C
struct Aluno { char nome[100]; int matricula; char conceito;};main() { struct Aluno al, aux;
al.nome = Luiz al.matricula = 200712; al.conceito = A; aux = al; printf(%s, aux.nome);}
Luiz200712 A
al:
Luiz200712 A
aux:
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Declarao de Tipos Para simplificar, uma estrutura ou mesmo
outros tipos de dados podem ser definidos como um novo tipo
Uso da construo typedeftypedef struct { char nome[100]; int matricula; char conceito;} TipoAluno;
typedef int[10] Vetor;
int main() { TipoAluno al; Vetor v;
...}
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
TADs Para implementar um Tipo Abstrato de Dados,
usa-se a definio de tipos juntamente com a implementao de funes que agem sobre aquele tipo
Como boa regra de programao, evita-se acessar o dado diretamente, fazendo o acesso s atravs das funes Note que no h uma forma de proibir o acesso.
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
TADs em C Uma boa tcnica de programao
implementar os TADs em arquivos separados do programa principal
Para isso geralmente separa-se a declarao e a implementao do TAD em dois arquivos: NomeDoTAD.h : com a declarao NomeDoTAD.c : com a implementao
O programa ou outros TADs que utilizam o seu TAD devem dar um #include no arquivo .h
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Exemplo Implemente um TAD ContaBancaria, com os
campos nmero e saldo onde os clientes podem fazer as seguintes operaes: Iniciar uma conta com um nmero e saldo inicial Depositar um valor Sacar um valor Imprimir o saldo
Faa um pequeno programa para testar o seu TAD
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
ContaBancaria.h
// definio do tipotypedef struct { int numero; double saldo;} ContaBancaria;
// cabealho das funesvoid Inicializa(ContaBancaria* conta, int numero, double saldo);void Deposito (ContaBancaria* conta, double valor);void Saque (ContaBancaria* conta, double valor);void Imprime (ContaBancaria conta);
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
ContaBancaria.c#include #include "Contabancaria.h"
void Inicializa(ContaBancaria* conta, int numero, double saldo) { (*conta).numero = numero; (*conta).saldo = saldo;}
void Deposito (ContaBancaria* conta, double valor) { (*conta).saldo += valor;}
void Saque (ContaBancaria* conta, double valor) { (*conta).saldo -= valor;}
void Imprime (ContaBancaria conta) { printf("Numero: %d\n", conta.numero); printf("Saldo: %f\n", conta.saldo);}
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Main.c#include #include #include "ContaBancaria.h"
int main (int argc, char **argv) { ContaBancaria conta1; Inicializa(&conta1, 918556, 300.00); printf("\nAntes da movimentacao:\n "); Imprime(conta1); Deposito(&conta1, 50.00); Saque(&conta1, 70.00); printf("\nDepois da movimentacao:\n "); Imprime (conta1); }
Algoritmos e Estrutura de Dados II Prof. Luiz Chaimowicz
Exerccio (foco nos algoritmos) Implemente um TAD Nmero Complexo
cada nmero possui os campos real e imaginrio Implemente as operaes:
Atribui: atribui valores para os campos Imprime: imprime o nmero da forma R + Ci Copia: Copia o valor de um nmero para outro Soma: Soma dois nmeros complexos EhReal: testa se um nmero real
Faa uma pequena aplicao para testar o seu TAD.