Você está na página 1de 13

Estrutura de dados

Aula 1

Programa
Um programa pode ser visto como a especificao formal da soluo de um problema. programa = algoritmo + estruturas de dados onde: o algoritmo contm a lgica do programa e os dados so organizados em estruturas de dados.

Estrutura de dados
A qualidade da soluo de um problema depende, entre outros fatores, da forma como esto organizados os dados relevantes. Estruturas de dados so formas genricas de se estruturar informao de modo a serem registradas e processadas pelo computador. Ex.:
lista ordenada; vetores; rvores; grafos, etc.

Contudo estas s adquirem significado quando associadas a um conjunto de operaes, que visam, de um modo geral, manipullas (algoritmos).

Tipo de Dados
Embora os termos tipo de dado, estrutura de dados e tipo abstrato de dados em essncia se refiram aos mesmos objetos formais, eles so usados em contextos prprios. O termo tipo de dado usado no contexto de uma linguagem de programao (tipos primitivos) e est associado a um mtodo de interpretar um padro de bits.

Tipo Abstrato de Dados


O termo tipo abstrato de dado (TAD) denota um modelo junto com um conjunto de operaes definidas sobre o modelo. (tipo + operaes validas). Por fim, estrutura de dados uma forma concreta de se implementar um TAD, ou seja, uma representao computacional do modelo matemtico em questo.

Tipos de Dados
Define a forma como um dado deve ser armazenado ou recuperado, bem como os possveis valores que ele pode assumir e as operaes que podem ser efetuadas sobre os mesmos.
Exemplo em Pascal:
integer - permite valores inteiros e operaes de adio, multiplicao, subtrao e diviso; string - permite valores literais e operaes de concatenao;

Obs. Esses tipos esto intrinsecamente relacionados com o hardware.

Tipo Abstrato de Dados (TAD)


Um tipo abstrato de dados (TAD) a especificao matemtica de um conjunto de dados e das operaes que podem ser executadas sobre esses dados. O conceito de tipo de dado abstrato dissociado do hardware. TAD define o que cada operao faz, mas no como faz. Assim, um mesmo tipo abstrato de dados pode ser concretizado (ou implementado) de diversas formas.

Tipo Abstrato de Dados (TAD)


TADs so materializados pelas estruturas de dados.
Lista Encadeada (implementao com referncias) Lista com alocao esttica (implementao usando array)

Estruturas de dados so formas genricas de se estruturar informao de modo a serem registradas e processadas pelo computador. Contudo, estas s adquirem significado quando associadas a um conjunto de operaes, que visam, de um modo geral, manipul-las (algoritmos).

TAD 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

TAD: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.

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); }

int main(int argc, char *argv[]) { ContaBancaria conta1; Inicializa(&conta1,918556,300.00); printf("\n Antes da movimentacao: \n"); Imprime(conta1); Deposito(&conta1, 50.00); Saque(&conta1, 70.00); printf("\n Depois da movimentacao: \n"); Imprime(conta1); getch(); }

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);

Você também pode gostar