You are on page 1of 20

ANHANGUERA EDUCACIONAL

Faculdade Anhanguera de Valinhos - FAV


Valinhos, fevereiro de 2011

Estrutura de Dados

Prof. Dr. Marcelo Augusto Cicogna

ESTRUTURA DO CURSO
ED - AULA 2

 Cronograma de Aulas - Primeiro Bimestre


 Aula 1: Apresentao do Curso
 Aula 2: Introduo

Prof. Dr. Marcelo Augusto Cicogna

Conceito de Tipos Abstratos de Dados


Operaes com o tipo TData
Reviso de alocao dinmica de memria
Reviso de structs e modularizao de cdigo

 Aula 3: Listas

Conceito de listas simplesmente encadeadas


Conceito de listas duplamente encadeadas
Conceito de listas circulares
Operaes de insero, remoo e varredura

 Aula 4: Pilhas e Filas


Conceito de pilhas e filas
Operaes de insero, remoo e varredura

 Primeira Avaliao: 14/04/2011


2010 FAV Estrutura de Dados

CONTEDO
ED - AULA 2

Prof. Dr. Marcelo Augusto Cicogna

 Nessa Aula


Algoritmos e Estrutura de Dados

Tipos Abstratos de Dados

Exemplo Prtico: TData

Criao, alocao e liberao

Cpia, clonagem e troca de contedos

Impresso, comparao de contedos

Pr-requisitos de Linguagem C


Ponteiros (ED Aula 2B)

Structs (ED Aula 2B)

Funes (ED Aula 2B)

Modularizao de cdigo (Aula Extra)

Documentao automtica de cdigo (Aula Extra)

2010 FAV Estrutura de Dados

EDUC

PA

01-33*

01-30

MOTIVAO
ED - AULA 2

 Exemplo de Algoritmo
ALGORITMO Ordena Vetor
(Mtodo Bubble Sort)

Prof. Dr. Marcelo Augusto Cicogna

DECLARE vet[Tam] NUMRICO;


DECLARE i, j, aux NUMRICO;
PARA i=1 AT Tam-1 FAA
PARA j=i+1 AT Tam FAA
SE (vet[i] > vet[j]) ENTO
aux = vet[i];
vet[i] = vet[j]
vet[j] = aux;
FIM_SE

FIM_ALGORITMO

2010 FAV Estrutura de Dados

 Anlise do Algoritmo


Qual o objetivo?


Ordenao (crescente) de
um conjunto de nmeros
inteiros.

Como alcanar o objetivo?




Armazenar um conjunto de
valores inteiros em um vetor
com (Tam) elementos.

Realizar uma troca ordenada


de valores em funo de suas
posies e valores, focando
sempre a melhora da ordem
dos elementos.

MOTIVAO
ED - AULA 2

 Implementao de um Algoritmo (PE-I)

Prof. Dr. Marcelo Augusto Cicogna

Aula4_04

#include <stdio.h>
#define TAM 10
int main()
{ //Vetor de int de tamanho TAM.
int vet[TAM];
int i, j, aux;
for (i=0; i<TAM-1; i++)
for (j=i+1; j<TAM; j++)
if (vet[i] > vet[j])
{
aux = vet[i];
vet[i] = vet[j];
vet[j] = aux;
}
}

Problema:
E se os dados a serem ordenados
representassem registros de alunos de
uma faculdade?

2010 FAV Estrutura de Dados

MOTIVAO
ED - AULA 2

 Exemplo de Algoritmo
ALGORITMO
Crivo de Eratostenes

Prof. Dr. Marcelo Augusto Cicogna

DECLARE vet[Tam] NUMRICO;


DECLARE i, j NUMRICO;
PARA i=2 AT Tam FAA
vet[i] = 1;
PARA i=2 AT sqrt(Tam) FAA
SE (vet[i] = 1) ENTO
PARA j=i AT (j*i) Tam FAA
vet[i*j] = 0;
PARA i=2 AT Tam FAA
SE (vet[i] = 1) ENTO
ESCREVA i;

FIM_ALGORITMO

2010 FAV Estrutura de Dados

 Anlise do Algoritmo


Qual o objetivo?


Listagem de todos os
nmeros primos menores
que um nmero inteiro k.

Como alcanar o objetivo?




Armazenar em um vetor
com (k+1) elementos a
marcao de candidatos a
nmeros primos < k.

Percorrer o vetor
desmarcando as posies
mltiplas de 2, 3, 5, etc. As
posies que no forem
desmarcadas sero referentes
nmeros primos.

