Академический Документы
Профессиональный Документы
Культура Документы
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 !.
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
23/11/12
Estrutura de Dados II
dia dos
fo( (i=#; i<6; i))) { s = s ) v[i]; ' *(intf(+,f+, s); (etu(n #; '
23/11/12 Estrutura de Dados II ?
23/11/12
Estrutura de Dados II
1:
23/11/12
Estrutura de Dados II
11
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
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 #; '
espa"o de
e ria desconDecido
1@
Estrutura de Dados II
$a!ores de
b=20
$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: 1:
@::@:::
23/11/12
Estrutura de Dados II
1?
$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:
2: 2: 1: 2: 1:
23/11/12
Estrutura de Dados II
2:
$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:
2: 1: 1: 2: 1:
23/11/12
Estrutura de Dados II
21
$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:
2: 1: 2: 2: 1:
23/11/12
Estrutura de Dados II
22
$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: 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-
$a!ores de
$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: 1:
@::@:::
23/11/12
Estrutura de Dados II
28
$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:
+ @::@::: 2: 1:
23/11/12
Estrutura de Dados II
2@
$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:
2: @::@::: 2: 1:
23/11/12
Estrutura de Dados II
2E
$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:
2: @::@::: 1: 1:
23/11/12
Estrutura de Dados II
2?
$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:
2: @::@::: 1: 2:
23/11/12
Estrutura de Dados II
3:
$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
1: 2:
@::@:::
&etores e Ponteiros
int v[7]={1,3,5,7, ,11,13!" int i"
ou% 1"0 1$6 i v[6] 1$2
13 11 ? @ 5 3 1
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
13 11 ? @ 5 3 1
23/11/12
Estrutura de Dados II
Vetores e Ponteiros
int v[7]"
1"0
'uem ( v)
13
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
Ou seja:
1"0 1$6 1$2 12# 12" 120 116 112 10# 10"
35
&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
23/11/12
Estrutura de Dados II
3@
-. 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 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
-:
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
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
--
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
23/11/12
Estrutura de Dados II
-8
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
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
-@
23/11/12
Estrutura de Dados II
-E
23/11/12
Estrutura de Dados II
-?
) retorna u
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
endere"o de
Estrutura de Dados II
$etor de 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
' (
.ivre
.ivre v ' (
23/11/12
Estrutura de Dados II
52
$ 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
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 = )#
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
es o aps o
23/11/12
Estrutura de Dados II
5E
so!u"#o
23/11/12
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:
) Exe p!os2
) 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
:* declara ponto do tipo struct *: ) e!e entos acessados atra$s do operador de acesso HpontoIJ..1
Estrutura de Dados II
82
23/11/12
Estrutura de Dados II
83
Passa/e
an*!o/a K passa/e
:* #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-
M3Dar Vetor u
o tipo cDar se
23/11/12
Estrutura de Dados II
88
ponto
representa u a estrutura co
K Ponto representa a estrutura ponto K PPonto representa o tipo ponteiro para a estrutura ponto
23/11/12
Estrutura de Dados II
8@
s tPpedef1
ponto Ponto
23/11/12
Estrutura de Dados II
8E
ponto Ponto
23/11/12
Estrutura de Dados II
8?
23/11/12
Estrutura de Dados II
@:
:* 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
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 /" !
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
23/11/12
Estrutura de Dados II
@@
e ria
main
> =
2: 1:
@::@:::
//K>9
Estrutura de Dados II
23/11/12
Estrutura de Dados II
@?
23/11/12
Estrutura de Dados II
E:
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
) 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
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
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
23/11/12
Estrutura de Dados II
E-
23/11/12
Estrutura de Dados II
E5
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
a!uno da tabe!a2
23/11/12
Estrutura de Dados II
E@
23/11/12
Estrutura de Dados II
EE
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
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
$etor2
) 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
Xefer0ncias
Za!de ar 3e!es, Xenato 3er&ueira, Jos Qucas Xan/e!, Introduo a Estruturas de Dados, Editora 3a pus .2::-1
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
??