Escolar Documentos
Profissional Documentos
Cultura Documentos
Abstrato de Dados
Gisele Pappa
glpappa@dcc.ufmg.br
Qual a diferença entre um
algoritmo e um programa?
Algoritmos e Estrutura de
Dados II
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 Algoritmos e Estrutura de
Dados II
Representação dos Dados
• Dados podem ser representados de
diferentes maneiras
• A escolha da representação é determinada
pelas operações que serão utilizadas sobre
eles
Exemplo: números inteiros
q Representação por palitinhos: II + IIII = IIIIII
q Boa para pequenos números (operação simples)
q Representação decimal: 1278 + 321 = 1599
q Boa para números maiores (operação complexa)
Algoritmos e Estrutura de
Dados II
Programas
• Um programa é uma formulação concreta de
um algoritmo abstrato, baseado em
representações de dados específicas
• Os programas são feitos em alguma
linguagem que pode ser entendida e
seguida pelo computador
Linguagem de máquina
Linguagem de alto nível (uso de compilador)
Aqui vamos utilizar a Linguagem C
Algoritmos e Estrutura de
Dados II
Tipos Abstratos de Dados
(TADs)
• Agrupa a estrutura de dados juntamente com as
operações que podem ser feitas sobre esses
dados
• TAD encapsula a estrutura de dados.
• Os usuários do TAD só tem acesso a algumas
operações disponibilizadas sobre esses dados
Usuário do TAD x Programador do TAD
Usuário só “enxerga” a interface, não a implementação
struct Aluno {
string nome; Pedro
al:
int matricula; 200712 A
char conceito;
};
Pedro
aux:
main() { 200712 A
struct Aluno al, aux;
al.nome = “Pedro”
al.matricula = 200712;
al.conceito = ‘A’;
aux = al;
Algoritmos e Estrutura
} de Dados II
Declaração de Tipos
• Para simplificar, uma estrutura ou mesmo
outros tipos de dados podem ser definidos
como um novo tipo
• Uso da construção typedef
typedef struct { int main() {
string nome; TipoAluno al;
int matricula; Vetor v;
char conceito;
} TipoAluno; ...
}
Deposito(conta1, 50.00);
Saque(conta1, 70.00);
return(0);
}
Algoritmos e Estrutura de Dados II
Alocação Dinâmica
Memória Estática Heap
0x214
0x016 conta1 LIXO 0x218
0x222
0x226
0x230
0x234
conta1 é um apontador para 0x238
ContaBancaria 0x242
0x246
Deposito(conta1, 50.00);
Saque(conta1, 70.00);
return(0);
}
Algoritmos e Estrutura de Dados II
ContaBancaria.c
#include <stdio.h>
#include "Contabancaria.h"
Heap
Memória Estática
0x214
0x016 conta1 LIXO 0x218
0x222
conta 0x016
0x226
0x230
num 918556
0x234
saldo 300.00 0x238
0x242
0x246
Algoritmos e Estrutura de Dados II
ContaBancaria.c
#include <stdio.h>
#include "Contabancaria.h"
Heap
Memória Estática
0x214
0x016 conta1 LIXO 0x218
0x222
conta 0x016
0x226
0x230
num 918556
0x234
saldo 300.00 0x238
0x242
0x246
Algoritmos e Estrutura de Dados II
Alocação Dinâmica
Inicializa(&conta1, 918556, 300.00);
Heap
Memória Estática
0x214
0x016 conta1 LIXO 0x218
0x222
conta 0x016
0x226
0x230
num 918556
0x234
saldo 300.00 0x238
0x242
0x246
Algoritmos e Estrutura de Dados II
ContaBancaria.c
#include <stdio.h>
#include "Contabancaria.h"
Heap
Memória Estática
0x214
0x016 conta1 0x230 0x218
0x222
conta 0x016
0x226
0x230
num 918556
0x234
saldo 300.00 0x238
0x242
0x246
Algoritmos e Estrutura de Dados II
ContaBancaria.c
#include <stdio.h>
#include "Contabancaria.h"
Heap
Memória Estática
0x214
0x016 conta1 0x230 0x218
0x222
conta 0x016
0x226
918556
300 0x230
num 918556
0x234
saldo 300.00 0x238
0x242
0x246
Algoritmos e Estrutura de Dados II
Apontadores para Tipos Estruturados
n Apontadores podem ser utilizados com tipos
estruturados. Isso é muito comum na criação de
estruturas encadeadas (listas, filas, etc...)
typedef struct {
int idade;
double salario;
} TRegistro;
...
TRegistro *a;
...
a = (TRegistro *) malloc(sizeof(TRegistro));
a->idade = 30; // equivalente: (*a).idade
a->salario = 80;
Algoritmos e Estrutura de Dados II
Exemplo
• Declare um TipoRegistro, com os campos:
• a: inteiro
• b: apontador para char
• Crie dinamicamente uma váriavel do
TipoRegistro e atribua os valores 10 e ‘x’
aos seus campos