Sie sind auf Seite 1von 99

TCC0216 Estrutura de Dados II

Reviso - Ponteiros e Alocao Dinmica


Prof. Jos Viterbo

23/11/12

Estrutura de Dados II

Tpicos Principais
Vetores Exe p!os de anipu!a"#o de $etores Ponteiros Vetores x Ponteiros Alocao dinmica Tipos estruturados Ponteiros para tipos estruturados

23/11/12

Estrutura de Dados II

Vetores
%ferece u ecanis o &ue per ite ar a'enar u con(unto de $a!ores na e ria do co putador.
) Este ecanis o per ite !er os $a!ores e ar a'en*+ !os na e ria. ) Posterior ente, estes $a!ores pode ser !i$re ente processados de for a eficiente, pois (* est#o na e ria do co putador.

23/11/12

Estrutura de Dados II

Vetores
Pode os ar a'enar u con(unto de $a!ores na e ria do co putador atra$s do uso de vetores .arrays, e in/!0s12
) % $etor a for a ais si p!es de or/ani'ar os dados na e ria do co putador. ) 3o $etores, os $a!ores s#o ar a'enados na e ria do co putador e se&40ncia, u aps o outro, e pode os !i$re ente acessar &ua!&uer $a!or do con(unto.

23/11/12

Estrutura de Dados II

Dec!ara"#o de $etores
6a !in/ua/e 3, &uando declaramos um vetor .conceito an*!o/o ao de dec!ara"#o de u a $ari*$e! si p!es1 de$e os infor ar a dimenso do vetor, isto , o n7 ero m !imo de e!e entos &ue poder* ser ar a'enado no espa"o de e ria &ue reser$ado para o $etor. De$e os ta b infor ar o tipo dos $a!ores &ue ser#o ar a'enados no $etor .por exe p!o, int, float ou double1. 6u $etor, s pode os ar a'enar $a!ores de u es o tipo.
23/11/12 Estrutura de Dados II 5

Dec!ara"#o de $etores
int x91:;<
) Esta dec!ara"#o reser$a u espa"o de e ria para ar a'enar 1: $a!ores inteiros e este espa"o de e ria referenciado pe!o no e !.

Inicia!i'a"#o de a!/u as posi"=es do $etor !2


) ) ) ) x9:; > 5< x91; > 11< x9-; > :< x9?; > 3<

23/11/12

Estrutura de Dados II

Dec!ara"#o de $etores
int a, b92:;< /A dec!ara u a $ari*$e! si p!es e u $etor A/ f!oat c91:;< /A dec!ara u $etor A/ doub!e d93:;, e, f95;< /A dec!ara dois $etores e u a $ari*$e! si p!es A/

Dec!ara e (* inicia!i'a2 ) int $95; > B12, 5, 3-, 32, ?C< Dec!ara e (* inicia!i'a .o ta anDo fica definido a partir do n7 ero de e!e entos dec!arados12 ) f!oat u9 ; > B1. 5, 3.3, -.2C<

23/11/12

Estrutura de Dados II

Vetores ) exe p!o2 i pri indo $a!ores


#include <stdio.h> int main (void) { int i; float v[6] = {2.3,

.!, ".#, $.6, %.%, 3.&';