MOTIVAO
ED - AULA 2

 Implementao de um Algoritmo (PE-I)


Aula4_04B

Prof. Dr. Marcelo Augusto Cicogna

#include <stdio.h>
#include <math.h>
#define TAM 100
int main()
{
int i, j, vet[TAM+1];
for (i=2; i<=TAM; i++)
vet[i] = 1;
for (i=2; i<sqrt(TAM); i++)
if (vet[i])
for (j=i; (j*i)<=TAM; j++)
vet[i*j] = 0;
for (i=0; i<=TAM; i++)
if (vet[i])
printf("%d ", i);
}

2010 FAV Estrutura de Dados

MOTIVAO
ED - AULA 2

 Expresses Aritmticas
A seguinte expresso:

Prof. Dr. Marcelo Augusto Cicogna

x y

p = 2
+k
5

em uma linguagem de programao como C, convertida para:

p = 2*((x - y)/5 + k);


Note-se que o uso de parnteses ( ) necessrio para a correta
avaliao da expresso.
Problema de Sintaxe: como garantir que os parnteses estejam
corretamente agrupados?
EDUC

2010 FAV Estrutura de Dados

91-94*

MOTIVAO
ED - AULA 2

 Algoritmo Verificao da Sintaxe de Expresses


// Verificao da Sintaxe de Expresses Aritmticas.
verificaExpressao(string)
{

Prof. Dr. Marcelo Augusto Cicogna

valid = true;
s = pilha vazia;
while (no lemos a string inteira)
{
l o prximo smbolo (symb) da string;
if (symb == ( || symb == [ || symb == {)
push(s, symb);
if (symb == ) || symb == ] || symb == })
if (empty(s))
valid = false;
else
{
i = pop(s);
if (i no o correspondente iniciador de symb)
valid = false;
}
}
if (!empty(s))
valid = false;
}

EDUC
91-94*

2010 FAV Estrutura de Dados

MOTIVAO
ED - AULA 2

10

 Ordenao Topolgica
Considere um processo industrial formado por tarefas seqenciais.
1) Tarefas: 1..n

Prof. Dr. Marcelo Augusto Cicogna

2) Precedncias ( j,k ): 1..m

Exemplo
Tarefas: 1..8
Precedncias: 1..9
(1,3)
(1,2)
(5,2)
(5,8)
(3,4)
(2,6)
(8,6)
(6,7)
(7,3)

6
4

7
EDSA

2010 FAV Estrutura de Dados

47-51

MOTIVAO
ED - AULA 2

11

 Algoritmo Ordenao Topolgica


Exemplo
Tarefas: 1..8
Precedncias: 1..9
(1,3)
(1,2)
(5,2)
(5,8)
(3,4)
(2,6)
(8,6)
(6,7)
(7,3)

Algoritmo de Ordenao Topolgica


1) Crie uma lista encadeada para cada tarefa i, i = 1..n.
2) Preencha a lista i com os sucessores de i: pares (i,k).
3) No n sentinela da lista i, armazene o nmero de vezes que

Prof. Dr. Marcelo Augusto Cicogna

a tarefa i aparece como sucessor de outra tarefa: pares (k,i).


4) Percorra as listas procurando por contadores nulos. Ao
encontrar, coloque as tarefas na seqncia de ordenao
topolgica.
5) Elimine as tarefas com contadores nulos. Para os ns
sucessores destas tarefas, decremente seus contadores.

6) Repita os passos 4 e 5 at que todas as tarefas tenham sido


eliminadas.

6
4

2010 FAV Estrutura de Dados

ALGORITMOS
ED - AULA 2

12

 Introduo
Definies:

Prof. Dr. Marcelo Augusto Cicogna

Algoritmo: um algoritmo pode ser visto como uma seqncia de


aes executveis para a obteno de uma soluo para um
determinado tipo de problema (ZIVIANI, 2004).
Algoritmo: um algoritmo corresponde a uma descrio de um
padro de comportamento, expresso em termos de um conjunto
finito de aes (DIJKSTRA, 1971).
Algoritmo de Ordenao Topolgica
1

Escolha de uma
Estrutura de Dados
Adequada

6
4

1) Crie uma lista encadeada para cada tarefa i, i = 1..n.


