Você está na página 1de 31

Estruturas de Dados

Profa. Juliana Pinheiro Campos

ESTRUTURAS DE DADOS

Tipos estruturados

Tipos abstratos de dados (TAD)

ESTRUTURAS DE DADOS

Tipos estruturados

Estrutura (Struct): campos compostos de vrios


valores de tipos mais simples.

Forma geral:
struct nome_estrutura {
// declarao de campos necessrios para representar
a estrutura
};

ESTRUTURAS DE DADOS

Tipos estruturados

Exemplo:
struct ponto {
float x;
float y;
};

ESTRUTURAS DE DADOS

Tipos estruturados

Declarao de variveis do tipo estrutura:


struct nome_estrutura nome_varivel;

Exemplo:
struct ponto p;

ESTRUTURAS DE DADOS

Tipos estruturados

Operador de acesso (.)


p.x = 10.0;
p.y = 5.0;

Inicializa os campos x e y da estrutura ponto com 10.0 e


5.0 respectivamente.

ESTRUTURAS DE DADOS

Tipos estruturados

O acesso ao endereo de um campo da estrutura:


&(p.x)

&p.x

O operador de acesso ao campo (.) tem


precedncia sobre o operador endereo de
(&).

ESTRUTURAS DE DADOS

Tipos estruturados

Exemplo de captura e impresso de pontos

int main (void) {


struct ponto p;
printf("Digite as coordenadas do ponto(x y): ");
scanf("%f %f", &p.x, &p.y);
printf("O ponto fornecido foi: (%.2f,%.2f)\n", p.x, p.y);
return 0;
}

ESTRUTURAS DE DADOS

Tipos estruturados

Ponteiro para estruturas:


struct nome_estrutura *nome_ponteiro;

Exemplo:

struct ponto *pp;

ESTRUTURAS DE DADOS

Tipos estruturados

Acessando campos de estrutura a partir de


ponteiros:
(*pp).x = 12.0;

pp->x = 12.0;

Parnteses so necessrios pois o operador


contedo de (*) tem precedncia menor do que o
operador de acesso.

ESTRUTURAS DE DADOS

Tipos estruturados

Passagem de estruturas para funes:


void imprime (struct ponto p)
ou
void imprime (struct ponto * pp) ???

Melhor passar apenas o ponteiro para a funo, pois


copiar o ponteiro para a pilha de execuo mais
eficiente do que copiar a estrutura inteira.

ESTRUTURAS DE DADOS

Tipos estruturados

Exemplo de passagem de estrutura para funo:

void imprime (struct ponto* pp) {


printf("O ponto fornecido foi: (%.2f,%.2f)\n", pp->x,
pp->y);
}
void captura (struct ponto* pp) {
printf("Digite as coordenadas do ponto(x y): ");
scanf("%f %f", &pp->x, &pp->y);
}
Como ficaria a funo main para leitura e impresso de um ponto???

ESTRUTURAS DE DADOS

Tipos estruturados

Alocao dinmica de estruturas:


struct ponto *pp;
pp = (struct ponto *) malloc(sizeof(struct ponto));

ESTRUTURAS DE DADOS

Tipos estruturados

Definio de novos tipos:

C permite criar nomes de tipos usando typedef.

Exemplos:

typedef float Real;


typedef struct ponto Ponto;
struct ponto p;

// Real sinnimo de float


// Ponto sinnimo de struct
ponto

Ponto p;

// declarao de
ponto

ESTRUTURAS DE DADOS

Tipos estruturados

Outra forma de criar nome de tipo:


typedef struct ponto {
float x;
float y;
} Ponto;

ESTRUTURAS DE DADOS

Tipos estruturados

Aninhamento de estrutura: campos de uma


estrutura podem ser estruturas definidas previamente.

typedef struct ponto {


float x;
float y;
} Ponto;
struct circulo {
Ponto p;
float r;
}

ESTRUTURAS DE DADOS

Tipos estruturados

Vetores de estruturas:

Vetores cujos elementos so estruturas.

Exemplo:
Ponto p[3];

Declara um vetor para armazenar 3 pontos.


p = {{1.0, 1.0}, {5.0, 1.0}, {4.0, 3.0}}; // inicializao

ESTRUTURAS DE DADOS

Tipos estruturados

Vetores de ponteiros para estruturas:


#define MAX 10
Ponto* pontos[MAX];

A utilizao de vetores de ponteiros mais eficiente do


que a utilizao de vetores de estruturas porque ocupa
somente o espao necessrio para armazenar um ponteiro
(4 bytes).

Quando necessrio alocar os dados de um ponto, feita a


alocao dinmica e seu endereo guardado no vetor de
ponteiros.

ESTRUTURAS DE DADOS

Tipos estruturados

Tipo enumerao: conjunto de constantes inteiras


