Você está na página 1de 5

Estrutura de Dados 1

1. Introduo

O mundo tem mudado rapidamente graas ajuda dos computadores. Podemos citar as
pesquisas espaciais, o projeto genoma, os simuladores de vo, entre tantos outros. No
entanto, ainda ocorrem limitaes fsicas importantes relacionadas ao volume de
informaes e capacidade de processamento. Nem tudo que vemos ou sentimos pode ser
representado por em um computador. Devido as tais limitaes, necessrio abstrairmos a
nossa realidade para que possamos capturar o que existe de mais relevante em uma situao
real tornando assim possvel a construo de modelos que possam ser implementados em
computador por meio de uma linguagem de programao. Para a construo de bons
modelos necessrio um bom conhecimento dos detalhes que compem a situao real, ser
capaz de express-los por meio de uma estrutura de dados adequada e desenvolver um
algoritmo adequado que atue sobre esta estrutura de dados.
A elaborao adequada de estrutura de dados e os algoritmos correspondentes o que
propiciar o desenvolvimento de programas de computadores:

programas = estrutura de dados + algoritmos

1.1. Tipo de Dados Abstratos (TDA)

Um tipo abstrato de dados pode ser definido como um modelo matemtico pelo par (V,O)
onde V o conjunto de valores e O o conjunto de operaes que atuam sobre esses
valores. As operaes devem ser consistentes com os tipos dos valores.
Neste contexto o termo abstrato significa independncia de implementao, isto , no
considera as limitaes fsicas do computador relativas a questes de eficincia ( tempo de
processamento, ocupao de memria).

A idia fundamental do tipo abstrato de dados abstrato possibilitar ao programador


a separao do conceito (o que fazer) da implementao ( de como fazer).
A separao da definio do TDA de sua implementao permite que uma mudana
de implementao no altere o programa que usa o TDA.

O TDA compilado separadamente e uma mudana de implementao fora a


recompilao apenas do mdulo envolvido.

A Figura 1.1 mostra um esquema de um TDA. Observamos que a interao entre a estrutura
de dados e suas respectivas operaes ficam invisveis e inacessveis para o usurio.
Somente a descrio dos valores e o conjunto de operaes do TDA ficam visveis ao
usurio.

1
estrutura de dados

dados dados

funo A funo B

Figura 1.1 Esquema de um tipo abstrato de dados

Um TDA torna-se um Tipo de Dados Concreto ( ou simplesmente Tipo de Dados) atravs


do processo de implementao, veja Figura 1.2. Por exemplo, o TDA nmeros inteiros
definida tal que V = o conjunto de todos os nmeros inteiros (....., -2,-1, 0, 1, 2, ....) e
O = {+,-,/,*,^} que podem atuar sobre este conjunto. No entanto, as limitaes fsicas de
memria de um computador no permitem a representao de todo o conjunto de nmeros
inteiros. O tipo de dados inteiro contemplar um nvel suficiente de abstrao dos nmeros
inteiros nos computadores ( em geral, no intervalo de -32.768 a 32.767).

Exemplos de tipos de dados bsicos na linguagem C: int, float, double, char .


Exemplos de tipos de dados complexos em C: ponteiros, vetores uni, bi e multi-
dimensionais, string de caracteres, tipos estruturados.

Implementao

Tipo de Dados Tipo de Dados Concreto


Abstrato

Figura 1.2 Tipo de Dado Concreto

1.2 Estrutura de dados

Pode ser definida como agrupamentos de informaes com um significado completo que
normalmente so representados em estruturas de arranjos de dados, ou para as quais possam
ser definidas operaes prprias de conjuntos, tais como unio e interseco, ou ordenao
e tratamento de repetio de valores (listas, filas, pilhas );

1.3 Descrio de um tipo de dado abstrato

Usaremos um formato especfico para descrever um TDA que inclui um cabealho com o
nome da TDA, uma descrio do tipo do dado e uma lista de operaes, veja Figura 1.3.
Para cada operao so especificados:

