Вы находитесь на странице: 1из 18

Tipos Abstratos de Dados

Prof. Jussara Almeida

Derivado das transparncias do 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 30

Implementao por Vetores:

void Insere(int x, Lista L) {


for(i=0;...) {...}
L[0] = x;
}

Programa usurio do TAD:


int main() {
Lista L;
int x;
x = 20;
FazListaVazia(L);
Insere(x,L);
...

Implementao por Listas Encadeadas


20

13

02

30

void Insere(int x, Lista L) {


p = CriaNovaCelula(x);
L^.primeiro = p;
...
}
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;
};

al:

main() {
struct Aluno al, aux;
al.nome = Luiz
al.matricula = 200712;
al.conceito = A;
aux = al;
printf(%s, aux.nome);

aux:

Luiz
200712

Luiz
200712

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 typedef
typedef struct {
char nome[100];
int matricula;
char conceito;
} TipoAluno;

int main() {
TipoAluno al;
Vetor v;
...
}

typedef int[10] Vetor;

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 tipo
typedef struct {
int numero;
double saldo;
} ContaBancaria;
// cabealho das funes
void 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 <stdio.h>
#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 <stdio.h>
#include <stdlib.h>
#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.

Algoritmos e Estrutura de Dados II

Prof. Luiz Chaimowicz

Вам также может понравиться