com nomes que especificam valores possveis para
uma varivel daquele tipo.

enum bool {
TRUE = 1,
FALSE = 0,
};
typedef enum bool Bool;
Bool r; // r pode receber apenas valores FALSE (0) ou TRUE
(1)

ESTRUTURAS DE DADOS

Tipos estruturados

Exerccio:

Crie um tipo estruturado aluno. Um aluno deve possuir


nome (cadeia com at 80 caracteres) e matrcula (nmero
inteiro). Defina o novo nome Aluno para sua
estrutura.

Na funo main crie um vetor de ponteiros para a estrutura


aluno (chamado tab com 3 posies).

Implemente as seguintes funes para manipular o vetor de


ponteiros criado:

// atribui NULL a todos os elementos do vetor tab de alunos de


// tamanho n
void inicializa (int n, Aluno** tab);

ESTRUTURAS DE DADOS

Tipos estruturados

Exerccio:

// armazena os dados de um novo aluno em uma posio i do


vetor de tamanho n
void leAluno (int n, Aluno** tab, int i);
// imprime os dados de um aluno armazenado em uma posio i
do vetor
void imprimeAluno(Aluno** tab, int i);
// remove os dados de um aluno. A posio i do aluno
passada como parmetro
void retiraAluno(Aluno** tab, int i);

ESTRUTURAS DE DADOS

Tipos estruturados

Exerccio:

// imprime os dados de todos os alunos


armazenados na tabela
void imprime_tudo(int n, Aluno** tab);
Teste todas as funes implementadas na funo main.

ESTRUTURAS DE DADOS

Estruturas de dados dinmicas

Oferecem suporte adequado para a insero e a


remoo de elementos dinamicamente (no so
estruturas pr-dimensionadas).

Para cada elemento, essas estruturas alocam


memria dinamicamente para seu armazenamento.

O nmero de elementos que podemos armazenar


arbitrrio, flexvel.

ESTRUTURAS DE DADOS

Tipos abstratos de dados (TAD):

uma tcnica de programao baseada na


definio de tipos estruturados.
Um TAD procura encapsular (esconder) de quem
usa um determinado tipo a forma concreta com
que o tipo foi implementado.
Um TAD uma coleo bem definida de dados e
um conjunto de operadores ou operaes que
podem ser aplicados em tais dados.

ESTRUTURAS DE DADOS

Tipos abstratos de dados (TAD):

Uma especificao de um TAD descreve quais


dados podem ser armazenados (caractersticas
do TAD), como eles podem ser utilizados
(operaes), mas no descreve como isso
implementado no programa.
Um TAD consiste de:
Uma estrutura para armazenamento de valores;
Um conjunto de operadores para manipulao dos
valores armazenados.

ESTRUTURAS DE DADOS

Tipos abstratos de dados (TAD):

O termo ocultao de dados utilizado para


descrever essa habilidade. Ao usurio so
fornecidos a descrio dos valores e o conjunto
de operadores do TAD, mas a implementao
invisvel e inacessvel.
A separao da definio do TAD de sua
implementao, permite que a mudana na
implementao no altere o programa que usa o
TAD.

ESTRUTURAS DE DADOS

Mdulos e compilao em separado:

Um programa em C pode ser dividido em vrios


arquivos fontes (extenso .c)
Mdulo um arquivo com funes que
representam apenas parte da implementao de
um programa completo.
A implementao de um programa pode ser
composta por um ou mais mdulos.
Cada mdulo deve ser compilado separadamente
gerando um arquivo objeto(extenso .o)

ESTRUTURAS DE DADOS

Mdulos e compilao em separado:

Programa
fonte

Compilador

Programa
objeto

Para que as funes implementadas em um


arquivo .c possam ser usadas por outro mdulo,
necessrio conhecer os prottipos das funes
oferecidas por esse arquivo.

ESTRUTURAS DE DADOS

Mdulos e compilao em separado:

Todo mdulo de funes C costuma ter associado um


arquivo que contm apenas os prottipos das funes
oferecidas pelo mdulo e os tipos exportados (typedefs,
structs, etc).

Esse arquivo de prottipos tem o mesmo nome do


mdulo ao qual est associado, mas possui a
extenso .h

Esse arquivo caracteriza a interface do mdulo.

ESTRUTURAS DE DADOS

Mdulos e compilao em separado:

Deve-se documentar as funes oferecidas por um


mdulo com comentrios.

Ao invs de repetir os prottipos de funes, todo


mdulo que usa as funes de um arquivo .c deve
incluir apenas o arquivo .h correspondente.

Ex:
#include aluno.h

ESTRUTURAS DE DADOS

Mdulos e compilao em separado:

Exerccio: faa a diviso do seu programa (que armazena um vetor


de ponteiros para alunos) em mdulos.

Você também pode gostar