2) Preencha a lista i com os sucessores de i: pares (i,k).
3) No n sentinela da lista i, armazene o nmero de vezes que a
tarefa i aparece como sucessor de outra tarefa: pares (k,i).
4) Percorra as listas procurando por contadores nulos. Ao
encontrar, coloque as tarefas na seqncia de ordenao
topolgica.
5) Elimine as tarefas com contadores nulos. Para os ns sucessores
destas tarefas, decremente seus contadores.

http://en.wikipedia.org/wiki/Dijkstra
2010 FAV Estrutura de Dados

6) Repita os passos 4 e 5 at que todas as tarefas tenham sido


eliminadas.

PA
01-03

ALGORITMOS
ED - AULA 2

13

 Constatao
Algoritmos e Seus Dados

Prof. Dr. Marcelo Augusto Cicogna

Nos exemplos anteriores, pode-se notar uma forte relao entre a


descrio de algoritmos e a organizao dos dados necessrios
execuo das aes do processo de soluo do problema proposto.
Geralmente, os dados de um algoritmo so interpretados como modelos
matemticos dos dados encontrados nos problemas reais.
Exemplo: para ordenar um cadastro de produtos, pode-se utilizar uma
estrutura seqencial denominada vetor, a qual armazena de forma
contnua cada elemento do conjunto de informaes (cadastro).
importante destacar que o estudo da organizao de dados, em
funo da abstrao necessria para modelar os dados da forma que
esses assumem nos problemas reais, por si s, uma fonte muito rica
de estudo de algoritmos. A esta rea do conhecimento d-se o nome
de Estrutura de Dados e seus Algoritmos.
http://en.wikipedia.org/wiki/Data_structure
2010 FAV Estrutura de Dados

EDUC

PA

01-33*

01-30

ESTRUTURAS DE DADOS
ED - AULA 2

14

 Tipos de Dados
Bsicos
Os tipos bsicos constituem as estruturas mais simples encontradas na
descrio dos algoritmos. Normalmente, fazem parte da coleo de tipos
pr-definidos de qualquer linguagem de programao. Abaixo, ilustra-se
alguns exemplos existentes nas linguagens C e Pascal.
Prof. Dr. Marcelo Augusto Cicogna

Primitivos:
inteiro (int, Integer);
caractere (char, Char);

Compostos:
real (float/double, Real);
cadeias de caractere (char*, String);
enumerados (enum, type);

Definidos pelo usurio:


Normalmente combinao dos tipos acima (struct, record).
http://en.wikipedia.org/wiki/List_of_data_structures

2010 FAV Estrutura de Dados

EDUC

PA

01-07*

24-25

ESTRUTURAS DE DADOS
ED - AULA 2

15

 Tipos de Dados
Avanados

Prof. Dr. Marcelo Augusto Cicogna

Os tipos avanados constituem-se de estruturas mais complexas que tm


por objetivo tornar mais simples a implementao de algoritmos com
determinados requisitos de organizao de seus dados.
Abaixo, citam-se algum exemplos segundo uma classificao de natureza
construtiva e funcional das estruturas (sero estudadas na disciplina de ED).
Estruturas
Lineares: vetor, matriz e listas;
Lineares Hierrquicas: filas e pilhas;
Lineares Associativas: tabelas de disperso (hash) e maps;
No Lineares: grafos e conjuntos (sets);
No Lineares Hierrquicas: rvores (binria, ternria, genrica);
http://en.wikipedia.org/wiki/List_of_data_structures
2010 FAV Estrutura de Dados

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

16

 Estrutura de Dados x Tipo Abstrato de Dados


Definies

Prof. Dr. Marcelo Augusto Cicogna

Em computao, uma Estrutura de Dados (ED) pode ser entendida como uma
forma de armazenar dados para processamento em computadores. Quanto mais
cuidadosa a escolha da estrutura de dados, mais simples e eficiente ser o
processo de implementao de um algoritmo.
Exemplo: carregar em memria um vetor de tipos definidos pelo usurio com o
contedo de um arquivo que armazena um cadastro de produtos.
Um Tipo Abstrato de Dados (TAD) uma derivao do conceito de Estrutura
de Dados com o objetivo de tornar o uso da estrutura independente das regras
internas adotadas em sua implementao. Esse objetivo alcanado com o uso de
interfaces, ou seja, um TAD define uma interface de uso, manipulao e
gerenciamento de uma Estrutura de Dados.
Exemplo: um TAD lista pode ser implementado com alocao esttica de
memria (vetor) ou com alocao dinmica, usando uma lista ligada por
ponteiros (referncias). O uso independente da regra adotada para a construo
da lista. Tudo funo da interface criada.
http://en.wikipedia.org/wiki/Data_structure
2010 FAV Estrutura de Dados