fo( (i=#; i<6; i))) { *(intf(+,f+, v[i]); ' (etu(n #; '

23/11/12

Estrutura de Dados II

Vetores ) exe p!o2 $a!ores


#include <stdio.h> int main (void) { int i; float s = #.#; float v[6] = {2.3,

dia dos

.!, ".#, $.6, %.%, 3.&';

fo( (i=#; i<6; i))) { s = s ) v[i]; ' *(intf(+,f+, s); (etu(n #; '
23/11/12 Estrutura de Dados II ?

Vetores ) exe p!o2 c*!cu!o da


dia e $ariFncia
G/ora &ue conDece os co o traba!Dar co $etores pode os ter u a!/orit o &ue ca!cu!a a dia e a $ariFncia de u con(unto de $a!ores ar a'enados e u ar&ui$o.

23/11/12

Estrutura de Dados II

1:

Vetores ) exe p!o2 c*!cu!o da


dia e $ariFncia
Va os !er os $a!ores das notas de u ar&ui$o, ar a'en*+!os e u $etor e fa'er o c*!cu!o da dia e da $ariFncia.

23/11/12

Estrutura de Dados II

11

Vetores ) exe p!o2 c*!cu!o da


dia e $ariFncia
#include <stdio.h> int main (void) { int i; int n; float m; float v; float notas[ #]; -. -. -. -. n/me(o de m0dia dos va(i1ncia veto( com notas lidas .valo(es .dos valo(es .as notas .-

scanf(+,d+, 2n); -. le nume(o de notas (< #) .if(n> #) { *(intf(+3amanho invalido4n+); (etu(n #; ' -. 56 valo(es do teclado e a(ma7ena no veto( .fo((i=#, i<n, i))) scanf(+,f+, 2notas[n]); ' ...
23/11/12 Estrutura de Dados II 12

Vetores ) exe p!o2 c*!cu!o da


dia e $ariFncia
... -. 8alcula m0dia dos valo(es .m = #.#; fo( (i=#; i<n; i))) { m = m ) notas[i]; ' m = m - n; -. 8alcula va(i1ncia dos valo(es .v = #.#; fo( (i=#; i<n; i))) { v = v ) (notas[i] 9 m) . (notas[i] 9 m); ' v = v - n; *(intf(+4n:edia = ,f e ;a(iancia = ,f4n+, m,v); (etu(n #; '

23/11/12

Estrutura de Dados II

13

Ponteiros
int main ( void ) { int a, <; int .*; * = 2a; .* = 2; *(intf(+ ,d +, a); * = 2<; < = a ) 2; *(intf(+ ,d +, .*); (etu(n #; ' im*(ime o valo( 2 e o valo(...

23/11/12

Estrutura de Dados II

1-

Ponteiros
+ %peradores usados co
%perador un*rio & .Hendere"o deI1 %perador un*rio * .Hconte7do deI1

Ponteiros

23/11/12

Estrutura de Dados II

15

Ponteiros
int main ( void ) { int a; int .*=2a; .* = 2; *(intf(+ ,d +, a); (etu(n #; ' im*(ime o valo( 2

23/11/12

Estrutura de Dados II

18

Ponteiros2 cuidados
int main ( void ) { int a, <, .*; a = 2; .* = 3; < = a ) (.*); *(intf(+ ,d +, <); (etu(n #; '

) erro na atribui"#o ApJ>J3


uti!i'a a e ria apontada por p para ar a'enar o $a!or 3, se &ue p ti$esse sido inicia!i'ada, !o/o ar a'ena 3 nu
23/11/12

espa"o de

e ria desconDecido
1@

Estrutura de Dados II

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h> void t(oca(int a, int <); int main (void) { int a="#, <=2#; t(oca(a,<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int =, int >) { int tm*=>; >==; ==tm*; ' a=10

$a!ores de

b=20

Press any key to continue


23/11/12 Estrutura de Dados II 1E

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h>

$a!ores de

Pi!Da de void t(oca(int a, int <); int main (void) { int a="#, <=2#; t(oca(a,<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int =, int >) { int tm*=>; >==; ==tm*; ' < main a

e ria

@:2: @:18 @:12 @::E

2: 1:

@::@:::

23/11/12

Estrutura de Dados II

1?

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h>

$a!ores de

Pi!Da de void t(oca(int a, int <); int main (void) { int a="#, <=2#; t(oca(a,<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int =, int >) { int tm*=>; >==; ==tm*; '

e ria

@:2:

tm* > t(oca = < main a

2: 2: 1: 2: 1:

@:18 @:12 @::E @::@:::

23/11/12

Estrutura de Dados II

2:

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h>

$a!ores de

Pi!Da de void t(oca(int a, int <); int main (void) { int a="#, <=2#; t(oca(a,<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int =, int >) { int tm*=>; >==; ==tm*; '

e ria

@:2:

tm* > t(oca = < main a

2: 1: 1: 2: 1:

@:18 @:12 @::E @::@:::

23/11/12

Estrutura de Dados II

21

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h>

$a!ores de

Pi!Da de void t(oca(int a, int <); int main (void) { int a="#, <=2#; t(oca(a,<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int =, int >) { int tm*=>; >==; ==tm*; '

e ria

@:2:

tm* > t(oca = < main a

2: 1: 2: 2: 1:

@:18 @:12 @::E @::@:::

23/11/12

Estrutura de Dados II

22

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h>

$a!ores de

Pi!Da de void t(oca(int a, int <); int main (void) { int a="#, <=2#; t(oca(a,<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int =, int >) { int tm*=>; >==; ==tm*; '

e ria

< main a

@:2: @:18 @:12 @::E

2: 1:

@::@:::

23/11/12

Estrutura de Dados II

23

Ponteiros + Gp!ica"#o
Passa/e de ponteiros para fun"=es2
) fun"#o / cDa a fun"#o f
f n#o pode a!terar direta ente $a!ores de $ari*$eis de /, por se / passar para f os $a!ores dos endere"os de e ria onde as $ari*$eis de / est#o ar a'enadas, f pode a!terar, indireta ente, os $a!ores das $ari*$eis de /

23/11/12

Estrutura de Dados II

2-

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h> void t(oca(int .*a, int .*<); int main (void) { int a="#, <=2#; t(oca(2a,2<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int .*a, int .*<) { int tm*=.*<; .*<=.*a; .*a=tm*; a=20 b=10 '

$a!ores de

Press any key to continue


23/11/12 Estrutura de Dados II 25

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h>

$a!ores de

Pi!Da de void t(oca(int .*a, int .*<); int main (void) { int a="#, <=2#; t(oca(2a,2<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int .*a, int .*<) { int tm*=.*<; .*<=.*a; .*a=tm*; ' < main a

e ria

@:2: @:18 @:12 @::E

2: 1:

@::@:::

23/11/12

Estrutura de Dados II

28

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h>

$a!ores de

Pi!Da de void t(oca(int .*a, int .*<); int main (void) { int a="#, <=2#; t(oca(2a,2<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int .*a, int .*<) { int tm*=.*<; .*<=.*a; .*a=tm*; '

e ria

@:2:

tm* *< t(oca *a < main a

+ @::@::: 2: 1:

@:18 @:12 @::E @::@:::

23/11/12

Estrutura de Dados II

2@

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h>

$a!ores de

Pi!Da de void t(oca(int .*a, int .*<); int main (void) { int a="#, <=2#; t(oca(2a,2<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int .*a, int .*<) { int tm*=.*<; .*<=.*a; .*a=tm*; '

e ria

@:2:

tm* *< t(oca *a < main a

2: @::@::: 2: 1:

@:18 @:12 @::E @::@:::

23/11/12

Estrutura de Dados II

2E

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h>

$a!ores de

Pi!Da de void t(oca(int .*a, int .*<); int main (void) { int a="#, <=2#; t(oca(2a,2<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int .*a, int .*<) { int tm*=.*<; .*<=.*a; .*a=tm*; '

e ria

@:2:

tm* *< t(oca *a < main a

2: @::@::: 1: 1:

@:18 @:12 @::E @::@:::

23/11/12

Estrutura de Dados II

2?

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h>

$a!ores de

Pi!Da de void t(oca(int .*a, int .*<); int main (void) { int a="#, <=2#; t(oca(2a,2<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int .*a, int .*<) { int tm*=.*<; .*<=.*a; .*a=tm*; '

e ria

@:2:

tm* *< t(oca *a < main a

2: @::@::: 1: 2:

@:18 @:12 @::E @::@:::

23/11/12

Estrutura de Dados II

3:

Ponteiros ) Gp!ica"#o2 fun"=es &ue uda $ari*$eis de outras


#include <stdio.h>

$a!ores de

Pi!Da de void t(oca(int .*a, int .*<); int main (void) { int a="#, <=2#; t(oca(2a,2<); *(intf(+ a=,d <=,d4n+,a,<); ' void t(oca(int .*a, int .*<) { int tm*=.*<; .*<=.*a; .*a=tm*; a=20 b=10 '

e ria

< main a

@:2: @:18 @:12 @::E

1: 2:

@::@:::

Press any key to continue


23/11/12 Estrutura de Dados II 31

&etores e Ponteiros
int v[7]={1,3,5,7, ,11,13!" int i"
ou% 1"0 1$6 i v[6] 1$2

int v[7]" int i" #or $i=0" i%7" i&&' { v[i]=2*i&1" !

13 11 ? @ 5 3 1

12# 12" 120 116 112 10# 10"


32

v[5] v[4] v[3] v[2] v[1] v[0]

23/11/12

Estrutura de Dados II

&etores e Ponteiros
int v[7]={1,3,5,7, ,11,13!" int i"
ou% 1"0 1$6 i v[6] 1$2

int v[7]" int i" #or $i=0" i%7" i&&' { v[i]=2*i&1" !

13 11 ? @ 5 3 1

12# 12" 120 116 112 10# 10"


33

v[5] v[4] v[3] v[2] v[1] v[0]

23/11/12

Estrutura de Dados II

Vetores e Ponteiros
int v[7]"
1"0

'uem ( v)
13

1$6 1$2 12# 12" 120 116 112 10# 10"


3-

v um ponteiro de valor constante que aponta para o primeiro elemento do vetor de inteiros!
23/11/12 Estrutura de Dados II

11 ? @ 5 3 1

Vetores e Grit tica de Ponteiros


int v[7]"

Ou seja:

v&i aponta para v[i]!


v&6 v&5 v&4 v&3 v&2 v&1 v&0
13 11 ? @ 5 3 1

1"0 1$6 1$2 12# 12" 120 116 112 10# 10"
35

*$v&i'=3" v[i]=3" scan#$()*+,&v[i]'" scan#$()*+,v&i'"


23/11/12 Estrutura de Dados II

&etores e Ponteiros
Passa/e de $etor para fun"#o2
passar o endere"o da pri eira posi"#o do

) consiste e $etor

) fun"#o de$e ter parF etro do tipo ponteiro para ar a'enar $a!or
Hpassar u $etor para u a fun"#oI e&ui$a!ente a Hpassar o endere"o inicia! do $etorI e!e entos do $etor n#o s#o copiados para a fun"#o ar/u ento copiado apenas o endere"o do pri eiro e!e ento

) Exe p!o2
cDa ada K fun"#o passando $etor de int fun"#o de$e ter u
23/11/12

parF etro do tipo int A


Estrutura de Dados II 38

&etores e Ponteiros - Passa*em de vetor +ara ,uno


-. 8?lculo da m0dia e da va(i1ncia de n (eais (se@unda ve(sAo) .#include <stdio.h> -. BunCAo *a(a c?lculo da m0dia .float media (int n, float. v) { int i; float s = #.#; fo( (i = #; i < n; i))) s )= v[i]; (etu(n s-n; '

parF etro do tipo ponteiro para f!oat

23/11/12

Estrutura de Dados II

3@

&etores e Ponteiros - Passa*em de vetor +ara ,uno

-. BunCAo *a(a c?lculo da va(i1ncia .float va(iancia (int n, float. v, float m) { int i; float s = #.#; fo( (i = #; i < n; i))) s )= (v[i] 9 m) . (v[i] 9 m); (etu(n s-n; '

23/11/12

Estrutura de Dados II

3E

&etores e Ponteiros - Passa*em de vetor +ara ,uno


#define :DE "# int main ( void ) { float med, va(, v[:DE], int i; -. leitu(a dos valo(es .fo( ( i = #; i < :DE; i)) ) { scanf(+,f+, 2v[i]); ' med = media(:DE,v); va( = va(iancia(:DE,v,med); *(intf ( +:edia = ,f ;a(iancia = ,f (etu(n #; '
23/11/12 Estrutura de Dados II 3?

4n+, med, va();

&etores e Ponteiros - Passa*em de vetor +ara ,uno fun"#o pode a!terar os $a!ores dos e!e entos do $etor pois recebe o endere"o do pri eiro e!e ento do $etor .e n#o os e!e entos propria ente ditos1
) Exe p!o2
fun"#o incre entando todos os e!e entos de u a unidade

23/11/12

Estrutura de Dados II

-:

&etores e Ponteiros - Passa*em de vetor +ara ,uno


-. Fnc(ementa elementos de um veto( .void inc(Gveto( ( int n, int .v ) { int i; fo( (i = #; i < n; i))) v[i])); ' int main ( void ) { int a[ ] = {", 3, '; inc(Gveto((3, a); *(intf(+,d ,d ,d 4n+, a[#], a["], a[2]); (etu(n #; ' saHda do *(o@(ama se(? 2 ! 6
23/11/12 Estrutura de Dados II -1

Vetores e Ponteiros + ExercLcio


Escre$a u a fun"#o &ue recebe dois $etores de ta anDo n e u terceiro $etor de ta anDo 2n. Go cDa ar a fun"#o os e!e entos dos $etores de ta anDo n s#o inseridos de odo interca!ado no $etor de ta anDo 2n.

23/11/12

Estrutura de Dados II

-2

-. Fnte(cala elementos de um veto( .#include <stdio.h> void uneGinte(calado ( int n, int .u, int .v, int .7 ) { int i; fo( (i = #; i < n; i))) { 7[2.i] = u[i]; 7[2.i)"] = v[i]; ' ' int main ( void ) { int a[ ] = {", 3, '; int <[ ] = {2, !, 6'; int c[6]; int i; uneGinte(calado(3, a, <, c); fo( (i = #; i < 6; i))) *(intf(+,d4n+, c[i]); (etu(n #; ' 23/11/12 Estrutura de Dados II -3

G!oca"#o DinF ica


Mso da e ria2
) uso de $ari*$eis /!obais .e est*ticas12
espa"o reser$ado para u a $ari*$e! /!oba! existe en&uanto o pro/ra a esti$er sendo executado

) uso de $ari*$eis !ocais2


espa"o existe apenas en&uanto a fun"#o &ue dec!arou a $ari*$e! est* sendo executada !iberado para outros usos &uando a execu"#o da fun"#o ter ina

) $ari*$eis /!obais ou !ocais pode

ser si p!es ou $etores2

para $etor, necess*rio infor ar o n7 ero *xi o de e!e entos pois o co pi!ador precisa ca!cu!ar o espa"o a ser reser$ado

23/11/12

Estrutura de Dados II

--

G!oca"#o DinF ica


Mso da e ria2
e ria re&uisitado e te po de

) a!oca"#o dinF ica2


espa"o de execu"#o

espa"o per anece reser$ado at &ue se(a exp!icita ente !iberado


) depois de !iberado, espa"o estar* disponibi!i'ado para outros usos e n#o pode ais ser acessado ) espa"o a!ocado e n#o !iberado exp!icita ente, ser* auto atica ente !iberado ao fina! da execu"#o
23/11/12 Estrutura de Dados II -5

G!oca"#o DinF ica


Mso da
)

e ria2
3di/o do pro/ra a Vari*$eis /!obais e Vari*$eis est*ticas Vari*$eis a!ocadas dina ica ente
e ria dinF ica e ria est*tica

e ria est*tica2
cdi/o do pro/ra a $ari*$eis /!obais $ari*$eis est*ticas

e ria dinF ica2


$ari*$eis a!ocadas dina ica ente e ria !i$re $ari*$eis !ocais

Ne ria !i$re Vari*$eis !ocais .Pi!Da de execu"#o1

23/11/12

Estrutura de Dados II

-8

G!oca"#o DinF ica


Mso da e ria2
e ria est*tica e ria2 ) a!oca"#o dinF ica de
usa a e ria !i$re

3di/o do pro/ra a Vari*$eis /!obais e Vari*$eis est*ticas Vari*$eis a!ocadas dina ica ente

se o espa"o de e ria !i$re for enor &ue o espa"o re&uisitado, a a!oca"#o n#o feita e o pro/ra a pode pre$er trata ento de erro

) pi!Da de execu"#o2 e ria est*tica


uti!i'ada para a!ocar e ria &uando ocorre cDa ada de fun"#o2
) siste a reser$a o espa"o para as $ari*$eis !ocais da fun"#o ) &uando a fun"#o ter ina, espa"o !iberado .dese pi!Dado1

Ne ria !i$re Vari*$eis !ocais .Pi!Da de execu"#o1

se a pi!Da tentar crescer ais do &ue o espa"o disponL$e! existente, pro/ra a abortado co erro

23/11/12

Estrutura de Dados II

-@

G!oca"#o DinF ica


Oun"=es da bib!ioteca padr#o Hstd!ib.DI
) cont u a srie de fun"=es pr+definidas2
e ria fun"=es para tratar a!oca"#o dinF ica de constantes pr+definidas ....

23/11/12

Estrutura de Dados II

-E

G!oca"#o DinF ica


voi* * ,a--oc$int nu,.bytes'"

voi* #ree$voi* * /'"

23/11/12

Estrutura de Dados II

-?

G!oca"#o DinF ica


Oun"#o HmallocI2
) recebe co o parF etro o n7 ero de bPtes &ue se dese(a a!ocar ) retorna u ponteiro /enrico para o endere"o inicia! da *rea de e ria a!ocada, se Dou$er espa"o !i$re2
ponteiro /enrico representado por void. ponteiro con$ertido auto atica ente para o tipo apropriado ponteiro pode ser con$ertido exp!icita ente

) retorna u

endere"o nu!o, se n#o Dou$er espa"o !i$re2

representado pe!o sL bo!o IJ55

Oun"#o Hsi-eo,I2
) retorna o n7 ero de bPtes ocupado por u tipo

fun"#o H,reeI2
) recebe co o parF etro o ponteiro da
a fun"#o free de$e receber u a!ocado dina ica ente
23/11/12

e ria a ser !iberada


e ria &ue tenDa sido
5:

endere"o de

Estrutura de Dados II

G!oca"#o DinF ica


Exe p!o2
) a!oca"#o dinF ica de u co 1: e!e entos

$etor de inteiros

a!!oc retorna o endere"o da *rea a!ocada para ar a'enar $a!ores inteiros

ponteiro de inteiro recebe endere"o inicia! do espa"o a!ocado int *v" v = $int *' ,a--oc$10*si0eo#$int''"
23/11/12 Estrutura de Dados II 51

G!oca"#o DinF ica


Exe p!o .cont.12
v = (int .) malloc("#.si7eof(int));
1 - Declarao: int *v Abre-se espao na pilha para o ponteiro (varivel local) C$di)o do *ro)rama +ariveis ,lobais e -stticas 2 - Comando: v = (int *) malloc (1 *si!eo"(int)) #eserva espao de mem$ria da rea livre e atrib%i endereo & varivel C$di)o do *ro)rama +ariveis ,lobais e -stticas
( b/tes

' (

.ivre

.ivre v ' (

23/11/12

Estrutura de Dados II

52

G!oca"#o DinF ica


Exe p!o .cont.12
) $ ar a'ena endere"o inicia! de u a *rea contLnua de e ria suficiente para ar a'enar 1: $a!ores inteiros ) $ pode ser tratado co o u estatica ente $etor dec!arado

$ aponta para o inicio da *rea a!ocada $9:; acessa o espa"o para o pri eiro e!e ento $91; acessa o se/undo .... at $9?;
23/11/12 Estrutura de Dados II 53

G!oca"#o DinF ica


Exe p!o .cont.12
) trata ento de erro aps cDa ada a
i pri e ensa/e de erro a fun"#o exit1 aborta o pro/ra a .co
1 v = $int*' ,a--oc$10*si0eo#$int''" i# $v==2344' { /rint#$56e,oria insu#iciente78n5'" e9it$1'" ! 1 #ree$v'" 23/11/12 Estrutura de Dados II 5:* aborta o /ro;ra,a e retorna 1 /ara o sist7 o/eraciona- *:

a!!oc

<inc-u*e %st*-ib7=> int ,ain $ voi* ' { #-oat *v" #-oat ,e*, var" int i,n" /rint#$5?ntre n e *e/ois os va-ores8n5'" scan#$5)*5,&n'" v = $#-oat *' ,a--oc$n*si0eo#$#-oat''" i# $v==2344' { /rint#$(@a-ta ,e,oria8n+'" e9it$1'" ! #or $ i = 0" i % n" i&& ' scan#$5)#5, &v[i]'" ,e* = ,e*ia$n,v'" var = variancia$n,v,,e*'" /rint# $ 56e*ia = )# #ree$v'" return 0" !
23/11/12 Estrutura de Dados II 55

Aariancia = )#

8n5, ,e*, var'"

Gten"#o2 Vetores Qocais a Oun"=es


Rrea de e ria de u a $ari*$e! !oca!2
) s existe en&uanto a fun"#o &ue dec!ara a $ari*$e! esti$er sendo executada ) re&uer cuidado &uando da uti!i'a"#o de $etores !ocais dentro de fun"=es

Exe p!o2
) produto $etoria! de dois $etores u e v e 3D, representados pe!as tr0s co ponentes x, y, e z
u v= { u y v z v y u z , u z v x v z u x , u x v y v x u y

23/11/12

Estrutura de Dados II

58

Vetor Dec!arado Qoca! ente


#-oat* /ro*.vetoria- $#-oat* u, #-oat* v' { #-oat /[3]" /[0] = u[1]*v[2] B v[1]*u[2]" /[1] = u[2]*v[0] B v[2]*u[0]" /[2] = u[0]*v[1] B v[0]*u[1]" return /" !

) $ari*$e! p dec!arada !oca! ente2


*rea de e ria &ue a $ari*$e! p ocupa deixa de ser $*!ida &uando a fun"#o prodS$etoria! ter ina fun"#o &ue cDa a prodS$etoria! n#o pode acessar a *rea apontada pe!o $a!or retornado
23/11/12 Estrutura de Dados II 5@

Vetor G!ocado Dina ina ente


#-oat* /ro*.vetoria- $#-oat* u, #-oat* v' { #-oat */ = $#-oat*' ,a--oc$3*si0eo#$#-oat''" /[0] = u[1]*v[2] B v[1]*u[2]" /[1] = u[2]*v[0] B v[2]*u[0]" /[2] = u[0]*v[1] B v[0]*u[1]" return /" ! ) $ari*$e! p recebe endere"o inicia! da *rea a!ocada dina ica ente
*rea de e ria para a &ua! a $ari*$e! p aponta per anece $*!ida tr ino da fun"#o prodS$etoria!< a $ari*$e! p ser* destruLda aps o tr ino da fun"#o prodS$etoria!< fun"#o &ue cDa a prodS$etoria! pode acessar a *rea apontada pe!o $a!or retornado prob!e a + a!oca"#o dinF ica para cada cDa ada da fun"#o2
) ineficiente do ponto de $ista co putaciona! ) re&uer &ue a fun"#o &ue cDa a se(a respons*$e! pe!a !ibera"#o do espa"o

es o aps o

23/11/12

Estrutura de Dados II

5E

Vetor G!ocado Pre$ia ente


voi* /ro*.vetoria- $#-oat* u, #-oat* v, #-oat* /' { /[0] = u[1]*v[2] B v[1]*u[2]" /[1] = u[2]*v[0] B v[2]*u[0]" /[2] = u[0]*v[1] B v[0]*u[1]" !

) espa"o de e ria para o resu!tado passado pe!a fun"#o &ue cDa a2


fun"#o prodS$etoria! recebe tr0s $etores,
) dois $etores co ) u dados de entrada $etor para ar a'enar o resu!tado

so!u"#o
23/11/12

ais ade&uada pois n#o en$o!$e a!oca"#o dinF ica


Estrutura de Dados II 5?

ExercLcio
Escre$a u a fun"#o &ue recebe dois $etores de inteiros v1 e v2 de ta anDo n e cria u no$o $etor $etor de ta anDo 2n, no &ua! os e!e entos do $etor v1 aparece no inLcio e os do $etor v2 aparece concatenados ao fina!. G fun"#o de$e retornar o ponteiros para o no$o $etor a!ocado dina ica ente.
int. concatena(int .v", int .v2, int n);

23/11/12

Estrutura de Dados II

8:

Tipo Estrutura2 Noti$a"#o


Noti$a"#o2
) anipu!a"#o de dados co postos ou estruturados
ponto no espa"o bidi ensiona!
) representado por duas coordenadas .x e P1, as tratado co o u 7nico ob(eto .ou tipo1
Ponto / . Aluno 0ome 1atr End Rua 0o Com+l

) Exe p!os2

dados associados a a!uno2

) a!uno representado pe!o seu no e, n7 ero de atrLcu!a, endere"o, etc ., estruturados e u 7nico ob(eto .ou tipo1
23/11/12 Estrutura de Dados II

81

Tipo Estrutura2 outra for a


Tipo estrutura2
) tipo de dado co ais si p!es
struct /onto { #-oat 9" #-oat y" !" 777 int ,ain$ ' { struct /onto /" 777 /79 = 1070" /7y = 570&/79"
23/11/12

ca pos co postos de tipos

:* declara ponto do tipo struct *: ) e!e entos acessados atra$s do operador de acesso HpontoIJ..1

:* declara p como varivel do tipo struct ponto *: :* acessa os elementos de ponto *:

Estrutura de Dados II

82

Tipo Estrutura2 Exe p!o


:* Ca/tura e i,/ri,e as coor*ena*as *e u, /onto Dua-Duer *: <inc-u*e %st*io7=> struct /onto { 2asta escrever &/79 #-oat 9" em lu*ar de &$/79'7 #-oat y" 3 o+erador de acesso !" ao cam+o da estrutura int ,ain $voi*' tem +reced4ncia so5re { o o+erador 6endereo de7 struct /onto /" /rint#$5Ei;ite as coor*ena*as *o /onto$9 y'F 5'" scan#$5)# )#5, &/79, &/7y'" /rint#$5G /onto #orneci*o #oiF $)72#,)72#'8n5, /79, /7y'" return 0" !

23/11/12

Estrutura de Dados II

83

Passa/e

de estruturas por $a!or para fun"=es


de $ari*$eis si p!es

an*!o/a K passa/e

fun"#o recebe toda a estrutura co o parF etro2


) fun"#o acessa a cpia da estrutura na pi!Da ) fun"#o n#o a!tera os $a!ores dos ca pos da estrutura ori/ina! ) opera"#o pode ser custosa se a estrutura for uito /rande

:* #unHIo Due i,/ri,e as coor*ena*as *o /onto *: voi* i,/ri,e $struct /onto /' { /rint#$5G /onto #orneci*o #oiF $)72#,)72#'8n5, /79, /7y'" !

23/11/12

Estrutura de Dados II

8-

Estuturas co o $a!or de retorno


:* Ca/tura e i,/ri,e as coor*ena*as *e u, /onto Dua-Duer *: <inc-u*e %st*io7=> struct /onto { #-oat 9" #-oat y" !" struct /onto -e$voi*'{ struct /onto t,/" /rint#$5Ei;ite as coor*ena*as *o /onto$9 y'F 5'" scan#$5)# )#5, &t,/79, &t,/7y'" return t,/" ! int ,ain $voi*' { struct /onto /=-e$'" /rint#$5G /onto #orneci*o #oiF $)72#,)72#'8n5, /79, /7y'" return 0" !
23/11/12 Estrutura de Dados II 85

Defini"#o de 6o$os Tipos


tPpedef
) per ite criar no es de tipos ) 7ti! para abre$iar no es de tipos e para tratar tipos co p!exos
ty/e*e# unsi;ne* c=ar 3C=ar" ty/e*e# #-oat Aetor[4]" Aetor v" 777 v[0] = 3" :* e9e,/-o *e *ec-araHIo usan*o Aetor *:

M3Dar Vetor u

o tipo cDar se

sina! $etor de &uatro e!e entos

tipo &ue representa u

23/11/12

Estrutura de Dados II

88

Defini"#o de 6o$os Tipos


K ty/e*e#
) Exe p!o2 defini"#o de no es de tipos para as estruturas
struct /onto { #-oat 9" #-oat y" !" ty/e*e# struct /onto Ponto" ty/e*e# struct /onto *PPonto"

ponto

representa u a estrutura co

2 ca pos do tipo float

K Ponto representa a estrutura ponto K PPonto representa o tipo ponteiro para a estrutura ponto

23/11/12

Estrutura de Dados II

8@

Defini"#o de 6o$os Tipos


tPpedef
) Exe p!o2 .defini"#o uti!i'ando u
struct ponto B f!oat x< f!oat P< C< tPpedef struct ponto Ponto, APPonto<

s tPpedef1

ponto Ponto

representa u a estrutura co representa a estrutura ponto

2 ca pos do tipo f!oat

PPonto representa o tipo ponteiro para a estrutura Ponto

23/11/12

Estrutura de Dados II

8E

Defini"#o de 6o$os Tipos


K ty/e*e#
) Exe p!o2 .defini"#o e u co ando s1

ty/e*e# struct /onto { #-oat 9" #-oat y" ! Ponto"

ponto Ponto

representa u a estrutura co representa a estrutura ponto

2 ca pos do tipo f!oat

23/11/12

Estrutura de Dados II

8?

GninDa ento de Estruturas


GninDa ento de estruturas2
) ca pos de u a estrutura pode ) Exe p!o2
defini"#o de 3Lrcu!o usando Ponto
struct circu-o { Ponto /" #-oat r" !"

ser outras estruturas

:* centro *o cJrcu-o *: :* raio *o cJrcu-o *:

ty/e*e# struct circu-o Circu-o"

23/11/12

Estrutura de Dados II

@:

GninDa ento de Estruturas


:* Funo para a calcular distncia entre 2 pontos: entrada: ponteiros para os pontos c lculo da distncia% sada: distncia correspondente 2 2 d= ( x x ) +( y y ) 2 1 2 1 *: #-oat *istancia $Ponto /, Ponto D' sDrt da 5i5lioteca ,at=7= { #-oat *=sDrt$$D79K/79'*$D79K/79'&$D7y K /7y'*$D7y K /7y''" return *" !

:* Funo para determinar se um ponto est ou no dentro de um crculo: entrada: ponteiros para um crculo e para um ponto sada: 1 = ponto dentro do crculo 0 = ponto fora do crculo *: c7/ F valor do centro de c int interior $Circu-o c, Ponto /' { / F valor do ponto #-oat * = *istancia$c7/, /'" return $* % c7r'" !
23/11/12 Estrutura de Dados II @1

GninDa ento de Estruturas


<inc-u*e %st*io7=> <inc-u*e %,at=7=> ty/e*e# struct /onto { #-oat 9" #-oat y" ! Ponto" ty/e*e# struct circu-o { Ponto /" :* centro *o cJrcu-o *: #-oat r" :* raio *o cJrcu-o *: ! Circu-o" int ,ain $voi*' { Circu-o c" Ponto /" /rint#$5Ei;ite as coor*ena*as *o centro e o raio *o circu-oF8n5'" scan#$5)# )# )#5, &c7/79, &c7/7y, &c7r'" /rint#$5Ei;ite as coor*ena*as *o /ontoF8n5'" scan#$5)# )#5, &/79, &/7y'" /rint#$5Pertence ao interior = )*8n5, interior$c,/''" return 0" !
23/11/12 Estrutura de Dados II @2

Vetores de Estruturas
Exe p!o2
) fun"#o para ca!cu!ar o centro /eo trico de con(unto de pontos
entrada2 $etor de estruturas definindo o con(unto de pontos saLda2 centro /eo trico, dado por2

xi x= n

yi y= n

23/11/12

Estrutura de Dados II

@3

Vetores de Estruturas
Ponto centro.;eo, $int n, Ponto v[]' { int i" Ponto / = {070#, 070#!" :* *ec-ara e inicia-i0a /onto *: #or $i=0" i%n" i&&' { /79 &= v[i]79" /7y &= v[i]7y" 3o o $ u ! $etor de /79 := n" estruturasT /7y := n" return /" !

) fun"#o retornando estrutura2


para estruturas pe&uenas, este recurso faci!ita o uso da fun"#o para estruturas /randes, a cpia do $a!or de retorno pode ser cara

23/11/12

Estrutura de Dados II

@-

Vetores de Estruturas
Exe p!o2
) fun"#o para ca!cu!ar a *rea de u po!L/ono p!ano de!i itado por u a se&40ncia de n pontos
a *rea do po!L/ono a so a das *reas dos trap'ios for ados pe!os !ados do po!L/ono e o eixo x a *rea do trap'io definido pe!a aresta &ue $ai do ponto pi ao ponto piU1 dada por2
y pi pi+1

a= ( x i+ 1 x i )( y i+ 1 +y i )/ 2
a!/u as H*reasI s#o ne/ati$as as *reas externas ao po!L/ono s#o anu!adas

yi

yi+1

x se a se&40ncia de pontos do po!L/ono for dada e sentido anti+Dor*rio, a H*reaI ter* $a!or ne/ati$o e a *rea do po!L/ono o $a!or abso!uto do resu!tado da so a.
i

xi+1

23/11/12

Estrutura de Dados II

@5

Vetores de Estruturas
#-oat area $int n, Ponto* /' { int i, L" #-oat a = 0" #or $i=0" i%n" i&&' { L = $i&1' ) n" :* +r8!imo 9ndice :incremento circular; *: a &= $/[L]79 K /[i]79'*$/[i]7y & /[L]7y':2" ! return #abs$a'" !

#abs
fun"#o definida e ,at=7= $a!or rea! retorna o $a!or abso!uto de u

23/11/12

Estrutura de Dados II

@8

Tipo Estrutura2 ponteiro para estruturas


Ponteiros para estruturas2
) acesso ao $a!or de u ) acesso ao valor de u ca po x de u a $ari*$e! estrutura p2 ca po x de u a $ari*$e! ponteiro pp2 /79 //K>9

) acesso ao endereo do ca po x de u a $ari*$e! ponteiro pp2 &//K>9


struct /onto /" struct /onto *//=&/" 777 $*//'79 = 1270" :* formas equivalentes de acessar o valor de um campo x *: //K>9 = 1270" /79 = 1270" $&/'K>9 =1270"

23/11/12

Estrutura de Dados II

@@

Tipo Estrutura2 ponteiro para estruturas


Pi!Da de
struct /onto { #-oat 9" #-oat y" !" int ,ain $ ' { struct /onto / = { 10,20!" struct /onto *//=&/" 777 !

e ria

@:2: @:18 @:12 @::E

main

> =

2: 1:

@::@:::

'ual o valor de <)


/7y //79
23/11/12

//K>9

&$//K>y' $&/'K>9 &$/7y'


@E

Estrutura de Dados II

Tipo Estrutura2 ponteiro para estruturas


Passa/e de estruturas por refer0ncia para fun"#o
apenas o ponteiro da estrutura passado, es o &ue n#o se(a necess*rio a!terar os $a!ores dos ca pos dentro da fun"#o
:* #unHIo Due i,/ri,a as coor*ena*as *o /onto *: voi* i,/ri,e $struct /onto* //' { /rint#$5G /onto #orneci*o #oiF $)72#,)72#'8n5, //K>9, //K>y'" ! voi* ca/tura $struct /onto* //' { /rint#$5Ei;ite as coor*ena*as *o /onto$9 y'F 5'" scan#$5)# )#5, &//K>9, &//K>y'" ! int ,ain $voi*' { struct /onto /" ca/tura$&/'" i,/ri,e$&/'" return 0" !

23/11/12

Estrutura de Dados II

@?

Tipo Estrutura2 ponteiro para estruturas


G!oca"#o dinF ica de estruturas
ta anDo do espa"o de e ria a!ocado dina ica ente dado pe!o operador si'eof ap!icado sobre o tipo estrutura fun"#o a!!oc retorna o endere"o do espa"o a!ocado, &ue ent#o con$ertido para o tipo ponteiro da estrutura
struct /onto* /" / = $struct /onto*' ,a--oc $si0eo#$struct /onto''" 777 /K>9 = 1270" 777 #ree$/'"

23/11/12

Estrutura de Dados II

E:

Tipo Estrutura2 $etores de ponteiros para estruturas


Exe p!o2
) tabe!a co dados de a!unos, or/ani'ada e u $etor ) dados de cada a!uno2

atrLcu!a2 n7 ero inteiro no e2 cadeia co te!efone2 at E: caracteres at 12: caracteres at 2: caracteres endere"o2 cadeia co cadeia co

23/11/12

Estrutura de Dados II

E1

Tipo Estrutura2 $etores de ponteiros para estruturas


Vo!u"#o 12
) G!uno
estrutura ocupando pe!o enos -UE1U121U21 > 22@ WPtes

) tab
$etor de G!uno representa u desperdLcio si/nificati$o de e ria, se o n7 ero de a!unos for be inferior ao *xi o esti ado

struct a-uno { int ,at" c=ar no,e[M1]" c=ar en*[121]" c=ar te-[21]" !" ty/e*e# struct a-uno N-uno" <*e#ine 6NO 100 N-uno tab[6NO]"
23/11/12 Estrutura de Dados II E2

Tipo Estrutura2 $etores de ponteiros para estruturas


Vo!u"#o 2 .usada no &ue se se/ue12
) tab
$etor de ponteiros para G!uno e!e ento do $etor ocupa espa"o de u a!oca"#o dos dados de u ponteiro

a!uno no $etor2

) no$a cpia da estrutura G!uno a!ocada dina ica ente ) endere"o da cpia ar a'enada no $etor de ponteiros

posi"#o $a'ia do $etor2 $a!or o ponteiro nu!o

struct a-uno { int ,at" c=ar no,e[M1]" c=ar en*[121]" c=ar te-[21]" !" ty/e*e# struct a-uno N-uno" <*e#ine 6NO 100 N-uno* tab[6NO]"
23/11/12 Estrutura de Dados II E3

Tipo Estrutura2 $etores de ponteiros para estruturas


Inicia!i'a + fun"#o para inicia!i'ar a tabe!a2
) recebe u $etor de ponteiros .parF etro de$e ser do tipo Hponteiro para ponteiroI1 ) atribui 6MQQ a todos os e!e entos da tabe!a voi* inicia-i0a $int n, N-uno** tab' { int i" #or $i=0" i%n" i&&' tab[i] = 2344" !

23/11/12

Estrutura de Dados II

E-

Tipo Estrutura2 $etores de ponteiros para estruturas


PreencDe + fun"#o para ar a'enar no$o a!uno na tabe!a2
) recebe a posi"#o onde os dados ser#o ar a'enados ) dados s#o fornecidos $ia tec!ado, se a posi"#o da tabe!a esti$er $a'ia, fun"#o a!oca no$a estrutura, caso contr*rio, fun"#o atua!i'a a estrutura (* apontada pe!o ponteiro voi* /reenc=e $N-uno** tab, int i' { i# $tab[i]==2344' tab[i] = $N-uno*',a--oc$si0eo#$N-uno''" /rint#$5?ntre co, a ,atricu-aF5'" scan#$5)*5, &tab[i]K>,at'" 777 !

23/11/12

Estrutura de Dados II

E5

Tipo Estrutura2 $etores de ponteiros para estruturas


Xetira + fun"#o para re o$er os dados de u
) recebe a posi"#o da tabe!a a ser !iberada ) !ibera espa"o de ria uti!i'ado para os dados do a!uno

a!uno da tabe!a2

voi* retira $N-uno** tab, int i' { i# $tab[i] P= 2344' { #ree$tab[i]'" tab[i] = 2344" :* in*ica Due na /osiHIo nIo ,ais e9iste *a*o *: ! !

23/11/12

Estrutura de Dados II

E8

Tipo Estrutura2 $etores de ponteiros para estruturas


I pri e + fun"#o para i pri ir os dados de u
) recebe a posi"#o da tabe!a a ser i pressa voi* i,/ri,e $N-uno** tab, int i' { i# $tab[i] P= 2344' { /rint#$56atrJcu-aF )*8n+, tab[i]K>,at'" /rint#$52o,eF )s8n+, tab[i]K>no,e'" /rint#$5?n*ereHoF )s8n+, tab[i]K>en*'" /rint#$5Qe-e#oneF )s8n+, tab[i]K>te-'" ! !

a!uno da tabe!a2

23/11/12

Estrutura de Dados II

E@

Tipo Estrutura2 $etores de ponteiros para estruturas


I pri eStudo + fun"#o para i pri ir todos os dados da tabe!a2
) recebe o ta anDo da tabe!a e a prpria tabe!a voi* i,/ri,e.tu*o $int n, N-uno** tab' { int i" #or $i=0" i%n" i&&' i,/ri,e$tab,i'" !

23/11/12

Estrutura de Dados II

EE

Tipo Estrutura2 $etores de ponteiros para estruturas


Pro/ra a de teste
<inc-u*e %st*io7=> int ,ain $voi*' { N-uno* tab[10]" inicia-i0a$10,tab'" /reenc=e$tab,0'" /reenc=e$tab,1'" /reenc=e$tab,2'" i,/ri,e.tu*o$10,tab'" retira$tab,0'" retira$tab,1'" retira$tab,2'" return 0" !
23/11/12 Estrutura de Dados II E?

Tipo Estrutura2 $etores de ponteiros para estruturas


Exe p!o 2 .tarefa no !aboratrio12
) u a uni$ersidade uti!i'a u siste a infor ati'ado para contro!ar os candidatos ao seu curso de Infor *tica. Gs infor a"=es referentes aos candidatos s#o antidas e dados estruturados do tipo 3andidato, descrito a se/uir2
st(uct data { int dia, mes, ano; '; t>*edef st(uct data Lata; st(uct candidato { int insc(; cha( nome[ "]; float nota; Lata .nasc; '; t>*edef st(uct candidato 8and; 23/11/12 Estrutura de Dados II ?:

Tipo Estrutura2 $etores de ponteiros para estruturas


Oun"#o para a!ocar dina ica ente e inicia!i'ar u ponteiros2 $etor de
) recebe o ta anDo do $etor de ponteiros co o parF etro ) G!oca o no$o $etor dina ica ente e $erifica se est* %Y ) atribui 6MQQ a todos os e!e entos do $etor ) Xetorna o ponteiro para o no$o $etor .de$e ser do tipo Hponteiro para ponteiro para 3andI1 Can*** cria.vetor $int n' { int i" Can*** vet = $Can***' ,a--oc$n*si0eo#$Can**''" i#$vetP=2344' #or $i=0" i%n" i&&' vet[i] = 2344" return vet" !
23/11/12 Estrutura de Dados II ?1

Tipo Estrutura2 $etores de ponteiros para estruturas


Oun"#o &ue cria e preencDe u a no$a $ari*$e! do tipo Data
) recebe os $a!ores &ue ser#o ar a'enados ) G!oca dina ica ente u a no$a $ari*$e! do tipo Data ) PreencDe os $a!ores da $ari*$e! ) Xetorna u ponteiro para a no$a $ari*$e!

Eata* cria.*ata$int *ia, int ,es, int ano' { Eata* / = $Eata*' ,a--oc$si0eo#$Eata''" i#$/P=2344' { /K>*ia = *ia" /K>,es = ,es" /K>ano = ano" ! return /" !
23/11/12 Estrutura de Dados II ?2

Tipo Estrutura2 $etores de ponteiros para estruturas


Oun"#o &ue cria e preencDe u a no$a $ari*$e! do tipo 3and
) recebe os $a!ores &ue ser#o ar a'enados ) G!oca dina ica ente u a no$a $ari*$e! do tipo 3and ) PreencDe os $a!ores da $ari*$e! ) Xetorna u ponteiro para a no$a $ari*$e!

Can** cria.can*i*ato$int inscr, c=ar* no,e, #-oat nota, int *ia, int ,es, int ano' { Can** / = $Can**' ,a--oc$si0eo#$Can*''" i#$/P=2344' { /K>inscr = inscr" strc/y$/K>no,e, no,e'" E se cria_data /K>nota = nota" no conse*uir /K>nasc = cria.*ata$*ia, ,es, ano'" alocar uma nova ! vari vel) return /" !
23/11/12 Estrutura de Dados II ?3

Tipo Estrutura2 $etores de ponteiros para estruturas


Can** cria.can*i*ato$int inscr, c=ar* no,e, #-oat nota, int *ia, int ,es, int ano' { Can** / = $Can**' ,a--oc$si0eo#$Can*''" i#$/P=2344' { /K>inscr = inscr" strc/y$/K>no,e, no,e'" /K>nota = nota" /K>nasc = cria.*ata$*ia, ,es, ano'" i#$/K>nasc == 2344' { #ree$/'" / = 2344" ! ! return /" !
23/11/12 Estrutura de Dados II ?-

Tipo Estrutura2 $etores de ponteiros para estruturas


Oun"#o para i pri ir os dados ar a'enados e
) recebe o ponteiro para o $etor e o seu ta anDo voi* i,/ri,e.vetor$int n, Can*** vet' { int i" #or$i=0" i%n" i&&' { i# $vet[i] P= 2344' { /rint#$5RnscricaoF )*8n+, vet[i]K>inscr'" /rint#$52o,eF )s8n+, vet[i]K>no,e'" /rint#$52otaF )71#8n+, vet[i]K>nota'" /rint#$5Eata *e nasci,entoF )2*:)2*:)2*8n8n+, vet[i]K>nascK>*ia, vet[i]K>nascK>,es, vet[i]K>nascK>ano'" ! ! !
23/11/12 Estrutura de Dados II ?5

$etor2

Tipo Estrutura2 $etores de ponteiros para estruturas


Oun"#o para !iberar todo o espa"o de e ria a!ocado2

) recebe o ponteiro para o $etor e o seu ta anDo voi* i,/ri,e.-ibera$int n, Can*** vet' { int i" #or$i=0" i%n" i&&' { i# $vet[i] P= 2344' #ree$vet[i]K>nasc'" #ree$vet[i]'" ! #ree$vet'" !

23/11/12

Estrutura de Dados II

?8

Tipo Estrutura2 $etores de ponteiros para estruturas


Pro/ra a de teste
<inc-u*e %st*io7=> int ,ain $voi*' { Can*** v = novo.vetor$3'" i# $v==2344' { /rint#$(6e,oria insu#iciente8n+'" return 1" ! v[0]=novo.can*i*ato$123,(Soao Ti-va+, 73,10,11,1 M0'" v[1]=novo.can*i*ato$124,(Nna Tou0a+, 75,2,M,1 75'" v[2]=novo.can*i*ato$125,(Pe*ro Tantos+,775,1,5,1 M2'" i,/ri,e.vetor$3,v'" -ibera.vetor$3,v'" return 0" !
23/11/12 Estrutura de Dados II ?@

Xefer0ncias
Za!de ar 3e!es, Xenato 3er&ueira, Jos Qucas Xan/e!, Introduo a Estruturas de Dados, Editora 3a pus .2::-1

3apLtu!o 5 ) Vetores e a!oca"#o dinF ica 3apLtu!o E ) Tipos estruturados

23/11/12

Estrutura de Dados II

?E

[ Nateria! adaptado por Jos Viterbo Oi!Do a partir dos s!ides e!aborados por Narco Gntonio 3asano$a e Narce!o \attass para o curso de Estrutura de Dados para En/enDaria, da PM3+Xio. 3o Xan/e!, Editora 3a pus .2::-1. base no !i$ro Introduo a Estruturas de Dados, de Za!de ar 3e!es, Xenato 3er&ueira e Jos Qucas

23/11/12

Estrutura de Dados II

??

Das könnte Ihnen auch gefallen