Você está na página 1de 42

ED Estrutura de Dados

Tpico 2

Tpicos da disciplina
1) Tipos de Dados:
Tipos Primitivos;
Mecanismos para Construo de Tipos;
Variveis, Declaraes e Expresses
2) Matrizes:
Matri!es "nidimensionais e Multidimensionais;
Matri!es Especiais e Matri!es Esparsas
3) Cadeias de Caracteres:
Tipos;
#peraes e aplicaes

Tpicos da disciplina
4) Listas Lineares:
Conceituao;
#peraes $ %epresentao;
&istas c$ Descritor; &istas Duplamente Encadeadas
Pil'as, (ilas e %ecursividade;
5) rvores:
De)inio $ Terminolo*ia $ %epresentao;
+rvores ,inrias;
-plicaes;
Construo de +rvores;
Camin'amento em +rvores
) !es"uisa de Dados:
Pes.uisa /e.0encial e Pes.uisa ,inria

#etores$ Matrizes e %trin&s



1 2 3 4 5 6 7 8
1 9%9 9#9 9:9 9-9 9&9 9D9 :"&& lixo
2 9;9 'E' 9/9 9,9 :"&& lixo lixo lixo
3 9C9 9#9 9/9 9T9 9-9 :"&& lixo lixo

1 2 3 4 5 6 7 8
1 9%9 9#9 9:9 9-9 9&9 9D9 :"&& lixo
2 9;9 'E' 9/9 9,9 :"&& lixo lixo lixo
3 9C9 9#9 9/9 9T9 9-9 :"&& lixo lixo
#<servao= Pode se acessar tam<>m .ual.uer caracter de .ual.uer uma
das strin*s, isto > )eito utili!ando os dois ?ndices, como por
exemplo, no(e)1*)1* > caracter +E,
Cria um vetor com 4 strin*s com 8 caracteres @ 9A19 B:"&&C cada
uma Para acessar uma strin* particular deve se especi)icar apenas o
?ndice es.uerdo, ou seDa, nomeE1F, nomeE2F ou nomeE3F
nomeE1F G H%#:-&DI
nomeE2F G H;E/,I
nomeE3F G HC#/T-I