PA
63-72

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

17

 Um Exemplo Prtico
TData

Prof. Dr. Marcelo Augusto Cicogna

Nos vrios Tipos Abstratos de Dados que sero estudados na disciplina


de Estrutura de Dados, um recurso que se faz necessrio a representao
da informao que ser armazenada e gerenciada pelas estruturas de dados
e seus algoritmos.
Os TADs: vetores, listas, filas, pilhas, rvores binrias e grafos so
denominados tambm de Containers. Logo, necessrio modelar o
elemento de informao que esses tipos armazenam e gerenciam.
Por exemplo, pode-se ter um dos TAD citados anteriormente para:
Valores inteiros;
Valores reais;
Cadeias de caracteres (strings);
Tipos Definidos pelo Usurio: Aluno, Cliente, Produto, Venda, Computador.

De forma genrica, pode-se criar um TAD denominado TData, com o


objetivo de representar qualquer informao. Utiliza-se para isso o conceito
de Tipo Definido pelo Usurio (TDU) aliado idia de Tipo Abstrato
de Dados.

2010 FAV Estrutura de Dados

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

18

 Um Exemplo Prtico
TData
Conforme visto na definio de TAD, pode existir uma coleo de
procedimentos (funes) relacionadas ao gerenciamento de um TAD.
Para o exemplo TData, pode-se citar algumas funes desejveis:
TData dataCreate();
Prof. Dr. Marcelo Augusto Cicogna

dataFree(TData data);
dataPrint(TData data);
dataCopy(TData dataDest, TData dataSource);
dataSwap(TData dataA, TData dataB);
int dataComp(TData dataA, TData dataB);

Os procedimentos acima foram sugeridos em funo da experincia com o


estudo dos TADs: vetor, lista, fila, pilha, rvore e grafos.
Importante: O tipo TData facilita a implementao dos vrios TADs
estudados na disciplina Estrutura de Dados com o objetivo de facilitar a
adaptao do cdigo criado pelos estudantes em problemas reais
encontrados nos problemas reais da vida profissional.

2010 FAV Estrutura de Dados

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

19

Prof. Dr. Marcelo Augusto Cicogna

 Exemplo: TData
TData
Tipo de dado definido pelo
usurio que representa
qualquer poro de
informao de interesse dos
algoritmos de gerenciamento,
armazenamento e
manipulao de dados.
Tipo Definido pelo Usurio
Em pseudo-cdigo define-se
usando a palavra record.

 Pseudo-cdigo
record TData
{
//Tipos bsicos.
Integer intField;
Char charField;
Real realField;
String stringField;
...
//Tipos definidos pelo usurio.
TDU1 tdu1Field;
TDU2 tdu2Field;
...
}

2010 FAV Estrutura de Dados

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

20

 Exemplo: TData

 Linguagem C

Prof. Dr. Marcelo Augusto Cicogna

TData.h

TData
Tipo de dado definido pelo
usurio que representa
qualquer poro de
informao de interesse dos
algoritmos de gerenciamento,
armazenamento e
manipulao de dados.
Tipo Definido pelo Usurio
Em Linguagem C define-se
usando a palavra struct.
Utiliza-se tambm typedef
para facilitar o uso do tipo
definido.

2010 FAV Estrutura de Dados

//Constantes.
#define NOMELEN 40
//Definio do tipo TData.
typedef struct TData
{
int RG;
char* name;
int intValue;
} TData;
Note que name foi definido como um
ponteiro para char (string). Isso nos
obriga a fazer alocao de memria
para esse campo, usando a constante
NOMELEN. Veja dataCreate() na
seqncia.

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

21

 Algoritmo de Criao

Prof. Dr. Marcelo Augusto Cicogna

Create()
Criar uma varivel do tipo
TData utilizando alocao
dinmica de memria.
Observao:
Em pseudo-cdigo no se faz
diferena entre parmetros
passados por valor ou por
referncia. No entanto, no
momento da implementao em
uma linguagem de programao,
essas diferenas devem ser
devidamente analisadas.

 Pseudo-cdigo
//Algoritmo para criar uma varivel
//do tipo TData.
TData dataCreate()
{
new (data);
return (data);
}

2010 FAV Estrutura de Dados

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

22

Prof. Dr. Marcelo Augusto Cicogna

 TData: Exemplo Criao

TData.c