2
- as entradas necessrias para executar a operao;
- as pr-condies que devem ser verificadas antes de executar a operao;
- o processo que deve ser executado;
- as sadas que devem ser obtidas aps a execuo do processo e retornadas da operao;
- as ps-condies, que indicam quaisquer alteraes que a execuo da operao em
questo causou no dado.

TDA nome-TDA :

dados: domnio do dado

operaes:
operao 1:
entradas:
pr-condio:
processo:
sada:
ps-condio:

operao 2:
.
.
.
operao n:

fim TDA nome-TDA

Figura 1.3 Especificao de um TDA

Exemplo: Descreva o tipo de dados abstrato nmeros racionais (qualquer nmero que possa
ser expresso como quociente de dois inteiros, ex: 1/2, 3, 3/4), considerando que as seguintes
operaes possam ser executadas sobre este conjunto:
a) multiplica;
b) soma;

3
TDA nro_racional :

dado: consiste de dois inteiros, o primeiro o numerador e o segundo o denominador

operaes:
multiplica:
entradas: quatro nmeros inteiros sendo que cada par de nmeros represen-
ta um nmero racional (n1/d1, n2/d2)
pr-condio: os dois nmeros devem ser vlidos, isto , d1 e d2 devem ser
diferentes de zero
processo: se a pr-condio foi atendida calcular a multiplicao de
dois nmeros racionais: nr = n1*d1 e dr = d1*d2
sada: se a pr-condio foi atendida retorna o resultado da multiplica (nr/dr)
caso contrrio retorna um nro racional 0/0
ps-condio: nenhuma

soma:
entradas: quatro nmeros inteiros sendo que cada par de nmeros represen-
ta um nmero racional (n1/d1, n2/d2)
pr-condio: os dois nmeros devem ser vlidos, isto , d1 e d2 devem ser
diferentes de zero
processo: se a pr-condio foi atendida, somar os dois nmeros racionais
O numerador do nro resultante obtido por: nr = n1*d2+n2*d1
O denominador do nro resultante obtido por: dr = d1*d2
sada: se a pr-condio foi atendida retorna o resultado da soma (nr/dr)
caso contrrio retorna um nro racional 0/0
ps-conido: nenhuma

fim TDA nro_racional

1.4 Implementao de um TDA

O TDA deve ser implementado de forma independente do programa de aplicao. O


mdulo contendo as funes do TDA deve ser armazenado em um arquivo com o nome do
TDA sendo implementado com extenso .c. Todas as funes do TDA em questo devem
ser declaradas num arquivo cabealho com extenso .h para que sejam conhecidas por
outros mdulos.

O programa principal, e as funes implementadas so compiladas separadamente e depois


lligadas de tal forma a juntar todos os arquivos objetos em um nico arquivo executvel:

Para efeito de exemplo, considere um programa principal prog1.c e um TDA implementado


em tda.c e cujas funes foram declaradas em tda.h

4
O programa principal deve incluir a diretiva #include "tda.h" para que este possa conhecer
as funes implementadas em tad.c
Note que os arquivos de cabealho das funes da biblioteca padro do C so includos na
forma de #include <arq.h>, enquanto que os arquivos de cabealho dos mlulos
implementados so includos da forma #include "arq.h". O uso de delimitadores diferentes
servem para indicar onde o compilador deve procurar esses arquivos cabealho durante a
compilao.

Cada modulo dever ser compilado da seguinte forma:


gcc -c tda.c
gcc -c prog1.c
gcc -o prog.exe prog1.o tda.o

Exerccio:

Declare as funes da TDA em racional.h

o arquivo de cabealho racional.h deve ter o seguinte contedo:

/* a funo soma retorna um nmero racional, resultado da soma de dois nros racionais
racional
racional soma(racional, racional);

/* a funo multiplica retorna um nmero racional, resultado da multiplicao de dois nros


racionais
racional multiplica(racional, racional);

Implemente o TDA nro_racional em C e armazene as funes implementadas no arquivo


racional.c

Implemente um programa que use o tipo de dado nro_racional. Para tanto, no inicio do
programa no esquea de incluir a diretiva #include "racional.h"

Você também pode gostar