-nicia.iza/0o de (atrizes e vetores
-nicia.iza/0o de u( vetor de caracteres

-nicia.iza/0o de (atrizes e vetores se( ta(an1os
-nicia.iza/0o de (atrizes (u.tidi(ensionais

E2erc3cios:
2C Crie um pro*rama .ue rece<a e arma!ene em um vetor 21 notas de um
aluno
3C Crie um pro*rama .ue permite arma!enas : nomes e idades em dois
vetores
4C Crie um pro*rama .ue reali!a a soma de duas matri!es B- e ,C
<idimensionais de taman'o 5
5C Escreva um pro*rama em C .ue rece<e via teclado um conDunto de
letras Bmximo 31C -rma!ene todas as letras em um vetor BletrasC at> .ue o
usurio di*ite um E/C Bcdi*o 38C &o*o aps copie todas as
letras Bem ordem inversaC para outro vetor BinversoC -o )inal imprima
os dois vetores

Matrizes 4nidi(ensionais 5#etores)

Matri! > uma coleo de variveis do mesmo


tipo, re)erenciadas por um nome comum;

Matriz unidi(ensiona. J vetor 6 arra7 Bcresce


em apenas 2 dimensoC;

"m elemento espec?)ico > acessado por um


?ndice;
K Exemplos=
L T-!8 98ME:#;< )T;M;9=8*>
L int x E211F; $$ reserva 211 elementos inteiros
L c'ar pE21F; $$ cria vetor com 21 caracteres

Matrizes 4nidi(ensionais 5#etores)

M uma estrutura de dados 'omo*Nnea e de


acesso aleatrio;
K =o(o&?nea: cont>m elementos do mesmo tipo;
K ;cesso ;.eatrio: todos os seus elementos so
acess?veis a .ual.uer momento;
void main (void)
{
int x[100];
int t;
for (t=0; t<100; t++) x[ t ] = t;
}

Matrizes @idi(ensionais

Matri! de inteiros com duas dimenses


int num E3FE4F;

Para acessar o ponto 2,3 da matri!


num E2FE3F
2 3 4 5
6 7 8 O
P 21 22 23
num E t F E i F
1 2 3 4
1
2
3

Matriz e ponteiros

Qerando um ponteiro para uma matri!


int Rp;
int notasE21F;
$$ ponteiro apontando para o primeiro endereo da
matri! notas
p J notas;

Passando uma (atriz para uma Aun/0o
void main (void)
{
int i[10];
//chama a funo e a!!a o endereo de i
cada!tra(i);
"
"
"
}
void cadastra (int *x) /* ponteiro */
{
...
}

Passando uma (atriz para uma Aun/0o
void main (void)
{
int i[10];
//chama a funo e a!!a o endereo de i
cada!tra(i);
"
"
"
}
void cadastra (int x[10]) /* matriz dimensionada
*/
{
...
}

Passando uma (atriz para uma Aun/0o
void main (void)
{
int i[10];
//chama a funo e a!!a o endereo de i
cada!tra(i);
"
"
"
}
void cadastra (int x[]) /* matriz no-dimensionada */
{
...
}

<esu(o B Matriz para Aun/0oCCC

Passando matri! unidi(ensiona. para )unes


void main BvoidC
S
int iE21F;
)uncao2BiC;
T
void )uncao2 Bint RxC
S U T
void )uncao2 Bint xE21FC
S U T
void )uncao2 Bint xE FC
S U T

Passando uma (atriz Didi(ensiona.
para uma Aun/0o
void main (void)
{
int i[10][#0];
//chama a funo e a!!a o endereo de i
cada!tra(i);
"
"
"
}
void cadastra (int x[][20])
{
...
}

Matrizes Especiais

- representao vista at> a*ora *uarda todos os elementos


da matri! (re.uentemente ocorrem matri!es de nVmeros
apresentando uma <oa parte de elementos nulos

Deixando de *uardar estes elementos nulos, podemos


)a!er uma economia ra!ovel de memria

/e os elementos nulos esto concentrados em uma re*io


da matri!, como por exemplo acima da dia*onal principal,
ento podemos lanar mo de representaes especiais,
simples e compactas

Matrizes

"ma matri! pode ser encarada como uma )uno


.ue, dados os ?ndices, )ornece o valor arma!enado
na posio correspondente

Considere a se*uinte matri! <idimensional M )3$4* de


reais=

Temos ento .ue= x J ME3FE4F J 4,2



Matrizes

Essa matri! poderia ser representada de maneira alternativa por um


VET#% de re*istros BstructC .ue arma!enaria a posio
Blin'a,colunaC e o valor de cada elemento
M )3$4*

Matrizes

- representao seria =
t7pedeA struct S
s'ort int lin'a;
s'ort int coluna;
)loat valor;
T re*istroWdeWmatri!;
re&istro:de:(atriz vetorE22F;

Essa representao *astaria muito mais memria do .ue A.oat M )3*)4*;

"sando um %EQ;/T%# BstructC seriam *astos 3 <Xtes a mais por elemento


arma!enado para *uardar sua lin'a e coluna;

Matrizes

Entretanto, ' casos em .ue essa representao seria,


ao contrrio, econYmica

-penas OZ da matri! possui valores di)erentes do


Hvalor[padroI
M )1E$1E*

Matrizes

Teste o exemplo a<aixo=



Matrizes

Teste o exemplo a<aixo=



Matrizes

Pensando no processo de alocao de memria para a matri!


a<aixo, demonstre .ual seria o valor alocado na memria para um
vetor de estrutura Bre&istro:de:(atriz vetor)FF*C e para a matri!
completa BM )1E$1E*C \ual *astaria maior espao em memria]
M )1E$1E*
t7pedeA struct S
s'ort int lin'a;
s'ort int coluna;
)loat valor;
T re*istroWdeWmatri!;
$$ estrutura completa
re&istro:de:(atriz vetorEPPF;
$$ estrutura apenas para no nulos
re&istro:de:(atriz vetorE8F;
$$ matri! completa
A.oat (atriz vetorEPFEPF;

Matrizes

Pensando no processo de alocao de memria para a matri!


a<aixo, demonstre .ual seria o valor alocado na memria para um
vetor de estrutura Bre&istro:de:(atriz vetor)FF*C e para a matri!
completa BM )1E$1E*C \ual *astaria maior espao em memria]
M )1E$1E*
t7pedeA struct S
s'ort int lin'a;
s'ort int coluna;
)loat valor;
T re*istroWdeWmatri!;
$$ estrutura completa
re&istro:de:(atriz vetorEPPF;
3@3@5 <Xtes R 211 J O11 <Xtes
$$ estrutura apenas para no nulos
re&istro:de:(atriz vetorE8F;
3@3@5 <Xtes R O J 75 <Xtes
$$ matri! completa
A.oat (atriz vetorEPFEPF;
5 <Xtes R 211 J 511 <Xtes
M4-T8 M;-%
EC89GM-C8CCC

Matrizes 5E2erc3cio)

Crie um al*oritmo .ue rece<a os dados de uma matri! de


21x21, e a partir desses dados crie uma estrutura
Bre*istroC apenas com os dados no nulos da matri! :o
)inal o sistema deve di!er .uanto a estrutura ocupou de
memria em <Xtes
M )1E$1E*
t7pedeA struct S
s'ort int lin'a;
s'ort int coluna;
)loat valor;
T re*istroWdeWmatri!;
$$ estrutura completa
re&istro:de:(atriz vetorEPPF;
$$ estrutura apenas para no nulos
re&istro:de:(atriz vetorE8F;
$$ matri! completa
A.oat (atriz vetorEPFEPF;

Matrizes Dia&onais

Considere a matri! M E4,5F de reais a<aixo=

Todos os elementos com i H I s0o nu.os e somente os


e.e(entos da dia&ona. principa. s0o diAerentes de zero;

Podemos utili!ar um vetor de estrutura para arma!enar


este tipo de matri!

Matrizes Trian&u.ares

"m outro caso em .ue se pode economi!ar memria por meio de


uma representao especial > o das matri!es trian*ulares Por
exemplo, as matri!es 6x5 a<aixo so trian*ulares, sendo M
trian*ular superior, e : trian*ular in)erior

M poderia ser *uardada em um vetor=



Matrizes Trian&u.ares

Em uma matri! trian*ular .uadrada BPC o nVmero de elementos no


nulos BmC em P pode ser o<tido por
onde

Matrizes Trian&u.ares

Poder?amos, ento, arma!enar esta matri! num vetor BM-TWVC com m


J 26 posies, da se*uinte maneira=

Mas veDa^

Como vamos sa<er .ue o elemento M-TE5, 4F J M-TWVEPF J 3 ]



Matrizes Trian&u.ares

Para acessar um elemento da matri!, atrav>s de suas coordenadas i


e D, numa (atriz trian&u.ar inAerior, podemos utili!ar a se*uinte
re*ra=
5#;LE9D8 (eio !89T8 na !<8#;)

Para acessar um elemento da matri!, atrav>s de suas coordenadas i


e D, numa (atriz trian&u.ar superior, podemos utili!ar a se*uinte
re*ra=
MAT[i, j] = MAT_V[j + (i . (i - 1)) / 2]
Quem enviar primeiro a reposa para
o e-mai! scherolt@gmail.com
"#VA $$$

Matrizes Esparsas

Matri!es esparsas so a.uelas matri!es onde ' uma .uantidade


elevada de elementos nulos Por exemplo=

Podemos otimi!ar o uso de memria arma!enando somente os


elementos no nulos desta matri! num vetor Mas ao arma!enarmos
somente o valor perdemos a posio do elemento na matri!
Portanto, devemos arma!enar, Dunto ao valor, seu respectivo ?ndice
#ETME 6 )51$ 1$ ) 51$ 3$ 3) 52$ 4$ 2) 52$ $ 3) 53$ 2$ 1)*

Estruturas de Dados 5<e&istros)

"ma estrutura de dados > um conIunto de variJveis, possivelmente de


tipos di)erentes, a&rupadas soD u( Knico no(e Estas estruturas
tam<>m so con'ecidas por Hre*istrosI

"ma estrutura > um tipo de dado cuDo )ormato > de)inido pelo
pro*ramador
struct endereco S
c'ar lo*radouroE61F;
int numero;
c'ar complementoE26F;
c'ar <airroE41F;
c'ar cidadeE211F;
c'ar estadoE51F;
c'ar cepEOF;
T;
%e*istro
Campos

Estrutura de Dados 5<e&istros)
/e )or criar apenas uma varivel <asta no colocar
nome para a estrutura e declarar a varivel lo*o ao )inal
struct S
c'ar nomeE41F;
c'ar rua E31F;
c'ar cidade E41F;
T )ic'a;


Estrutura de Dados 5<e&istros)

Para atri<uir valor _ um campo da estrutura


Bre*istroC=
enderecolo*radouro J I/\: 244I;
)ic'anome J H%onald CostaI;

Para imprimir o valor de um campo=


print) B H:ome= ZsI ,)ic'anomeC;


Estrutura de Dados 5<e&istros)
Podemos iniciali!ar um estrutura com dados da se*uinte )orma=
!truct {
char nome[$0];
char rua [#0];
char cidade [$0];
char e!tado [#];
} ficha;
ficha c%iente1 = { &'ona%d (o!ta)* &+,- 11$)* &.ra!/%ia)*
&01) };
#<serve .ue a se.uencia de valores se*ue a ordem dos campos da estrutura

#<ri*ado
!roAessor <ona.d Costa
sc'erolt`*mailcom
Ensino %uperior co( Aoco e( %8LTM;<E L-#<EN
!eda&o&ica(ente corretoCCC %ocia.(ente IustoCCC