TData*
dataCreate()
/** Funo para a criao (alocao dinmica) de uma varivel TData.
<I>Importante: essa funo deve ser alterada se TData for modificado.</I>
@return Ponteiro para a varivel TData alocada em memria.
Em caso de falha retorno igual a NULL.
@version 1.01
Caso o tipo TData sofra alguma alterao para se
@author Marcelo Augusto Cicogna
adequar a um novo problema, somente o cdigo
*/
compreendido pelos comentrios ALT e Fim ALT
{
devem sofrer ateno do desenvolvedor.
//Alocao da varivel TData.
Essa estratgia torna fcil dar manuteno ao
TData* pData = malloc(sizeof(TData));
cdigo, ou mesmo adapt-lo para um novo
if (pData)
problema com um novo modelo de dados.
{ //Alocao do vetor name.
//ALT: incio do cdito a ser alterado caso exista mudana em TData.
pData->name = malloc(SIZENAME*sizeof(char));
//Fim ALT.
}
return (pData);
}

2010 FAV Estrutura de Dados

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

23

 Algoritmo de Liberao

 Pseudo-cdigo

Prof. Dr. Marcelo Augusto Cicogna

Free()
Liberar a memria alocada
para um varivel do tipo
TData.
Observao:
Em funo dos campos declarados
em TData, pode ser necessrio a
liberao de memria para campos
que necessitam de alocao no
momento da criao da varivel
TData. Exemplo: um vetor com
dimenso definida no momento de
sua criao.

//Algoritmo para liberar a memria


//alocada para uma varivel TData.
dataFree(TData data)
{
delete (data);
}

2010 FAV Estrutura de Dados

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

24

Prof. Dr. Marcelo Augusto Cicogna

 TData: Exemplo Liberao

TData.c

void
dataFree(TData* pData)
/** Funo para a liberao de memria alocada para uma varivel TData.
<I>Importante: essa funo deve ser alterada se TData for modificado.</I>
@param pData ponteiro para varivel a ser liberada da memria.
@version 1.01
@author Marcelo Augusto Cicogna
*/
{
if (pData)
{ //ALT: incio do cdito a ser alterado caso exista mudana em TData.
free (pData->name);
//Fim ALT.
free (pData);
Note que a funo dataFree() depende das
}
alocaes de memria feitas em dataCreate().
}

2010 FAV Estrutura de Dados

Assim como visto antes, caso o tipo TData sofra


alguma alterao para se adequar a um novo
problema, somente o cdigo compreendido pelos
comentrios ALT e Fim ALT devem sofrer
ateno do desenvolvedor.

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

25

 Exemplo de uso: dataCreate() e dataFree()


int
main(int argc, char *argv[])
{
TData* pDataA;
//Teste da funo de criao (alocao).
printf("Criando variavel DataA...\n");
pDataA = dataCreate();

MainData.c

Observe que o cdigo de


exemplo ao lado, ao utilizar as
funes dataCreate() e
dataFree() para criar e liberar
memria de variveis do tipo
TData, no faz nenhum tipo de
uso das caractersticas
internas do tipo TData.

Prof. Dr. Marcelo Augusto Cicogna

Qual o benefcio? Se fosse


necessrio alterar o tipo TData
//Teste da funo de preenchimento com dados default. como, por exemplo, adicionar
printf("Valores default para DataA...\n");
um novo campo, o cdigo ao
lado no sofreria nenhuma
dataDefault(pDataA);
alterao.
//Teste da funo de liberao de memria.
printf("Liberando memoria alocada para as variaveis TData...\n");
dataFree(pDataA);
printf("\n\n");
system("PAUSE");
return (0);
}

2010 FAV Estrutura de Dados

MODULARIZAO
ED - AULA 2

26

 Estrutura dos Mdulos para TData

TData.h

Prof. Dr. Marcelo Augusto Cicogna

TData.c
#include TData.h

MainData.c
#include TData.h

Antes de comear a resolver os exerccios, crie


uma pasta para o seu cdigo na disciplina de
Estrutura de Dados:
CodigoAulas
Nessa pasta, crie uma subpasta:
CodigoAulas\Comum
Nessa pasta, crie trs arquivos:
CodigoAulas\Comum\TData.h
CodigoAulas\Comum\TData.c
CodigoAulas\Comum\MainData.h
Por fim, crie um projeto do tipo Console no
DEV C++ (ou outro compilador que estiver
usando) e salve o arquivo com o seguinte
nome:
CodigoAulas\Comum\PrjTData.dev
Para preencher os arquivos criados,
basta seguir as indicaes colocadas nos
cantos superiores direitos dos exemplos.

