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 { declara!"o de campos necessrios para representar a estrutura #$

ESTRUTURAS DE DADOS

Tipos estruturados

E%emplo:
struct ponto { &loat %$ &loat '$ #$

ESTRUTURAS DE DADOS

Tipos estruturados

Declara!"o de variveis do tipo estrutura:


struct nome_estrutura nome_varivel$

E%emplo:
struct ponto p$

ESTRUTURAS DE DADOS

Tipos estruturados

(perador de acesso (.)


p.% ) *+.+$ p.' ) ,.+$

-niciali.a os campos % e ' da estrutura ponto com *+.+ e ,.+ respectivamente.

ESTRUTURAS DE DADOS

Tipos estruturados

( acesso ao endere!o de um campo da estrutura: /(p.%) /p.%

( operador de acesso ao campo (.) tem preced0ncia sobre o operador 1endere!o de2 (/).

ESTRUTURAS DE DADOS

Tipos estruturados

E%emplo de captura e impress"o de pontos

int main (void) { struct ponto p$ print&(3Digite as coordenadas do ponto(% '): 3)$ scan&(34& 4&35 /p.%5 /p.')$ print&(3( ponto &ornecido &oi: (4.6&54.6&)7n35 p.%5 p.')$ return +$ #

ESTRUTURAS DE DADOS

Tipos estruturados

8onteiro para estruturas: struct nome_estrutura 9nome_ponteiro$

E%emplo:

struct ponto 9pp$

ESTRUTURAS DE DADOS

Tipos estruturados

Acessando campos de estrutura a partir de ponteiros: (9pp).% ) *6.+$ pp:;% ) *6.+$

8ar0nteses s"o necessrios pois o operador 1conte<do de2 (9) tem preced0ncia menor do =ue o operador de acesso.

ESTRUTURAS DE DADOS

Tipos estruturados

8assagem de estruturas para &un!>es: void imprime (struct ponto p) ou void imprime (struct ponto 9 pp) ???

@elAor passar apenas o ponteiro para a &un!"o5 pois copiar o ponteiro para a pilAa de e%ecu!"o B mais e&iciente do =ue copiar a estrutura inteira.

ESTRUTURAS DE DADOS

Tipos estruturados

E%emplo de passagem de estrutura para &un!"o:

void imprime (struct ponto9 pp) { print&(3( ponto &ornecido &oi: (4.6&54.6&)7n35 pp:;%5 pp:;')$ # void captura (struct ponto9 pp) { print&(3Digite as coordenadas do ponto(% '): 3)$ scan&(34& 4&35 /pp:;%5 /pp:;')$ #
Como &icaria a &un!"o main para leitura e impress"o de um ponto???

ESTRUTURAS DE DADOS

Tipos estruturados

Aloca!"o dinDmica de estruturas: struct ponto 9pp$ pp ) (struct ponto 9) malloc(si.eo&(struct ponto))$

ESTRUTURAS DE DADOS

Tipos estruturados

De&ini!"o de novos tipos:

C permite criar nomes de tipos usando typedef.

E%emplos:
Eeal B sinFnimo de &loat 8onto B sinFnimo de struct ponto declara!"o de ponto

typedef &loat Eeal$ typedef struct ponto 8onto$ struct ponto p$

8onto p$

ESTRUTURAS DE DADOS

Tipos estruturados

(utra &orma de criar nome de tipo:


typedef struct ponto { &loat %$ &loat '$ # 8onto$

ESTRUTURAS DE DADOS

Tipos estruturados

AninAamento de estrutura: campos de uma estrutura podem ser estruturas de&inidas previamente.
typedef struct ponto { &loat %$ &loat '$ # 8onto$ struct circulo { 8onto p$ &loat r$ #

ESTRUTURAS DE DADOS

Tipos estruturados

Getores de estruturas:

Getores cuHos elementos s"o estruturas.

E%emplo: 8onto pIJK$

Declara um vetor para arma.enar J pontos. p ) {{*.+5 *.+#5 {,.+5 *.+#5 {L.+5 J.+##$ iniciali.a!"o

ESTRUTURAS DE DADOS

Tipos estruturados

Getores de ponteiros para estruturas:


Mde&ine @AN *+ 8onto9 pontosI@ANK$

A utili.a!"o de vetores de ponteiros B mais e&iciente do =ue a utili.a!"o de vetores de estruturas por=ue ocupa somente o espa!o necessrio para arma.enar um ponteiro (L b'tes).

Ouando B necessrio alocar os dados de um ponto5 B &eita a aloca!"o dinDmica e seu endere!o B guardado no vetor de ponteiros.

ESTRUTURAS DE DADOS

Tipos estruturados

Tipo enumera!"o: conHunto de constantes inteiras com nomes =ue especi&icam valores possPveis para uma varivel da=uele tipo.
enum bool { TEQE ) *5 FARSE ) +5 #$ t'pede& enum bool Sool$ Sool r$ r pode receber apenas valores FARSE (+) ou TEQE (*)

ESTRUTURAS DE DADOS

Tipos estruturados

E%ercPcio:

Crie um tipo estruturado 1aluno2. Qm aluno deve possuir nome (cadeia com atB T+ caracteres) e matrPcula (n<mero inteiro). De&ina o novo nome 1Aluno2 para sua estrutura.

Ua &un!"o main crie um vetor de ponteiros para a estrutura aluno (cAamado tab com J posi!>es).

-mplemente as seguintes &un!>es para manipular o vetor de ponteiros criado:

atribui UQRR a todos os elementos do vetor tab de alunos de tamanAo n void iniciali.a (int n5 Aluno99 tab)$

ESTRUTURAS DE DADOS

Tipos estruturados

E%ercPcio:

arma.ena os dados de um novo aluno em uma posi!"o i do vetor de tamanAo n void leAluno (int n5 Aluno99 tab5 int i)$ imprime os dados de um aluno arma.enado em uma posi!"o i do vetor void imprimeAluno(Aluno99 tab5 int i)$ remove os dados de um aluno. A posi!"o i do aluno B passada como parDmetro void retiraAluno(Aluno99 tab5 int i)$

ESTRUTURAS DE DADOS

Tipos estruturados

E%ercPcio:

imprime os dados de todos os alunos arma.enados na tabela void imprime_tudo(int n5 Aluno99 tab)$ Teste todas as &un!>es implementadas na &un!"o main.

ESTRUTURAS DE DADOS

Estruturas de dados dinDmicas

(&erecem suporte ade=uado para a inser!"o e a remo!"o de elementos dinamicamente (n"o s"o estruturas prB:dimensionadas). 8ara cada elemento5 essas estruturas alocam memVria dinamicamente para seu arma.enamento.

( n<mero de elementos =ue podemos arma.enar B arbitrrio5 &le%Pvel.

ESTRUTURAS DE DADOS

Tipos abstratos de dados (TAD):

W uma tBcnica de programa!"o baseada na de&ini!"o de tipos estruturados. Qm TAD procura encapsular (esconder) de =uem usa um determinado tipo a &orma concreta com =ue o tipo &oi implementado. Qm TAD B uma cole!"o bem de&inida de dados e um conHunto de operadores ou operaes =ue podem ser aplicados em tais dados.

ESTRUTURAS DE DADOS

Tipos abstratos de dados (TAD):

Qma especi&ica!"o de um TAD descreve =uais dados podem ser arma.enados (caracterPsticas do TAD)5 como eles podem ser utili.ados (operaes)5 mas n"o descreve como isso B implementado no programa. Qm TAD consiste de:
Qma estrutura para arma.enamento de valores$ Qm conHunto de operadores para manipula!"o dos valores arma.enados.

ESTRUTURAS DE DADOS

Tipos abstratos de dados (TAD):

( termo 1ocultao de dados2 B utili.ado para descrever essa Aabilidade. Ao usurio s"o &ornecidos a descri!"o dos valores e o conHunto de operadores do TAD5 mas a implementa!"o B invisvel e inacessvel. A separa!"o da de&ini!"o do TAD de sua implementa!"o5 permite =ue a mudan!a na implementa!"o n"o altere o programa que usa o TAD.

ESTRUTURAS DE DADOS

@Vdulos e compila!"o em separado:

Qm programa em C pode ser dividido em vrios ar=uivos &ontes (e%tens"o .c) Mdulo B um ar=uivo com &un!>es =ue representam apenas parte da implementa!"o de um programa completo. A implementa!"o de um programa pode ser composta por um ou mais mVdulos. Cada mVdulo deve ser compilado separadamente gerando um ar=uivo obHeto(e%tens"o .o)

ESTRUTURAS DE DADOS

@Vdulos e compila!"o em separado:

8rograma &onte

Compilador

8rograma obHeto

8ara =ue as &un!>es implementadas em um ar=uivo .c possam ser usadas por outro mVdulo5 B necessrio conAecer os protVtipos das &un!>es o&erecidas por esse ar=uivo.

ESTRUTURAS DE DADOS

@Vdulos e compila!"o em separado:

Todo mVdulo de &un!>es C costuma ter associado um ar=uivo =ue contBm apenas os protVtipos das &un!>es o&erecidas pelo mVdulo e os tipos e%portados (t'pede&s5 structs5 etc). Esse ar=uivo de protVtipos tem o mesmo nome do mVdulo ao =ual est associado5 mas possui a e%tens"o .h Esse ar=uivo caracteri.a a interface do mdulo.

ESTRUTURAS DE DADOS

@Vdulos e compila!"o em separado:

Deve:se documentar as &un!>es o&erecidas por um mVdulo com comentrios. Ao invBs de repetir os protVtipos de &un!>es5 todo mVdulo =ue usa as &un!>es de um ar=uivo .c deve incluir apenas o ar=uivo .A correspondente.

E%: Minclude 1aluno.A2

ESTRUTURAS DE DADOS

@Vdulos e compila!"o em separado:

E%ercPcio: &a!a a divis"o do seu programa (=ue arma.ena um vetor


de ponteiros para alunos) em mVdulos.