Pasta Comum

2010 FAV Estrutura de Dados

TRABALHANDO COM PROJETOS


ED - AULA 2

27

Prof. Dr. Marcelo Augusto Cicogna

 Organize seu Cdigo

2010 FAV Estrutura de Dados

MODULARIZAO
ED - AULA 2

28

Prof. Dr. Marcelo Augusto Cicogna

 Tipo Abstrato de Dados: TData.h

TData.h

//-----------------------------------------------------------------------------#ifndef TDataH
#define TDataH
//-----------------------------------------------------------------------------/* Constantes. */
#define SIZERG 6
#define SIZENAME 40
#define SIZEINT 4
//-----------------------------------------------------------------------------/** Definio de TData como um Tipo Abstrato de Dados para uso em outros mdulos. */
typedef struct TData
{
int RG;
char* name;
int intValue;
} TData;
//-----------------------------------------------------------------------------/* Funes de manipulao do tipo TData. */
TData* dataCreate();
TData* dataCreateFields(int RG, char* name, int intValue);
void dataSetFields(TData* pData, int RG, char* name, int intValue);
void dataFree(TData* pData);
No arquivo TData.h vo todas
void dataDefault(TData* pData);
as declaraes de constantes,
void dataRand(TData* pData);
tipos definidos pelo usurio,
void dataPrint(TData* pData);
funes, e procedimentos.
void dataPrintHeader();
int dataCopy(TData* pDataDest, TData* pDataSource);
TData* dataClone(TData* pDataSource);
A lista de funes ao lado foi
void dataSwap(TData* pDataA, TData* pDataB);
feita baseando-se nos exerccios
int dataComp(TData* pDataA, TData* pDataB, int idField);
da Primeira Lista.
//-----------------------------------------------------------------------------#endif

2010 FAV Estrutura de Dados

MODULARIZAO
ED - AULA 2

29

Prof. Dr. Marcelo Augusto Cicogna

 Tipo Abstrato de Dados: TData.c


//-----------------------------------------------------------------------------// Estrutura de Dados
//
// Ttulo: Primeira Lista de Exerccios
// Assunto: Tipos Abstratos de Dados: TData
//
// Aluno(s):
RA:
//
Marcelo Augusto Cicogna
000000
//
// Data: 09/02/2007
//-----------------------------------------------------------------------------#include TData.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//-----------------------------------------------------------------------------// Funces de manipulao do tipo TData.
//-----------------------------------------------------------------------------TData*
dataCreate()
/** Funo para a criao (alocao dinmica) de uma varivel TData.
<I>Importante: essa funo deve ser alterada se TData for modificado.</I>
@return Ponteiro para a variavel TData alocada em memria.
Em caso de falha retorno igual a NULL.
@version 1.01
@author Marcelo Augusto Cicogna
*/
{
//Alocao da varivel TData.
TData* pData = malloc(sizeof(TData));
if (pData) ...

TData.c

No arquivo TData.c vo todas


as definies de constantes,
tipos definidos pelo usurio,
funes, e procedimentos.
importante fazer o primeiro
include do prprio mdulo, ou
seja, nesse caso:
#include TData.h
O cdigo abaixo demonstra
apenas o incio da funo
dataCreate(). As demais
funes seriam implementadas
na seqncia.

2010 FAV Estrutura de Dados

MODULARIZAO
ED - AULA 2

30

 Roteiro para Comear o Mdulo TData


a) Se voc tem dvidas de como implementar e usar um mdulo em linguagem C, primeiro
estude um pouco o material da aula Extra "AulaExtraMod.pdf";

Prof. Dr. Marcelo Augusto Cicogna

b) No arquivo "Ed Aula02.pdf", estude primeiro o Slide 26. Crie as pastas e os arquivos. Dica:
no mude os nomes usados para ter mais rapidez em usar o cdigo j pronto;
c) Para preencher o contedo total do arquivo "TData.h", utilize o Slide 28. Voc pode copiar e
colar direto do arquivo PDF. Se fizer isso, seja caprichoso, em manter a tabulao original
apresentada no Slide 28. E mais, leia o que voc copiou e colou. Tente entender as pores
do cdigo e traga suas dvidas para a prxima aula;
d) Para preencher o contedo inicial do arquivo "TData.c", utilize o Slide 29. Note que o
arquivo no est completo. Para terminar o trabalho, utilize as funes apresentadas nos
Slides 22 e 24. Voc pode copiar e colar, como no passo anterior. Mais uma vez, seja
caprichoso e refaa a tabulao perdida, lendo com ateno o cdigo que voc copiou/colou;
e) Para preencher o contedo completo do arquivo "MainData.c", utilize o Slide 25.
IMPORTANTE: este arquivo tambm precisa de um cabealho, mas vou deixar essa tarefa
para vocs;
f) No arquivo "MainData.c" est faltando alguns comandos "#include". Vou deixar de
exerccio vocs descobrirem o que est faltando, mas uma dica que a resposta est no
Slide 29.

2010 FAV Estrutura de Dados

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

31

 Algoritmo de Troca

Prof. Dr. Marcelo Augusto Cicogna

Swap()
Troca (swap) de contedo
entre duas variveis do tipo
TData.
Observao:
Em funo dos campos declarados
em TData, pode ser necessrio a
alocao de memria antes de
atribuir valores s variveis. Para
isso, veja na Lista de Exerccios 1 a
funo dataCopy().

 Pseudo-cdigo
//Algoritmo para trocar o contedo
//de duas variveis TData.
dataSwap(TData dataA, dataB)
{
TData dataAux;
dataAux := dataA;
dataA
:= dataB;
dataB
:= dataAux;
}

2010 FAV Estrutura de Dados

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

32

Prof. Dr. Marcelo Augusto Cicogna

 TData: Exemplo Troca de Contedos

TData.c

void
dataSwap(TData* pDataA, TData* pDataB)
/** Funo para a troca (<I>swap</I>) de contedo de variveis TData.
@param pDataA ponteiro para a primeira varivel para a troca.
@param pDataB ponteiro para a segunda varivel para a troca.
@see
#dataCreate dataCreate()
@see
#dataCopy dataCopy()
@see
#dataFree dataFree()
Observe que o cdigo de
@version 1.01
exemplo ao lado, ao utilizar as
funes dataCreate() ,
@author Marcelo Augusto Cicogna
dataCopy() e dataFree(), no
*/
faz nenhum tipo de uso das
{
caractersticas internas do
TData* pDataAux = dataCreate();
tipo TData.
if (pDataA && pDataB && pDataAux)
Qual o benefcio? Se fosse
{
necessrio alterar o tipo TData
dataCopy(pDataAux, pDataA);
como, por exemplo, adicionar
dataCopy(pDataA,
pDataB);
um novo campo, o cdigo ao
dataCopy(pDataB,
pDataAux);
lado no sofreria nenhuma
dataFree(pDataAux);
alterao.
}
}

2010 FAV Estrutura de Dados

EXERCCIOS EM LABORATRIO
ED - AULA 2

33

2) Introduo a Tipos Abstratos de Dados


 Resolver os exerccios 01 a 05 da lista de exerccios ED Lista1.
 As funes devem fazer parte de um mdulo de dados e funes
constitudo de um arquivo de cabealho denominado TData.h e um
arquivo de cdigo fonte denominado TData.c.

Prof. Dr. Marcelo Augusto Cicogna

Ttulo: Primeira Lista de Exerccios


Assunto: Tipos Abstratos de Dados: TData
Entrega: 07/04/2011
Observaes:
O trabalho em grupo de no mximo trs alunos.
O aluno deve entregar uma verso impressa do cdigo fonte dos exerccios (arquivos
MainData.c TData.c e TData.h) devidamente preenchidos conforme as normas de
formatao (ED Aula 01).
A correo ser em forma de sorteio. Apenas um exerccio ser corrigido.
Os alunos que entregarem trabalhos que sejam cpia de outros sero registrados pelo
professor para adoo de descontos na nota do exerccio e em futuras atividades de correo
de outros exerccios, trabalhos computacionais e provas.

2010 FAV Estrutura de Dados

FORMATAO DE TRABALHOS
ED - AULA 2

34

Prof. Dr. Marcelo Augusto Cicogna

 Capa Padro


Entregar com Capa Padro


(arquivo ED Trabalho Capa
Padro.doc).

O Ttulo e o Assunto so
sempre fornecidos pelo
professor.

Ao editar o arquivo .doc,


no altere os formatos prdeterminados.

Para a impresso do cdigo


fonte, sugere-se usar o
prprio Code::Blocks. No
use o Word para isto.

2010 FAV Estrutura de Dados

FORMATAO DE TRABALHOS
ED - AULA 2

35

 Cabealho Padro


Se o trabalho for modularizado, colocar cabealho padro em


cada arquivo .c a ser entregue. No coloque em .h

Prof. Dr. Marcelo Augusto Cicogna

Cabealho

//----------------------------------------------------------------// Estrutura de Dados


//
// Ttulo: (fornecido pelo professor)
// Assunto: (fornecido pelo professor)
//
// Aluno(s):
RA:
//
Marcelo Augusto Cicogna
000000
//
Marcelo Augusto Cicogna
000000
//
...
//Data: xx/xx/xxxx
//-----------------------------------------------------------------

2010 FAV Estrutura de Dados

EXERCCIOS PRTICOS
ED - AULA 2

36

3) Introduo a Tipos Abstratos de Dados


 Resolver os exerccios 06 a 12 da lista de exerccios ED Lista1.
 As funes devem fazer parte de um mdulo de dados e funes
constitudo de um arquivo de cabealho denominado Data.h e um
arquivo de cdigo fonte denominado Data.c.

Prof. Dr. Marcelo Augusto Cicogna

Ttulo: Primeira Lista de Exerccios


Assunto: Tipos Abstratos de Dados: TData
Entrega: 14/04/2011
Observaes:
O trabalho em grupos de no mximo trs alunos.
O aluno deve entregar uma verso impressa do cdigo fonte dos exerccios (arquivos
MainData.c TData.c e TData.h) devidamente preenchidos conforme as normas de
formatao (ED Aula 01).
A correo ser em forma de sorteio. Apenas um exerccio ser corrigido.
Os alunos que entregarem trabalhos que sejam cpia de outros sero registrados pelo
professor para adoo de descontos na nota do exerccio e em futuras atividades de correo
de outros exerccios, trabalhos computacionais e provas.

2010 FAV Estrutura de Dados

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

37

Prof. Dr. Marcelo Augusto Cicogna

 Primeira Lista de Exerccios: MainData.c 1/3

MainData.c

int
main(int argc, char *argv[])
/** Funo principal do projeto para exemplo de <B>Tipos Abstratos de Dados</B>.
Teste das funes de manipulao do tipo TData.
@see <a href= {@docroot}/Doc/projects/Data/(Data__globals).html>Mdulo
TData</a>
@author Marcelo Augusto Cicogna
*/
{
TData* pDataA;
TData* pDataB;
//Teste da funo de criao (alocao).
printf("Criando variavel DataA...\n");
pDataA = dataCreate();
//Teste da funo de preenchimento com dados default.
printf("Valores default para DataA...\n");
dataDefault(pDataA);
...

2010 FAV Estrutura de Dados

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

38

 Primeira Lista de Exerccios: MainData.c 2/3

Prof. Dr. Marcelo Augusto Cicogna

//Teste da funo de impresso.


printf("Imprimindo DataA...\n");
printf("DataA: "); dataPrint(pDataA);
printf("\n\n");
//Teste da funo de criao (alocao) com parametros.
printf("Criando e imprimindo variavel DataB com parametros...\n");
pDataB = dataCreateFields(123456, "Marcelo Augusto Cicogna", 1);
printf("DataB: ");dataPrint(pDataB);
printf("\n\n");
//Teste da funo de cpia: pDataA := pDataB.
printf("Copiando DataB em DataA e imprimindo...\n");
dataCopy(pDataA, pDataB);
printf("DataA: "); dataPrint(pDataA);
printf("\n\n");
...

2010 FAV Estrutura de Dados

MainData.c

TIPOS ABSTRATOS DE DADOS


ED - AULA 2

39

 Primeira Lista de Exerccios: MainData.c 3/3


//Teste da funo de preenchimento aleatrio em pDataB.
printf("Preenchendo DataB com dados aleatorios...\n");
dataRand(pDataB);
printf("DataB: "); dataPrint(pDataB);
printf("\n\n");

Prof. Dr. Marcelo Augusto Cicogna

//Teste da funo de preenchimento aleatrio em pDataB.


printf("Trocando o conteudo de DataA pelo conteudo de DataB...\n");
dataSwap(pDataA, pDataB);
printf("DataA: "); dataPrint(pDataA); printf("\n");
printf("DataB: "); dataPrint(pDataB); printf("\n");
printf("\n\n");
//Teste da funo de liberao de memria.
printf("Liberando memoria alocada para as variaveis TData...\n");
dataFree(pDataA);
dataFree(pDataB);
printf("\n\n");
system("PAUSE");
return (0);
}

2010 FAV Estrutura de Dados

MainData.c

You might also like