Professional Documents
Culture Documents
BooksAudiobooksComicsSheet Music
Categories
Arts & Ideas
Biography & Memoir
Business & Leadership
Children's
Computers & Technology
Cooking & Food
Crafts & Hobbies
Fantasy
Fiction & Literature
Happiness & Self-Help
Health & Wellness
History
Home & Garden
Humor
LGBT
Mystery, Thriller & Crime
Politics & Economy
Reference
Religion
Romance
Science & Nature
Science Fiction
Society & Culture
Sports & Adventure
Travel
Young Adult
Categories
Arts & Ideas
Biography & Memoir
Business & Leadership
Children's
Computers & Technology
Cooking & Food
Fantasy
Categories
Adaptations
Childrens
Crime & Mystery
Fiction
Humor
Manga
Nonfiction
Romance
SciFi, Fantasy & Horror
Superheroes
Young Adult
Publishers
Arcana
Archie Comics
BOOM! Studios
Dynamite
IDW Publishing
Kingstone Comics
Marvel Comics
Space Goat Productions
Top Cow Comics
Top Shelf Productions
Valiant Comics
Zenescope
Difficulty
Beginner
Intermediate
Advanced
Mixed
Instrument
Brass
Drums & Percussion
Guitar, Bass, and Fretted
Piano
Strings
Vocal
Woodwinds
Genre
Classical
Country
Folk
Jazz & Blues
Movies & Musicals
Pop & Rock
Religious & Holiday
Standards
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-ZWF6" height="0"
width="0" style="display:none;visibility:hidden"></iframe>
Welcome to Scribd! Sign in or start your free trial to enjoy books, documents, audiobooks,
and moreFind out more
1
70962949
73956991
1452013199
Clp/8UdHljIluvuCQ
P. 30
Apostila de Estrutura de Dados - C#_atualizada
More info:
Published by: Carlos Henrique Messias on Oct 31, 2011
Direitos Autorais:Attribution Non-commercial
Availability:
Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
Flag for inappropriate content|Acrescentar coleo
See more
See less
scribd. scribd. scribd. scribd. scribd. scribd. scribd. scribd. scribd. scribd.
scribd. scribd. scribd. scribd. scribd. scribd. scribd. scribd. scribd. scribd.
scribd.
Apostila
de
Estrutura
de Dados
e
Algoritmo
s em
C#Prof.
Ms.
Eduardo
R.
Marcelino
eduardormbr@
gmail.com
20 08 /2 0 1
1
Contedo
Tipos Abstratos
de Dados
(TAD)...............
.........................
.........................
.........................
.........................
................... 3
Tipos de Dados
Concretos
(TDC) ..............
.........................
.........................
.........................
.........................
.................. 3
Limitaes de
uma
implementao
.........................
.........................
.........................
.........................
.........................
..... 3
Complexidade
Computacional
.........................
.........................
.........................
.........................
.........................
............ 5
Anlise
assimpttica ....
.........................
.........................
.........................
.........................
.........................
................... 5
Notao O,
(Omega) e Theta
.........................
.........................
.........................
.........................
.........................
...... 6
Melhor Caso ( )
.........................
.........................
.........................
.........................
.........................
..................... 6
Pior Caso - O( )
.........................
.........................
.........................
.........................
.........................
.........................
6
Caso mdio ( )
.........................
.........................
.........................
.........................
.........................
........................
6
Exemplos de
Complexidade .
.........................
.........................
.........................
.........................
.........................
.......... 7
Complexidade
Constante .......
.........................
.........................
.........................
.........................
.........................
.... 7
Complexidade
Linear O(n).................
.........................
.........................
.........................
.........................
............... 7
Complexidade
Logaritmica .....
.........................
.........................
.........................
.........................
.........................
.... 7
Complexidade
Quadrtica O(n
2
) ......................
.........................
.........................
.........................
.........................
.8
Funes
limitantes
superiores mais
conhecidas: .....
.........................
.........................
.........................
..................... 8
Exemplo de
crescimento de
vrias
funes ...........
.........................
.........................
.........................
.......................
8
Tempos de
execuo dos
algoritmos: ......
.........................
.........................
.........................
.........................
............ 9
PILHAS ...........
.........................
.........................
.........................
.........................
.........................
.........................
........ 10
Implementao
de Uma Pilha
Esttica ...........
.........................
.........................
.........................
.........................
........ 11
Exerccios
sobre
Pilhas ..............
.........................
.........................
.........................
.........................
.........................
.. 13
FILAS ..............
.........................
.........................
.........................
.........................
.........................
.........................
........ 14
Implementao
da Fila Esttica
Circular ...........
.........................
.........................
.........................
.........................
..... 15
Exerccio de
Fila e
Pilha: ...............
.........................
.........................
.........................
.........................
........................
17
LISTAS
ESTTICAS ....
.........................
.........................
.........................
.........................
.........................
.................... 18
Implementao
de Lista
Esttica ...........
.........................
.........................
.........................
.........................
................ 19
Exerccios
Sobre Listas,
Filas e
Pilhas ..............
.........................
.........................
.........................
.........................
..... 21
Exerccio
1: .....................
.........................
.........................
.........................
.........................
.........................
............. 21
Exerccio
2: .....................
.........................
.........................
.........................
.........................
.........................
............. 21
Exerccio
3: .....................
.........................
.........................
.........................
.........................
.........................
............. 21
Ponteiros (ou
Apontadores) ..
.........................
.........................
.........................
.........................
.........................
............ 22
Pilhas
Dinmicas
(utilizando
encadeamento)
.........................
.........................
.........................
.........................
............. 23
Implementao
da Pilha
dinmica
utilizando
objetos
encadeados......
..........................
..........................
................ 24
Exerccios: ......
.........................
.........................
.........................
.........................
.........................
.........................
26
Listas
Simplesmente
Encadeadas ....
.........................
.........................
.........................
.........................
.........................
27
Listas
Duplamente
Encadeadas ....
.........................
.........................
.........................
.........................
.........................
.... 27
Listas
Encadeadas
circulares.........
.........................
.........................
.........................
.........................
.........................
... 28
Recursividade
ou
Recurso ........
.........................
.........................
.........................
.........................
.........................
...... 29
Exerccios........
.........................
.........................
.........................
.........................
.........................
.........................
.... 30
Exerccio
1: .....................
.........................
.........................
.........................
.........................
.........................
......... 30
Exerccio
2: .....................
.........................
.........................
.........................
.........................
.........................
......... 30
Exerccio
3: .....................
.........................
.........................
.........................
.........................
.........................
......... 30
Exerccio
4: .....................
.........................
.........................
.........................
.........................
.........................
......... 30
rvores ...........
.........................
.........................
.........................
.........................
.........................
.........................
......... 31
Percurso (ou
Caminhamento
) em
rvores ...........
.........................
.........................
.........................
.........................
...... 32
Percurso
prefixado .........
.........................
.........................
.........................
.........................
.........................
.............. 32
Percurso psfixado ..............
.........................
.........................
.........................
.........................
.........................
........ 32
rvores
Binrias ...........
.........................
.........................
.........................
.........................
.........................
.................... 33
rvores
Binrias de
Busca ..............
.........................
.........................
.........................
.........................
.........................
.. 34
Implementao
de uma rvore
Binria de
Busca em
C# ...................
.........................
.........................
.......................
36
Grafos .............
.........................
.........................
.........................
.........................
.........................
.........................
........ 39
Ordenao.......
.........................
.........................
.........................
.........................
.........................
.........................
........ 40
Quicksort .........
.........................
.........................
.........................
.........................
.........................
.........................
.... 41
2Complexidad
e ......................
.........................
.........................
.........................
.........................
.........................
........ 41
Implementae
s ......................
.........................
.........................
.........................
.........................
.........................
..... 41
Pesquisa em
Memria
Primria ..........
.........................
.........................
.........................
.........................
.......................
44
Pesquisa
seqencial .......
.........................
.........................
.........................
.........................
.........................
.............. 44
Pesquisa
Binria ............
.........................
.........................
.........................
.........................
.........................
.............. 44
Referncias
bsicas para o
material desta
apostila:
[1]PEREIRA
, Silvio do
Lago.
Estruturas de
dados
fundamentais
Conceitos e
aplicaes. So
Paulo: rica,
1996.
[2]ZIVIANI
, Nivio. Projeto
de Algoritmos
com
implementae
s em Pascal e
C, 2. ed. So
Paulo: Pioneira
ThomsonLearni
ng, 2005.
[3]GOODRICH
, M.T.,
TAMASSIA
, R. Estruturas
de Dados e
Algoritmos em
Java, 2. ed.
Porto Alegre:
Bookman,2002
.
[4]
FORBELLONE
, A.L.V.,
EBERSPACHER
, H.F.
,
Lgica de
Programao
A Construo
de Alboritmos
e Estruturade
Dados. 2. ed.
So Paulo:
2000. Makron
Books.
TTTIIIPP
POOOSS
SAAABB
BSSSTTT
RRRAAA
TTTOOO
SSSDDD
EEEDDD
AAADDD
OOOSSS
(((TTTAA
ADDD)))
formado por
um conjunto de
valores e por
uma srie de
funes que
podem ser
aplicadas sobre
estes
valores.Fune
s e valores, em
conjunto,
constituem um
modelo
matemtico que
pode ser
empregado
para modelar
esolucionar
problemas do
mundo real,
servido para
especificar as
caractersticas
relevantes dos
objetos
envolvidos
noproblema, de
que forma eles
se relacionam e
como podem
ser
manipulados. O
TAD define
o que
cada operao
faz,mas no
como
o faz.EX:
TAD
para uma
PILHA
:Empilha (valor)
Insere um
valor no topo da
pilha
Entrada
: valor.
Sada
:
nenhuma.Dese
mpilha - Retira
um valor do
topo da pilha e
o devolve.
Entrada
: nenhuma.
Sada
: valor.
TTTIIIPP
POOOSS
SDDDEE
EDDDAA
ADDDOO
OSSSCC
COOONN
NCCCRR
REEETT
TOOOSS
S(((TTTD
DDCCC))
)
Sendo o TAD
apenas um
modelo
matemtico,
sua definio
no leva em
considerao
como os
valores
serorepresent
ados na
memria do
computador,
nem se
preocupa com o
tempo que
ser gasto para
aplicar as
funes(rotinas)
sobre tais
valores. Sendo
assim, preciso
transformar
este TAD em
um
tipo de dados
concreto
. Ou
seja,precisamos
implementar
(programar) as
funes
definidas no
TAD. durante
o processo de
implementao
que aestrutura
de
armazenamento
dos valores
especificada, e
que os
algoritmos que
desempenharo
o papel das
funesso
projetados.Tipo
Abstrato de
Dados
Implementao
Tipo de Dados
Concreto
LLLIIIMM
MIIITTTA
AA
EEES
SSDDDE
EEUUUM
MMAAAIII
MMMPPP
LLLEEEM
MMEEEN
NNTTTA
AA
OOO
importante
notar que nem
todo TAD pode
ser
implementado
em toda sua
generalidade.
Imagine por
exemplo um
TADque tenha
como funo
mapear todos
os nmeros
primos.
Claramente,
este um tipo
de dados
abstrato que
no podeser
implementado
universalmente,
pois qualquer
que seja a
estrutura
escolhida para
armazenar os
nmeros
primos,nunca
conseguiremos
mapear num
espao limitado
de memria um
conjunto infinito
de
valores.Frequen
temente,
nenhuma
implementao
capaz de
representar um
modelo
matemtico
completamente;
assim,precisam
os reconhecer
as limitaes de
uma
implementao
particular.
Devemos ter
em mente que
podemos
chegar
adiversas
implementae
s para um
mesmo tipo de
dados abstrato,
cada uma delas
apresentando
vantagens
edesvantagens
em relao s
outras. O
projetista deve
ser capaz de
escolher aquela
mais adequada
para resolver
oproblema
especfico
proposto,
tomando como
medidas de
eficincia
da
implementao,
sobretudo, as
suas
necessidades de
espao de
armazenamento
e
tempo de
execuo
. Abaixo, veja o
quadro com a
complexidade
dealguns jogos:
Damas
- 5 x 10 na
potncia 20Cerca
de500.000.000.0
00.000.000.000p
osies
possveis.S em
1994 um
programa foi
capazde vencer
um campeo
mundial. Em2007
o jogo foi
"solucionado"
aponto de ser
possvel um
programaimbatv
el
Poker americano
(Texas holdem)
-10 na potncia
18Cerca de
1.000.000.000.00
0.000.000posie
s possveis.O
campeonato
mundial de
humanoscontra
mquinas
comeou
nestasemana,
com favoritismo
para oshumanos.
Um programa
imbatvelpode
surgir nos
prximos anos
Xadrez
- 1 x 10 na
potncia 45Cerca
de1.000.000.000.
000.000.000.000.
000.000.000.000.
000.000.000.000
posies
possveis.Em
1997, um
supercomputador
venceu um
campeomundial
depois de penar
muito. Para criar
umprograma
imbatvel, porm,
seria preciso de
umcomputador
quntico, uma
mquina que por
enquantos
existe na cabea
dos cientistas.
4
Trecho da
entrevista com
JONATHAN
SCHAEFFER,
pesquisador na
rea de
inteligncia
artificial.
Disponvel em:
(acesso em
25/072007)
http://circuitoint
egrado.folha.blo
g.uol.com.br/arc
h2007-0722_2007-0728.html#2007_0
7-25_07_57_0211453562-0
FOLHA - Voc
pretende
continuar
trabalhando
no problema
para chegar
ao que os
matemticosc
hamam de
uma "soluo
forte",
mapeando
cada uma das
posies do
jogo?
SCHAEFFER -
Muitas pessoas
tm
computadores
com discos
rgidos de 100
gigabytes [10
na potncia 11
bytes]. Se
voctiver uma
adores mais
poderosos do
mundo, voc
encontrar um
disco de 1
petabyte [10 na
potncia 15].
Um discorgido
desses custa
cerca de US$ 1
milho. As
damas tm 10
na potncia 20
posies. Para
poder gravar a
soluoforte do
problema eu
precisaria de
500 mil
petabytes _o
que custaria
US$ 500
bilhes hoje.
Acho que no
muitofactvel.
Se eu
processasse a
soluo, eu
simplesmente
no teria onde
salv-la.
FOLHA - Voc
acha possvel
que algum
encontre uma
soluo para
xadrez como
a que o sr.tem
para damas?
Quando isso
vai ocorrer?
SCHAEFFER -
No consigo
conceber
algum
conseguindo
isso por um
longo tempo, a
no ser que
haja
avanosfundam
entais de
grande impacto.
O nmero de
posies do
xadrez da
ordem de 10 na
potncia 45.
at difcil
deimaginar
quo grande
isso . No
uma tecnologia
experimental
despontando,
chamada
computao
quntica, que
pode um dia vir
a se
tornarrealidade.
Talvez a
computao
quntica possa
dar conta desse
processamento,
mas ainda h
muito futuro at
l. Eugostaria
de viver tempo
o suficiente
para ver isso,
mas no acho
que vai ser
possvel.Refer
ncias:PEREIRA
, Silvio do Lago.
Estruturas de
dados
fundamentais
Conceitos e
aplicaes. So
Paulo: rica,
1996.
O jogo que
utiliza o
algoritmo criado
porJonathan
est disponvel
em:http://www.c
s.ualberta.ca/~c
hinook/
CCCOOO
MMMPPP
LLLEEEX
XXIIIDDD
AAADDD
EEECCC
OOOMM
MPPPUU
UTTTAA
ACCCIIIO
OONNNA
AALLL
Fontes:
http://www.dca.fee
.unicamp.br/~ting/
Courses/ea869/fa
q1.html http://pt.w
ikipedia.org/wiki/
Complexidade_c
omputacional http
://pt.wikipedia.org/
wiki/Complexidad
e_quadr
%C3%A1tica
O que um
problema
computvel
?
Um problema
computvel
se existe um
procedimento
que o resolve
em um
nmero finito
de passos,
ou seja se
existeum
algoritmo que
leve sua
soluo.Obse
rve que um
problema
considerado
"em
princpio"
computvel
pode no ser
tratvel na
prtica,
devido s
limitaesdos
recursos
computacion
ais para
executar o
algoritmo
implementad
o.
Por que
importante
a anlise de
complexidad
e
computacio
nal de um
algoritmo?
A
complexidade
computacion
al de um
algoritmo diz
respeito aos
recursos
computacion
ais - espao
de memria
e tempode
mquina requeridos
para
solucionar
um
problema.Ger
almente
existe mais
de um
algoritmo
para resolver
um
problema. A
anlise de
complexidade
computacion
al portanto
fundamental
no processo
de definio
de algoritmos
mais
eficientes
para a sua
soluo.
Apesar de
parecercontra
ditrio, com
o aumento
da velocidade
dos
computadore
s, torna-se
cada vez
mais
importante
desenvolveral
goritmos
mais
eficientes,
devido ao
aumento
constante do
"tamanho"
dos
problemas a
serem
resolvidos.
O que
entendemos por
tamanho de um
problema?
O tamanho de
um problema
o tamanho da
entrada do
algoritmo que
resolve o
problema.
Vejamos os
seguintesexemp
los:
A busca em
uma lista de N
elementos ou a
ordenao de
uma lista de N
elementos
requerem mais
operaes
medida que N
cresce;
O clculo do
fatorial de N tem
o seu nmero
de operaes
aumentado com
o aumento de N;
A determinao
do valor de F_N
na sequncia
de Fibonacci
F_0, F_1, F_2,
F_3, ... envolve
uma quantidade
deadies
proporcional ao
valor de N.
A Teoria da
complexidade
computacion
al a parte
da teoria da
computao
que estuda
os recursos
necessrios
duranteo
clculo para
resolver um
problema. O
termo foi
criado pelo
Juris
Hartmanis e
Richard
Stearns[1].
Os
recursoscom
umente
estudados
so o tempo
(nmero de
passos de
execuo de
um algoritmo
para resolver
um
problema) e
oespao
(quantidade
de memria
utilizada para
resolver um
problema).
Pode-se
estudar
igualmente
outros
parmetros,t
ais como o
nmero de
processadore
s necessrios
para resolver
o problema
em paralelo.
A teoria da
complexidade
difereda
teoria da
computabilida
de a qual se
ocupa de
factibilidade
de se
solucionar
um problema
como
algoritmos
efetivossem
levar em
conta os
recursos
necessrios
para ele.Os
problemas
que tm uma
soluo com
ordem de
complexidade
linear so os
problemas
que se
resolvem em
um
tempoque se
relaciona
linearmente
com seu
tamanho.Os
problemas
com custo
fatorial ou
combinatrio
esto
agrupados
em NP. Estes
problemas
no tm uma
soluo
prtica,signifi
ca dizer quer,
uma mquina
no pode
resolver-los
em um
tempo
razovel.
Anlise
assimptt
ica
A importncia
da
complexidade
pode ser
observada no
exemplo
abaixo, que
mostra 5
algoritmos A1 a
A5 para
resolverum
mesmo
problema, de
complexidades
diferentes.
Supomos que
uma operao
leva 1
milisegundo
para ser
efetuada.A
tabela seguinte
d o tempo
necessrio por
cada um dos
algoritmos.Tk(n)
a
complexidade
do algoritmo.
6
A
1
A
2
A
3
A
4
A
5
T
1
n
)=
n
|
T
2
)=
nlogn
T
3
)=
n
2
T
4
n
)=
n
3
T
5
n
)=2
n
16
0,016s
0,064s
0,256s
4s
1m4s
32
0,032s
0,16s
1s
33s
46 dias
512
0,512s
9s
4m22s
1 dia 13h
10
137
sculos
complexidade do
tempo
de um problema
o nmero de
passos que se
toma para
resolver uma
instncia de
umproblema, a
partir do
tamanho da
entrada
utilizando o
algoritmo mais
eficiente
disposio.
Intuitivamente,
caso se
tomeuma
instncia com
entrada de
longitude
n
que pode
resolver-se em
n
passos, se diz
que esse
problema tem
umacomplexida
de em tempo de
n
.
Supostamente,
o nmero exato
de passos
depende da
mquina em
que se
programa,
dalinguagem
utilizada e de
outros fatores.
Para no ter
que falar do
custo exato de
um clculo se
utiliza
anotacoassim
pttica. Quando
um problema
tem custo dado
em tempo O(
) em uma
configurao de
computador e
linguagem,este
custo ser o
mesmo em
todos os
computadores,
de maneira que
esta notao
generaliza a
noo de
custoindepende
ntemente do
equipamento
utilizado.
Notao
O,
(Omega) e
Theta
So usadas trs
perspectivas no
estudo do caso
da
complexidade:
Melhor Caso
( )
Representado por
( )
(mega),
consiste em
assumir que vai
acontecer o
melhor. Pouco
utilizado e de
baixaaplicabilid
ade.Exemplo 1:
Em uma lista
telefnica
queremos
encontrar um
nmero,
assume-se que
a complexidade
do caso melhor
indexao em
um vetor
ouarray, leva o
mesmo tempo
seja qual foro
ndice que se
queira buscar.
Portanto uma
operao de
complexidade
constan
te (1).
Pior Caso O( )
Representado
normalmente
por O( ) (BIG O)
. Se dissermos
que um
determinado
algoritmo
representado
por g(x) e asua
complexidade
Caso Pior n,
ser
representada
por g(x) = O(n).
Consiste em
assumir que o
pior dos casos
podeacontecer,
sendo de
grande
utilizao e
tambm
normalmente o
mais fcil de ser
determinado.Ex
emplo 1: Ser
tomado como
exemplo o jogo
de azar com 3
copos, deve
descobrir-se
qual deles
possui uma
moedadebaixo
dele, a
complexidade
caso pior ser
O(3) pois no
pior dos casos
a moeda ser
encontrada
debaixo do
terceirocopo, ou
seja, ser
encontrada
apenas na
terceira
tentativa.Exemp
lo 2: O
processo mais
comum para
ordenar um
conjunto de
elementos tm
complexidade
quadrtica.
Oprocedimento
consiste em
criar uma
coleo vazia
de elementos. A
ela se
acrescenta, em
ordem, o menor
elemento
doconjunto
original que
ainda no tenha
sido eleito, o
que implica
percorrer
completamente
o conjunto
original (O(n),
sendo
o nmero de
elementos do
conjunto). Esta
percorrida
sobre o
conjunto
original se
realiza at que
se tenha todos
seuselementos
na seqncia de
resultado. Podese ver que h
de se fazer
n
selees (se
ordena todo o
conjunto) cada
umacom um
custo
n
de execuo: o
procedimento
de ordem
quadrtica O(
n
). Deve
esclarecer se
de que h
diversosalgorit
mos de
ordenaocom
melhores
resultados.
Caso mdio -
( )
Representado por
( ) (Theta). Este
o caso que
o mais difcil de
ser
determinado,
pois, necessita
de
anliseestatstic
a e em
conseqncia
de muitos
testes, contudo
muito
utilizado, pois
o que
representa mais
corretamente
acomplexidade
do
algoritmo.Exem
plo: Procurar
uma palavra em
um dicionrio.
Pode-se iniciar
a busca de uma
palavra na
metade do
dicionrio.Imedi
atamente se
sabe se foi
encontrada a
palavra ou, no
caso contrrio,
em qual das
duas metades
deve se repetir
oprocesso (
um
processorecursi
vo) at se
chegar ao
resultado. Em
com afuno
logartmica.
Este
7procedimento
de busca
(conhecido
comobusca
binria) em uma
estruturaordena
datm
complexidade
logartmica
(log
2
n).
Exemplos
de
Complexi
dade
Complexidad
e Constante
Representada
porO(1).Comple
xidadealgortmi
ca cujo tempo
de execuo
independe do
nmero de
elementos na
entrada.
Console.Write("Digite
um texto: "); texto
=Console.ReadLine();
Console.Write("Digite
uma letra: "); letra
=Console.ReadLine()
[0];
Apesar de
termos 4
instrues, o
processo como
um todo ser
considerado
como O(1), pois
neste caso
executar 1 ou
4instrues
irrelevante.
Complexidad
e Linear O(n)
Representada
porO(
n
).Complexidade
algortmica em
que um
pequeno
trabalho
realizado sobre
cada elemento
daentrada. Esta
a melhor
situao
possvel para
um algoritmo
elementos de
entrada ou
produzir
n
elementos de
sada. Cada vez
que
n
dobra de
tamanho o
tempo de
execuo
dobra.Programa
exemplo:
Determinar o
maior elemento
em um vetor:
static voidMain(strin
g[] args) {int[]
numeros = { 7, 5, 21,
33, 79, 8, 6, 29, 44,
10, -5 };intmaior =
numeros[0];for(intn
= 1; n <
numeros.Length; n+
+) {if(numeros[n] >
maior)maior =
numeros[n];}Consol
e.WriteLine(maior);
}
A complexidade
dada por
n
elementos (o
elemento que
determina a
taxa de
crescimento do
algoritmo
acima) ou
O(n)(
linear
). Ou seja,
depende da
quantidade de
elementos no
vetor!
Complexidad
e Logaritmica
Representada
porO(log
n
).
Complexidade
algortmica no
qual algoritmo
resolve um
problema
transformandoo empartes
menores.
Nestes casos, o
tempo de
execuo pode
ser considerado
como sendo
menor do que
uma
constantegrand
e. Por exemplo,
quando
n
um milho,
log
2
aproximadamen
te 20.
Complexidad
e Quadrtica
- O(n
2
)
Representada
porO(n
2
).Complexidade
algortmica que
ocorrem
quando os itens
de dados so
processados
aos
pares,muitas
vezes em uma
repetio dentro
da outra. Por
exemplo,
quando n mil,
o nmero de
operaes da
ordem de
1milho.
Algoritmos
deste tipo
somente so
teis para
resolver
problemas de
tamanhos
relativamente
pequenos.Progr
ama exemplo:
Preencher uma
matriz NxN com
nmeros
aleatrios.
static int[,]
CriaMatriz(inttaman
ho) {int[,] matriz
=new int[tamanho,
tamanho]; Randomr
=new Random();
//preenche a matriz
NxN (onde N =
tamanho) com
nmeros
randomicosfor(inti =
0; i < tamanho; i++)
for(intj = 0; j <
tamanho; j++)
matriz[i, j] =
r.Next(1000);return
matriz;}
A complexidade
dada por
n
2
(i*j)
elementos ou
O(n
2
(quadrtica)
Funes
limitantes
superiores
mais
conhecidas:
Melhor
Pior
Constante
Logartmica
Linear Quadrtica
Exponencial
O(1) O(log n)
O(n) O(n
2
) O(a
n
) com a > 1
Exemplo de
crescimento
de vrias
funes
n
log n n n 2
n
2
1244
4
2 4 16 16
8
3 8 64 256
16
4 16 256 65.536
32
5 32 1.024
4.294.967.296
64
6 64 4.096 1,84
x 10
19
128
7 128 16.384
3,40 x 10
38
256
8 256 65.536
1,18 x 10
77
512
9 512 262.144
1,34 x 10
154
1024
10 1024
1.048.576 1,79
x 10
308
Tempos de
execuo
dos
algoritmos:
Os Algoritmos
tm tempo de
execuo
proporcional a:
O(
1)
- muitas
instrues so
executadas
uma s vez ou
poucas vezes
(se isto for
verdade para
todo o
programa diz-
seque o seu
tempo de
execuo
constante)
O(
log N)
- tempo de
execuo
logartmico
(cresce
linearmente
medida que
N
cresce) (quando
N
duplica
log N
aumenta mas
muito pouco;
)
O(
N)
- tempo de
execuo
linear (tpico
quando algum
processamento
feito para
cada dado de
entrada)
(situaotimas
quando
necessrio
processar
N
dados de
entrada) (ou
produzir
N
dados na sada)
O
(
N log N)
- tpico quando
se reduz um
problema em
subproblemas,
se resolve estes
separadamente
e se
combinamas
solues (se
N
1 milho,
N log N
perto de 20
milhes)
O (N
2
- tempo de
execuo tpico
N
quadrtico
(quando
preciso
processar todos
os pares de
dados de
entrada)(prtico
apenas em
pequenos
problemas). EX:
para
N
=10,
N
2
= 100.
O (N
3
- tempo de
execuo
cbico. EX: para
= 100,
N
3
= 1 milho
O (2
N
- tempo de
execuo
exponencial
(provavelmente
de pouca
aplicao
prtica; tpico
em solues de
fora bruta)
(para
N
= 20,
2
N
= 1 milho)
10
PPPIIILLL
HHHAAA
SSS
(
http://pt.wiki
books.org/wi
ki/Estrutura_
de_Dados_II
/Pilhas
)
Uma pilha
uma
estrutura de
dados onde
em todas as
inseres,
retiradas e
acessos
ocorrem
apenas em
um
dosextremos
(no caso, em
seu topo).Os
elementos
so
removidos na
ordem
inversa
daquela em
que foram
inseridos de
modo
que o
ltimo
elemento
queentra
sempre o
primeiro
que sai
, por isto
este tipo de
estrutura
chamada
LIFO
O exemplo mais
prtico que
costuma
utilizar-se para
entender o
processo de
pilha como
uma pilha de
livros ou pilha
depratos, no
qual ao se
colocar diversos
elementos uns
sobre os outros,
se quisermos
pegar o livro
mais abaixo
deveremostirar
todos os livros
que estiverem
sobre ele.
Uma pilha
geralmente
suporta as
seguintes
operaes
bsicas:
Empilhar
(push)
: insere um
novo
elemento no
topo da lista;
Desempilhar
(pop)
: remove o
elemento do
topo da lista.
Topo (top)
: acessa-se o
elemento
posicionado
no topo da
pilha;
Vazia
(isEmpty)
: indica se a
pilha est
vazia.
Tamanho
(size):
retorna a
quantidade
de elementos
da
pilha.Exempl
o de
utilizao de
uma pilha:
Operao
Pilha (topo)
----- (base)
Retorno
Tamanho da
Pilha
Empilhar(1)
1 1 Vazia 1
False
1Empilhar(2)
2,1 2Topo
2,1 2
2Empilhar(7)
7,2,1
3Tamanho
7,2,1 3
3Desempilha
r 2,1 7
2Desempilha
r12
1Desempilha
r 1 0 Vazia
True 0
Topo da
pilha: ltimo
elementoinse
rido
Base da
pilha:
primeiro
elementoinse
rido
EmpilharDe
sempilharTa
manho = 5
11
Implemen
tao de
Uma Pilha
Esttica
// Esta pilha
armazena em cada
posio da pilha um
dado do tipo String.
//
Pilha.cs usingSystem;u
singSystem.Collections.
Generic;usingSystem.T
ext;namespacePilhaEsta
tica{// definio da
classe
Pilhapublic class Pilha
{private const intCAPA
CIDADE = 5;//define o
tamanho maximo desta
uma pilha.
{if(Tamanho() !=
CAPACIDADE){topo+
+;dados[topo] =
p_valor;}else{throw ne
w Exception("A pilha
est cheia!!!"); }}// este
mtodo desempilha um
valor da
pilhapublic stringDese
mpilha() {if(Vazia()
==true)
{throw new Exception(
else returndados[topo];
}}}
12
// Programa principal
(program.cs)usingSyste
m;usingSystem.Collecti
ons.Generic;usingSyste
m.Text;namespacePilha
Estatica{class Program
{static voidMain(string
[] args) {intopcao =
0;stringvalor;Pilhaminh
aPilha =new Pilha();//
cria uma instncia da
classe pilha!
do{try{Console.Write(
"\n\n Escolha: 1->
empilha 2->desempilha
"+ " 3->topo 4->
tamanho 9-> sair :
");opcao
=Convert.ToInt32(Cons
ole.ReadLine());
if(opcao == 1)
{Console.Write(">>Di
gite o valor que deseja
empilhar: "); valor
=Console.ReadLine();
minhaPilha.Empilha(va
lor);}else if(opcao ==
2) {valor =
minhaPilha.Desempilha
();Console.WriteLine("
>>Desempilhado:
{0} \n\n", valor); }
else if(opcao == 3)
{valor =
minhaPilha.RetornaTop
o();Console.WriteLine(
">>Valor no topo:
{0} \n\n", valor); }
else if(opcao == 4)
{Console.WriteLine(">
>Tamanho da pilha:
{0}",
minhaPilha.Tamanho());
}else if(opcao == 9) {//
sai do
programa}}catch(Exce
ptionerro)
{Console.WriteLine("E
RRO: "+ erro.Message);
}}while(opcao !=
9);}}}
13
Exerccios
sobre
Pilhas
1.
Crie uma
pilha que
manipule a
seguinte
estrutura:Cla
sse
FuncionarioN
ome :
string;Salario
:
Double;Depoi
s faa um
programa
para testar
esta pilha
(como no
programa
exemplo
sobre
pilhas).A
pilha deve
possuir os
seguintes
mtodos:
Empilhar
(p_funcionari
o);
Empilhar um
dado do tipo
da estrutura
que voc
definir.
Desempilhar
:
Tfuncionario;
Desempilhar
um valor e
retornar o
valor
desempilhado
RetornaTopo
:
Tfuncionario;
Retorna o
valor que
est no topo
da pilha
Tamanho :
integer;
Retorna o
tamanho da
pilhaObserve
que no h o
mtodo
vazio.
Portanto,
para saber se
a pilha est
vazia, voc
dever
utilizar
omtodo
Tamanho.No
programa
principal
(onde voc
ir testar a
pilha),
adicione as
seguintes
opo ao
menu do
programa:
Listar os
dados da
pilha
Somar
SalriosObser
ve que em
ambos os
mtodos,
voc NO
PODER
UTILIZAR O
VETOR DA
PILHA PARA
SOLUCIONAR
O PROBLEMA.
Voc tem a
disposio
apenas os
mtodos da
pilha:
Empilhar,
Desempilhar,
RetornaTopo
eTamanho.
2.
Preencha a
tabela
abaixo, de
acordo com
os mtodos
executados
na primeira
coluna:
Operao
Pilha (topo)
----(base)
Retorno
Tamanho da
Pilha
TamanhoEmp
ilhar(O)Emp
ilhar(Z)Reto
rnaTopoEmpil
har(O) Vazio
?
DesempilharT
amanhoEmpil
har(X)Retor
naTopoDese
mpilharEmpil
har(O)Empil
har(B)
14
FFFIIILLL
AAASSS
Uma Fila (
Queue
) um caso
particular de
Listas
Lineares que
obedece ao
critrio FIFO (
First In, Firts Out
,ou Primeiro
a Entrar,
Primeiro a
Sair). Numa
fila os
elementos
so inseridos
em uma das
extremidades
eretirados na
outra
extremidade.
Existe uma
ordem linear
para a fila
que a
ordem de
chegada.
Filasso
utilizadas
quando
desejamos
processar
itens de
acordo com a
ordem
primeiroque-chega,
primeiroatendido.Um
a pilha
normalmente
possui as
seguintes
operaes
(mtodos):
Enfileira
( valor )
Insere o
valor no final
da fila.
Desenfileira
Retorna o
elemento do
incio da fila,
desenfileirand
o-o.
Vazia
Informa se a
fila est fazia
Tamanho
retorna o
tamanho da
fila
RetornaInicio
retorna o
elemento do
incio da fila,
mas no o
desenfileira.
RetornaFim
retorna o
elemento do
final da fila,
mas no o
desenfileira.E
m uma
implementa
o com
arranjos
(vetores), os
itens so
armazenados
em posies
contguas
damemria.
Por causa das
caracterstica
s da fila, a
operao
enfileira faz a
parte de trs
da fila
expandir-see
a operao
desenfileira
faz a parte da
frente da fila
contrair-se.
Conseqente
mente a fila
tende
acaminhar
pela memria
do
computador,
ocupando
espao na
parte de trs
e
descartando
espao na
parteda
frente. Com
poucas
inseres e
retiradas de
itens, a fila
vai ao
encontro do
limite do
espao
dememria
alocado para
ela.A soluo
para o
problema
acima
imaginar um
vetor como
um crculo,
em que a
primeira
posio
seguea
ltima.
Observe que
a fila segue o
sentido
horrio.
Conforme os
elementos
vo sendo
desenfileirado
s, afila anda
no sentido
horrio. O
mesmo
ocorre com
os itens que
vo sendo
enfileirados.
Para
evitarsobrepo
r elementos
no vetor,
devemos
verificar o
tamanho da
fila antes de
efetuar a
operao
enfileirar.Os
elementos
Frente e Trs
so variveis
que indicaro
em que
posio no
vetor esto o
primeiro e
oltimo
elemento
inserido na
fila.
Exemplo de
utilizao de
uma Fila:
Operao
Fila trs --
frente
Retorno
Tamanho da
Fila
Tamanho 0
0Enfileirar(A
)A
1Enfileirar(B
) BA 2 Vazia
BA False
2Enfileirar(C
) CBA
3RetornaFren
te CBA A
3RetornaTras
CBA C
3Desenfilera
CB A
2Desenfilera
CB
1Desenfilera
C 0 Vazia
True
0RetornaFren
te ERRO 0
FrenteTrsImpl
ementao
circular
parafilas
15
Implemen
tao da
Fila
Esttica
Circular
// Classe Fila.cs
usingSystem;usingSyst
em.Collections.Generic;
usingSystem.Linq;usin
gSystem.Text;namespac
eFilaCircularEstatica{cl
ass Fila{const intCAPA
CIDADE = 5;//
capacidade mxima da
fila
private intquantidade =
0;// qtde de elementos
enfileirados
private intinicio = 0;//
indica qual a primeira
posio da fila
private intfim = 0;//
indica a prxima
posio private string[]
dados
=new string[CAPACID
ADE];// armazenar os
dados da fila // retorna
o tamanho da
filapublic inttamanho()
{returnquantidade;}//
enfileira um valor
stringpublic voidenfileir
ar(stringp_valor)
{if(tamanho() ==
CAPACIDADE){throw
new Exception("A fila
est cheia!!!!"); }
else{dados[fim] =
p_valor;fim = (fim + 1)
%
CAPACIDADE;quantid
ade++;}}// remove o
primeiro elemento da
fila e
devolve.public stringde
senfileira()
{if(tamanho() == 0)
{throw new Exception(
"A fila est vazia!"); }
else{stringvalor =
dados[inicio];inicio =
(inicio + 1) %
CAPACIDADE;quantid
ade--;returnvalor;}}}}
16
// Programa principal
(Program.cs)
usingSystem;usingSyst
em.Collections.Generic;
usingSystem.Linq;usin
gSystem.Text;namespac
eFilaCircularEstatica{cl
senfileirado: {0}",
minhafila.desenfileira())
; break;case "3":
Console.WriteLine("Ta
manho da fila:{0}",
minhafila.tamanho());
break;case "9":
Console.WriteLine("Sai
ndo do sistema...");
break;default:Console.
WriteLine("Opo
invlida!!!");
break;}}catch(Exceptio
nerro)
{Console.WriteLine(er
ro.Message);}}while(o
pcao !="9"); }}}
17
Exerccio
de Fila e
Pilha:
1-) Dada uma
Fila Circular F e
uma pilha P,
execute os
mtodos abaixo
e preencha as
estruturas pilha
e fila.Fila
Circular FINICIO0 1 2 3
4Pilha PBASE0 1 2 3
4P.empilha(a)P
.empilha(b)P.e
mpilha(c)P.em
pilha(P.retornaT
opo)F.enfileira(
F)F.enfileira(P.r
etornaTopo)F.en
fileira(P.desemp
ilha)F.enfileira(P
.retornaTopo)P.
empilha(F.dese
nfileira)P.empilh
a(P.desempilha)
F.enfileira(F.des
enfileira)2-)
Faa um
programa para
inverter os
dados de uma
Fila. Utilize a
classe fila que
foi passada
como exemplo
(string).No
altere a classe
Fila, a inverso
deve ser feita
no programa
principal
(program.cs).
Voc deve
utilizar apenas
osmtodos
pblicos da Fila.
Tente utilizar
uma plha para
solucionar este
problema.
18
LLLIIISSS
TTTAAAS
SSEEES
SSTTT
TTTIIIC
CCAAAS
SS
http://www.i
nf.ufsc.br/~in
e5384hp/Capitulo2/
EstruturasList
a.html http://
www.icmc.us
p.br/~sce182
/lestse.html
Uma lista
esttica
seqencial
um arranjo
de registros
onde esto
estabelecidos
regras de
precedncia
entre
seuselemento
s ou uma
coleo
ordenada de
componentes
do mesmo
tipo. O
sucessor de
um elemento
ocupa
posiofsica
subseqente.
Ex: lista
telefnica,
lista de
alunos
Este conjunto
de dados
pode possuir
uma ordem
intrnseca
(Lista
Ordenada)
ou no;
Este conjunto
de dados
deve ocupar
espaos de
memria
fisicamente
consecutivos
(implementa
do com
vetor);
Se os dados
estiverem
dispersos
fisicamente
na memria,
para que este
conjunto seja
uma lista, ele
deve
possuiropera
es e
informaes
adicionais
que
permitam
que seja
tratado como
tal (Lista
Encadeada).
O conjunto
de operaes
a ser definido
depende de
cada
aplicao. Um
conjunto de
operaes
necessrio a
uma
maioriade
aplicaes :
1. Criar uma
lista linear
vazia.
2. Inserir um
novo item
imediatamen
te aps o isimo item.
4. Localizar o
i-simo item
para
examinar
e/ou alterar o
contedo de
seus
componentes
.
5. Combinar
duas ou mais
listas em
uma lista
nica.
6. Partir uma
lista em duas
ou mais
listas.
7. Fazer uma
cpia da
lista.
8. Ordenar os
itens da lista
em ordem
ascendente
ou
descendente,
de acordo
com alguns
de seus
componentes
.
9. Pesquisar
a ocorrncia
de um item
com um valor
particular em
algum
componente.
DETAHES DA
IMPLEMENTA
O DE
LISTAS
ESTTICAS
POR MEIO DE
ARRANJOS
Os itens da
lista so
armazenados
em posies
contguas de
memria.
A lista pode
ser
percorrida
em qualquer
direo.
A insero
de um novo
item pode
ser realizada
aps o ltimo
item com
custo
constante.
A insero
de um novo
item no meio
da lista
requer um
deslocamento
de todos os
itens
localizados
aps o
pontode
insero.
Retirar um
item do incio
da lista
requer um
deslocament
o de itens
para
preencher o
espao
deixado
vazio.
Vantagem
:
Acesso
direto
indexado a
qualquer
elemento da
lista
Tempo
constante
para acessar
o elemento i
- depender
somente do
ndice.
Desvantage
m:
Movimenta
o quando
eliminado/ins
erido
elemento
Tamanho
mximo prestimado
Quando
usar:
Listas
pequenas
Insero/rem
oo no fim
da lista
Tamanho
mximo bem
definido
19
Implemen
tao de
Lista
Esttica
Classe
Lista.cs
CAPACIDADE)throw
new Exception("A lista
est cheia!!!\n\n");
else if(p_posicao >
tamanho())
throw new Exception("
No possvel inserir
nesta posio");
else{quantidade+
+;for(inti = tamanho() 1; i > p_posicao; i--)
{dados[i] = dados[i -
1];}dados[p_posicao] =
p_valor;}}public string
removeDaPosicao(intpo
sicao) {if(tamanho() ==
0)throw new Exception
("A lista est
vazia!!!");
else if(posicao >
tamanho() -1)
throw new Exception("
Posio invlida!!!");
else{stringaux =
dados[posicao];for(inti
= posicao; i < tamanho()
- 1; i++) {dados[i] =
dados[i +
1];}quantidade--;return
aux;}}public voidinsere
NoInicio(stringp_valor)
{insereNaPosicao(0,
p_valor);}public voidin
sereNoFim(stringp_val
or)
{insereNaPosicao(tama
nho(),
p_valor);}public voidim
primeLista()
{Console.WriteLine("\
n\nImpresso dos dados
da lista:\n"); for(inti =
0; i < tamanho(); i++)
{Console.WriteLine(da
dos[i]);}}}
20
Program.cs
class Program{static vo
idMain(string[] args)
{stringopcao ="",
valor;
intposicao;ListaminhaLi
sta =new Lista();
Console.WriteLine("Si
stema em C# para testar
a execuo de uma lista
esttica\n");
do{try{Console.WriteL
ine("\nDigite: \n 1->
Console.WriteLine("Di
gite um valor para
inserir no incio:");
valor
=Console.ReadLine();
minhaLista.insereNoIni
cio(valor);break;case "2
":
Console.WriteLine("Di
gite um valor para
inserir no fim:"); valor
=Console.ReadLine();
minhaLista.insereNoFi
m(valor);break;case "3"
:
Console.WriteLine("Di
gite um valor para
inserir:"); valor
=Console.ReadLine();C
onsole.WriteLine("Digit
e a posio:"); posicao
=Convert.ToInt32(Cons
ole.ReadLine());
minhaLista.insereNaPos
icao(posicao,
valor);break;case "4":
Console.WriteLine("Ta
manho da lista:{0}",
minhaLista.tamanho());
break;case "5":
minhaLista.imprimeList
a();break;case "6":
Console.WriteLine("Di
gite a posio que
deseja remover:");
posicao
=Convert.ToInt32(Cons
ole.ReadLine());
Console.WriteLine("Re
movido:{0}",
minhaLista.removeDaP
osicao(posicao));
break;case "9":
Console.WriteLine("Sai
ndo do sistema...");
break;default:Console.
WriteLine("Opo
invlida!!!");
break;}}catch(Exceptio
nerro)
{Console.WriteLine(er
ro.Message);}}while(o
pcao !="9"); }}
21
Exerccios
Sobre
Listas,
Filas e
Pilhas Exe
rccio 1:
Utilizando
uma Lista
(como a
implementad
a na
explicao
sobre Listas)
pode-se
simular uma
Pilhae uma
Fila. Isso
uma classe
Pilha que
dever ser
implementad
a usando
para isso
umaLista. Ou
seja, na sua
classe Pilha,
no haver
mais um
vetor DADOS
para
armazenar os
elementos
dapilha. No
lugar disso,
eles devero
ser
armazenados
em uma
Lista.A sua
pilha dever
executar os
mtodos
Empilhar,
Desempilhar e
Tamanho.
Utilize a Lista
que foi
explicada em
aula (ela
armazena
apenas
strings).
Exerccio
2:
Faa a
mesma coisa
que no
exerccio
anterior,
porm, crie
desta vez
uma
Fila.Deve
executar os
mtodos:
Enfileira,
Desenfileira e
Tamanho.
Exerccio
3:
Implementar
uma lista que
seja capaz de
armazenar
alunos.Cada
aluno possui
as
propriedades:
RA
NomeO
usurio
poder inserir
nesta lista
at 32
alunos.Dever
ser
implementad
o na classe
lista os
mtodos
RetornaPrime
iro e
RetornaUltim
o, que iro
retornar,resp
ectivamente,
o primeiro e
ltimo
elemento da
lista.Tambm
deve haver
um mtodo
para localizar
um elemento
na lista
(pesquisar
pelo RA).Crie
uma interface
grfica para
cadastrar,
remover e
pesquisar
alunos na
lista.Tambm
deve ser
possvel
testar os
mtodos
RetornaPrime
iro e
RetornaUltim
o.Deve ser
possvel
remover um
RA da
lista.No
permite RAs
repetidos na
lista!!!
22
PPPOOO
NNNTTT
EEEIIIRR
ROOOSS
S(((OOO
UUUAAA
PPPOOO
NNNTTT
AAADDD
OOORRR
EEESSS)
))
timo
material
sobre
apontadores:
http://br.geo
cities.com/ce
sarakg/point
ers.html http
://www.deei.
fct.ualg.pt/IC
/t20_p.html
Um
apontador ou
ponteiro
um tipo de
varivel
especial, cujo
objetivo
armazenar
um endereo
da memria.
Ou seja,ele
no
armazena um
valor como
Ol mundo
ou 55. Ao
invs disso,
ele armazena
um endereo
na memria
e,
nesteendere
o, encontrase uma
informao
til, como
um texto ou
um
nmero.Um
apontador
contm o
endereo de
um lugar na
memria.Qua
ndo voc
executa
comandos
tais
como:I := 10
ou J := 1voc
est
acessando o
contedo da
varivel. O
compilador
procura
automaticam
ente o
endereo da
varivel e
acessa oseu
contedo.
Um
apontador,
entretanto,
lhe permite
determinar
por si
prprio o
endereo da
varivel
.
Ex:
I := 42;
PonteiroParaI
:= &I;Para
mostrar o
contedo do
endereo
para o qual a
o ponteiro
aponta,
podemos
utilizar:Writel
n( *PonteiroP
araI );
{ exibir 42 }
&Xretorna
oendereoda
varivel
x
*p
ocontedodo
endereo
p
Para que o
apontador
saiba
exatamente o
tamanho da
informao
para a qual
ele aponta na
memria
(veja
figuraabaixo)
, uma
varivel do
tipo
apontador
deve estar
associada a
um tipo
especfico de
varivel ou
registro. Para
criar
umavarivel
do tipo
apontador,
coloque o
smbolo * na
frente do tipo
da varivel
(ex:
int* p1;
)
Endereo
Contedo
E456
E123
E455E454
E123
42
Varivel
apontador:
PonteiroPar
aI
Varivel
Inteira
I
:Cada tipo de
dado ocupa
um
tamanhodifer
ente na
memria. O
apontador
precisasaber
A esquerda
temos 3 tipos
de dados
emPascal:
Byte na
primeira
linha, word
nasegunda e
longint na
terceira. Veja
que
ostamanhos
so
diferentes!
23
Exemplo de
um programa
que utiliza
apontadores:
usingSystem;usingSystem.
Collections.Generic;using
System.Linq;usingSystem.
Text;namespacePonteiros{
class ProgramPonteiro{stat
ic voidMain(string[] args)
{// para rodar este
programa, voc deve
configurar o seu projeto
para rodar cdigo no
da varivel numerop1 =
№// o ponteiro p1
vai apontar para o mesmo
endereo// que a varivel
numero// *p1 -> valor
armazenado no endereo
apontado por
p1Console.WriteLine("Var
ivel nmero: {0}
ponteiro: {1}", numero,
*p1);
Console.Write("\nDigite
um valor para o
ponteiro:"); *p1
=Convert.ToInt32(Console
.ReadLine());
Console.WriteLine("Vari
vel nmero: {0} ",
numero);
Console.ReadLine();}}}}
PPPIIILLL
HHHAAA
SSSDDDI
IINNN
MMMIII
CCCAAA
SSS(((UU
UTTTIIILL
LIIIZZZA
AANNND
DDOOOE
EENNNC
CCAAAD
DDEEEA
AAMMME
EENNNT
TTOOO))
)
As pilhas
criadas
utilizando-se
apontadores
so mais
eficientes,
pois no
precisamos
definir um
Limite. Cada
elemento
dapilha
aponta para
o anterior,
utilizando
para isso
apontadores.
Para criar
uma pilha
utilizando
apontadores,
precisamos
definir uma
classe que
possua os
seguintes
campos:
CLASSE
NODO
Contedo
do nodo
(valor)End
ereo do
nodo
anterior
Cada
elemento da
pilha possui:
Valor que
deve ser
empilhado.
Apontador
para o
elemento
anterior
na pilha. A
base da pilha
tem como
elemento
anterior o
valor
NULL.
NULL
AnteriorAnteriorAnte
riorBaseTopo
24
Implementa
o da Pilha
dinmica
utilizando
objetos
encadeados
Classe Nodo.cs
/// <summary>///Cla
sse que ir
representar 1
elemento na
pilha/// </summary>
class Nodo{private s
tringvalor;
private Nodoanterior
; /// <summary>///Va
lor que ser
armazenado/// </sum
mary>public stringV
alor
{get{returnvalor; }
set{ valor =value; }
}/// <summary>///En
dereo do nodo
anterior na
pilha/// </summary>
public NodoAnterior
{get{returnanterior;
} set{ anterior
=value; } }}
Classe Pilha.cs
/// <summary>///Cla
sse Pilha
Dinmica/// </summ
ary>class Pilha{//Re
presenta o topo da
pilhaprivate Nodotop
o =null; //
quantidade de
elementos na
pilhaintquantidade =
0;public intQuantida
de
{get{returnquantidad
e; } }/// <summary>/
//Mtodo para
empilhar
strings/// </summary
>/// <param
name="valor"></par
am>public voidEmpi
lhar(stringvalor)
{NodonovoNodo
=new Nodo();
novoNodo.Valor =
valor;novoNodo.Ant
erior = topo;topo =
novoNodo;quantidad
e++;}
25
/// <summary>///De
sempilhar elementos
da
pilha/// </summary>/
// <returns></returns
>public stringDesem
pilhar()
{if(quantidade ==
0)throw new Excepti
// <returns></returns
>public stringRetorn
aTopo()
{if(quantidade ==
0)throw new Excepti
on("A pilha est
vazia!");
else{returntopo.Valo
r;}}}
Formulrio
Principal para
testar a pilha:
public partial class F
orm1:Form
{Pilhapilha
=new Pilha();
publicForm1()
{InitializeComponen
t();}private voidbtnE
mpilhar_Click(objec
tsender,EventArgse)
{pilha.Empilhar(txt
Valor.Text);txtValor.
Clear();}
26
private voidbtnDese
mpilhar_Click(object
sender,EventArgse)
{try{txtValor.Text =
pilha.Desempilhar();
}catch(Exceptionerr
o)
{MessageBox.Show(
erro.Message);}}pri
vate voidbtnTamanh
o_Click(objectsender
,EventArgse)
{MessageBox.Show(
pilha.Quantidade.To
String());}private voi
dbtnRetornaTopo_Cl
ick(objectsender,Eve
ntArgse)
{try{txtValor.Text =
pilha.RetornaTopo();
}catch(Exceptionerr
o)
{MessageBox.Show(
erro.Message);}}}
Exerccios:
1-) Implemente
na classe da
pilha dinmica
um mtodo
para retornar
um string com
todos os
elementos
empilhados.Voc
pode separar
os elementos
com um -.2-)
Implemente a
Fila utilizando a
mesma tcnica
utilizada na
pilha dinmica.
Observe que
no ser uma
Fila circular,pois
no h mais o
problema de ter
que descolar os
elementos
quando
utilizamos esta
tcnica de
elementosenca
deados.3-)
Altere a classe
Fila dinmica
para que ela
armazene
objetos da
classe Alunos
(RA int, nome
string).4-)
Implemente na
classe Fila um
mtodo para
listar os seus
elementos.
Devolva um
string. Voc
pode separar
oselementos
com um -.
27
LLLIIISSS
TTTAAAS
SSSSSIII
MMMPPP
LLLEEES
SSMMME
EENNNT
TTEEEE
EENNNC
CCAAAD
DDEEEA
AADDDA
AASSS
Material
retirado da
referncia
[2], [3] e
[4].Em uma
lista
simplesment
e encadeada,
cada
elemento
contm um
apontador
que aponta
para a o
elemento
seguinte.
Naimplement
ao de listas
utilizando
vetores, os
dados
ocupavam
posies
contguas da
memria.
Sendo assim,
sempreque
inclumos ou
apagamos
um elemento
no meio da
lista,
precisamos
reorganizar
os dados do
vetor, o
quecomputac
ionalmente
pode ser
muito
custoso. Nas
listas
simplesment
e
encadeadas,
os dados no
ocupam
posiescont
guas da
memria,
portando
operaes de
remoo e
incluso so
executadas
muito mais
rapidamente.
Umelemento
de uma lista
simplesment
e encadeada
pode ser
definido
como na
figura
abaixo:Quan
do criamos
uma lista
utilizando
apontadores,
precisamos
ter uma
varivel que
aponta
sempre para
o incio da
lista. Abaixo,
temos um
exemplo de
uma lista
simplesment
e encadeada
para
armazenar
nomes em
ordem
alfabtica:Par
a
incluir
um novo
elemento, por
exemplo, o
nome
Daniela,
devemos
apenas
alterar o
apontador
prximo
doelemento
que est no
endereo E2.
Veja
abaixo:Obser
ve que a
ordem dos
endereos
no importa.
O que
importa a
ordem que
eles esto
encadeados!
O mesmo
ocorre ao se
remover
um elemento
da lista. Veja
abaixo como
ficaria a
remoo do
elemento
Cludia:
LLLIIISSS
TTTAAAS
SSDDDU
UUPPPL
LLAAAM
MMEEEN
NNTTTE
EEEEEN
NNCCCA
AADDDE
EEAAAD
DDAAAS
SS
Material
retirado da
referncia
[2], [3] e
[4]. A
diferena de
uma lista
duplamente
encadeada
para uma
lista
simplesmente
encadeada
que em uma
lista
duplamentee
ncadeada
cada
elemento
contm um
segundo
apontador
que aponta
para o
elemento que
o antecede.
Assim, voc
noprecisa se
preocupar
mais com o
incio da lista.
Se voc tiver
um
apontador
para qualquer
elemento da
lista,
podeencontra
r o caminho
para todos os
outros
elementos.
Em uma lista
duplamente
encadeada,
so
necessrias
variveis
DADOSEndereo
PrximoAna
E1 E2
Cludia
E2 E3
Maria
E3 NIL
Endereo
doPrimeiro:
E1
Ana
E1 E2
Cludia
E2
E4
Maria
E3
NIL
Endereo
doPrimeiro:
E1Daniela
E4 E3
Ana
E1
E4
Cludia
E2
E4
Maria
E3
NIL
Endereo
doPrimeiro:
E1Daniela
E4 E3
28
para apontar
para o incio
e para o final
da lista.
Abaixo temos
a
representa
o de um
elemento de
uma lista
duplamentee
ncadeada:Ex
emplo de
uma lista
duplamente
encadeada
para
armazenar
nomes em
ordem
alfabtica:Par
a
Inserir
e
Remover
elementos, o
processo
semelhante
ao
apresentado
na lista
simplesmente
encadeada.
Adiferena
que na lista
duplamente
encadeada
necessrio
tambm
atualizar o
campo
anterior dos
elementos.
LLLIIISSS
TTTAAAS
SSEEEN
NNCCCA
AADDDE
EEAAAD
DDAAAS
SSCCCIII
RRRCCC
UUULLLA
AARRRE
EESSS
Material
retirado da
referncia
[4].So listas
que possuem
a
caracterstica
especial de
ter, como
sucessor do
fim da lista,
seu incio, ou
melhor, o fim
da
lista aponta
para seu
incio,
formando um
crculo que
permite uma
trajetria
contnua na
lista. Veja o
processo na
ilustraoabai
xo:
DADOSAnterior
PrximoEndereo
AlessandraNIL
E2E1Endereo
doPrimeiro:
E1
Endereo
doltimo:
E3
DanielaE1
E3E2MnicaE2
NILE3Ana
E1 E2
Cludia
E2 E3
Maria
E3 E1
Endereo
doPrimeiro:
E1
29
RRREEE
CCCUUU
RRRSSSI
IIVVVIIID
DDAAAD
DDEEEO
OOUUUR
RREEEC
CCUUUR
RRSSS
OOO
Material
retirado de:
http://pt.wikipedia.or
g/wiki/Recursividade
(muito
bom)http://pt.wi
kipedia.org/wiki/
Recursividade_
%28ci
%C3%AAncia_da
_computa
%C3%A7%C3%
A3o
%29(timo)http:
//www.di.ufpe.br
/~if096/recursao
/
(bom)Referncia
[1]
O que
Recursivida
de:
Uma Rotina
ou Funo
recursiva
quando ela
chama a si
mesma, seja
de forma
direta
ouindireta.
Uma funo
recursiva
DEVE ter um
ponto de
parada, ou
seja, em
algum
momento ela
deve parar
de sechamar.
Praticamente
todas as
linguagens
oferecem
suporte a
recursividade
. Trata-se de
uma tcnica
de
programao
.Por
exemplo,
segue uma
definio
recursiva da
ancestralidad
e de uma
pessoa:
Os pais de
uma pessoa
so seus
antepassados
(caso base);
Os pais de
qualquer
antepassado
so tambm
antepassados
da pessoa
em
considerao
(passo
recursivo).
Clculo do
Fatorial
sem
Recurso
, usamos
apenasuma
estrutura de
repetio
(iterador)
Clculo do
Fatorial
com
Recurso
direta
longfat_iterativo(intn
umero)
{longr=1;for(inti=2;
1);elsereturnnumero;
}
Teste de
Mesa do
Fatorial de
5:azul =
ida(chamada
recursiva),ver
melho =
volta
(retorno da
funo
recursiva)
Resposta =
Fat_recursivo(
5)Fat_recursiv
o(5) = 5 *
Fat_recursivo(
51)
Fat_recursivo(
4) = 4 *
Fat_recursivo(
41)
Fat_recursivo(
3) = 3 *
Fat_recursivo(
31)
Fat_recursivo(
2) = 2 *
Fat_recursivo(
21)
Fat_recursivo(
1) = 1
Recurso
versus
Iterao
No exemplo
do fatorial, a
implementa
o iterativa
tende a ser
ligeiramente
mais rpida
na prtica do
que
aimplementa
o
recursiva,
uma vez que
uma
implementa
o recursiva
precisa
registrar o
estado atual
do
processamen
tode maneira
que ela possa
continuar de
onde parou
aps a
concluso de
cada nova
excecuo
subordinada
doprocedime
nto
recursivo.
Esta ao
consome
tempo e
memria.Exis
tem outros
tipos de
problemas
cujas
solues so
inerentement
e recursivas,
j que elas
precisam
manter
registros
deestados
anteriores.
Um exemplo
o percurso
de uma
rvore;Toda
funo que
puder ser
produzida por
um
computador
pode ser
escrita como
funo
recursiva sem
o uso de
iterao;recip
rocamente,
qualquer
funo
recursiva
pode ser
descrita
atravs de
iteraes
sucessivas.
Todos altoritmo
recursivopode
ser
implementado
iterativamente
com a ajuda de
uma pilha, mas
o uso de uma
pilha, de certa
forma, anula
asvantagens
das solues
iterativas.
12624120
30
Tipos de
Recursividad
e:Direta
: Quando
chama a si
mesma,
quando dada
situao
requer uma
chamada da
prpria
Rotina em
execuo
para
simesma. Ex:
O exemplo de
fatorial
recursivo
dado acima.
Indireta
: Funes
podem ser
recursivas
(invocar a si
prprias)
indiretament
e, fazendo
isto atravs
de outras
funes:assi
m, "P" pode
chamar "Q"
que chama
"R" e assim
por diante,
at que "P"
seja
novamente
invocada.Ex:
doubleCalculo(doubl
ea,b )
{return Divide(a,b) +
a + b; }
double Divide(doubl
ea, b ) {if(b == 0)b =
Calculo(a, b +
a);returna/ b;}
Note que a
funo
fatorial
usada como
exemplo na
seo anterior
no
recursiva em
cauda, pois
depois que
elarecebe o
resultado da
chamada
recursiva, ela
deve multiplicar
o resultado por
VALOR
antes de
retornar para o
ponto emque
ocorre a
chamada.
Qual a
desvantage
m da
Recurso?
Cada
chamada
recursiva
implica em
maior tempo
e espao,
Qual a
vantagem
da
Recurso?
Se bem
utilizada,
pode tornar o
algoritmo:
elegante,
claro, conciso
e simples.
Mas,
preciso antes
decidir sobre
o uso
daRecurso
ou da
Iterao.
Exerccios
Exerccio 1:
Faa um
programa
para calcular
a potencia de
um nmero.
O mtodo
recursivo
deve receber
como
parmetro a
base eo
expoente, e
devolver o
valor da
potncia.EX:
double
CalculaPoten
cia (int base,
int
expoente)Cal
culaPotencia
(2,3) = 8
Exerccio 2:
Faa o teste
de mesa do
seu mtodo
para os
valores
informados
acima.
Exerccio 3:
Faa um
programa
para imprimir
a tabuada,
usando
recursividade
.
Exerccio 4:
Faa um
mtodo para
limpar todos
os makedit e
os Textbox de
um form,
mesmo que
eles estejam
dentro de
panels,group
box.
Aqui ocorre
arecursividadei
ndireta!
31
RRR
VVVOOO
RRREEE
SSS
Material
retirado da
referncia
[3].Uma
rvore
um tipo
abstrato de
dados que
armazena
elementos de
maneira
hierrquica.
Como
exceo do
elementodo
topo, cada
elemento tem
um elemento
pai e zero ou
mais
elementos
filhos. Uma
rvore
normalmente
desenhadacol
ocando-se os
elementos
dentro de
elipses ou
retngulos e
conectando
pais e filhos
com linhas
retas.
Normalmente
oelemento
topo
chamado de
raiz da
rvore, mas
desenhado
como sendo
o elemento
mais alto,
com todos os
demaisconect
ados abaixo
(exatamente
ao contrrio
de uma
rvore
real).EX:
Uma rvore
que
representa a
estrutura de
pastas em
um Hard
Disk:Uma
rvore
T
um
conjunto de
nodos
que
armazenam
elementos
em
relacionamen
tos
pai-filho
com as
seguintespro
priedades:
T
tem um nodo
especial,
r
, chamado de
raiz
de
T
.
Cada nodo
v
de
T
diferente de
r
tem um nodo
pai
u
.
Se um nodo
u
pai de um
nodo
v
, ento
dizemos que
v
filho de
u
.
Dois nodos
que so filhos
de um
mesmo pai
so
irmos
.
Um nodo
externo (ou
folha)
se no tem
filhos.
Um nodo
interno
se tem um
ou mais
filhos.
Um
subrvore
de
T
enraizada no
nodo
v
a rvore
formada por
todos os
descendentes
de
v
em
T
(incluindo
oprprio
v
).
O
ancestral
de um nodo
tanto um
ancestral
direto como
um ancestral
do pai do
nodo.
Um nodo
v
descendent
e
de
u
se
u
um
ancestral de
v
. Ex: na
figura acima,
Meus
documentos
ancestralde
2 Semestre
e 2
Semestre
descendente
de Meus
documentos.
Seja
v
um nodo de
uma rvore
T
.A
profundidad
e
de
v
o nmero
de ancestrais
de
v
, excluindo o
prprio
v
.Observe que
esta
definio
implica que a
profundidade
da raiz de
T
0 (zero).
Como
exemplo, na
figura acima,
aprofundidad
e do nodo
Trabalhos
2, e a
profundidade
do nodo 2
semestre
3.
A
altura
de um nodo
o
comprimento
do caminho
mais longo
desde nodo
at um n
folha ou
externo.
Sendoassim,
a altura de
uma rvore
a altura do
nodo Raiz. No
exemplo
acima, a
rvore tem
altura 3.
Tambm se
dizque a
altura de
uma rvore
T
igual
profundidade
mxima de
um nodo
externo de
T
. A figura
abaixo
representa
uma
subrvore da
rvore acima.
Esta
subrvore
possui 5
nodos, onde
2 so nodos
internos(Meu
s
Documentos
e Trabalhos)
e 3 so
nodos
externos
(Provas, 1
Semestre e
2
Semestre). A
altura desta
subarvore
2.
Meus
documentosTraba
lhos
Provas1Semestr
e2Semestre
C:\
Arquivos de
programas
WindowsMeus
documentosOffice
2000 MSN
Trabalhos Provas
System32 Media
Config1Semestr
e2Semestre
Raiz
32
Os principais
mtodos de
uma rvore
so:
Raiz:
Retorna a
raizda rvore
Pai(nodo):
Retorna o pai
de um nodo.
Ocorre um
erro se nodo
for a raiz.
Filho(nodo):
Retorna os
filhos de um
nodo.
Nodo_eh_In
terno(nodo)
:
Testa se um
nodo do
tipo interno.
Nodo_eh_ex
terno(nodo)
:
Testa se um
nodo do
tipo externo.
Nodo_eh_ra
iz(nodo):
Testa se um
nodo a raiz.
Tamanho:
Retorna a
quantidade
de nodos de
uma rvore.
PPPEEE
RRRCCC
UUURRR
SSSOOO
(((OOOU
UUCCCA
AAMMMII
INNNHH
HAAAMM
MEEENN
NTTTOO
O)))EEE
MMM
RRRVVV
OOORRR
EEESSS
O percurso
de uma
rvore a
maneira
ordenada de
percorrer
todos os
nodos da
rvore
(percorrer
todos os seus
ns,sem
repetir
nenhum e
sem deixar
de passar por
nenhum).
utilizada, por
exemplo,
para
consultar ou
alterar
asinformae
s contidas
nos ns.
Percurso
prefixado
Um nodo
visitado
antes de
seus
descendentes
. Exemplo de
aplicao:
Imprimir um
documento
estruturado.
Os nmeros
em vermelho
indicam a
ordem em
que os nodos
so visitados.
Caso fossem
impressos, o
resultado
seria:Docum
ento,
Captulo 1,
Seo 1.1,
Seo 1.2,
Captulo 2,
Seo 2.1,
Seo 2.2,
Seo 2.3,
Referncias.
Percurso
psfixado
Neste
caminho, um
nodo
visitado aps
seus
descendentes
. Exemplo de
aplicao:
Calcular o
espao
ocupado
porarquivos
em pastas e
subpastas.Os
nmeros em
vermelho
indicam a
ordem em
que os nodos
so visitados.
Caso fossem
impressos, o
resultado
seria:H1c.doc
3k, h1nc.doc
2k,
homeworks/,
DDR.java
10k,
Stocks.java
25k,
Robot.java
20k,
programs/,
todo.txt
1k,cs16/.
33
RRR
VVVOOO
RRREEE
SSSBBBI
IINNN
RRRIIIA
AASSS
Material
retirado da
referncia
[2] e
[3].Uma
rvore
binria
uma rvore
ordenada na
qual todo
nodo
tem, no
mximo,
dois filhos
. Uma rvore
binriaimpr
pria aquela
que possui
apenas 1
filho. J uma
rvore
binria
prpria
aquela em
que todo
nodo tem
zero ou
doisfilhos, ou
seja, todo
nodo interno
tem
exatamente
2 filhos. Isso
porque um
nodo externo
no tem
filhos, ou
seja,
zerofilhos.
Para cada
filho de um
nodo interno,
nomeamos
cada filho
como
filho da
esquerda
e
filho da
direita
. Essesfilhos
so
ordenados de
forma que o
filho da
esquerda
venha antes
do filho da
direita. A
rvore binria
suporta mais
3 mtodos
adicionais:
Filho_da_es
querda(nod
o):
Retorna o
filho da
esquerda do
nodo.
Filho_da_dir
eita(nodo):
Retorna o
filho da
direita do
nodo.
Irmo(nodo
):
Retorna o
irmo de um
nodo
Caminhame
nto
adicional
para
rvores
binriasCam
inhamento
interfixado:
pode ser
informalment
e considerado
como a visita
aos nodos de
uma rvore
da
esquerdapara
a direita.
Para cada
nodo
v
,o
caminhament
o interfixado
visita
v
aps todos os
nodos da
subrvore
esqueda de
v
eantes de
visitar todos
os nodos da
subrvore
direita de
v
.
O
Caminhame
nto de
Euler:
sobre uma
rvore binria
T pode ser
informalment
e definido
como um
passeio ao
redorde T, no
qual
iniciamos
pela raiz em
direo ao
filho da
esquerda e
consideramos
as arestas de
T como
sendo
paredes qu
e devemos
sempre
manter nossa
esquerda.
Cada nodo
de T
visitado trs
vezes pelo
caminhament
o de Euler.
Propriedade
s de uma
rvore
binria
Seja
T
uma rvore
binria
(prpria)
com
n
nodos e seja
h
a altura de
T
. Ento
T
tem as
seguintes
propriedades:
1.
O nmero de
nodos
externos de T
pelo menos
h+1 e no
mximo 2
h
.2.
O nmero de
nodos
internos de T
pelo menos
h e no
mximo 2
1.3.
O nmero
total de
nodos de T
pelo menos
2h +1 e no
mximo 2
h+1
-1.4.
A
profundidade
de T pelo
menos
log(n+1) -1 e
no mximo
(n-1)/2.
Os elementos
acessados por
estecaminhame
nto formam a
expresso:
2 x (a 1) + (3 x
b)
Os parnteses
foram colocados
para facilitar.
Prioridade
das aes
para efetuar
o
caminhament
o:
Ao
pela
esquerda
(antes do
caminho
sobrea
subrvore
esquerda de
v);
Ao
por baixo
(entre o
caminhament
o sobreas
duas
subrvores
de v);
Ao
pela direita
(depois do
caminhament
osobre a
subrvore
direita de v).
34
RRR
VVVOOO
RRREEE
SSSBBBI
IINNN
RRRIIIA
AASSSD
DDEEEB
BBUUUS
SSCCCA
AA
Material
retirado da
referncia
[2] e
[3].Uma
rvore de
pesquisa
binria uma
rvore binria
em que
todo n
interno
contm um
registro
, e, para cada
n,todos os
registros com
chaves
menores
esto na
subrvore
esquerda e
todos os
registros com
chaves
maiores
esto
nasubrvore
direita.Podem
os usar uma
rvore binria
de pesquisa
T
para localizar
um elemento
com um
certo valor
x
percorrendo
parabaixo a
rvore
T
. Em cada
nodo interno,
comparamos
o valor do
nodo corrente
com o valor
do elemento
x
sendopesquis
ado.
Se a resposta
da questo
for
menor,
ento a
pesquisa
continua na
subrvore
esquerda.
Se a resposta
for igual,
ento a
pesquisa
terminou
com sucesso.
Se a resposta
for maior,
ento a
pesquisa
continua na
subrvore
direita.
Se
encontrarmo
s um nodo
externo (que
vazio),
ento a
pesquisa
terminou
sem
sucesso. A
figura acima
representa
uma rvore
binria de
pesquisa que
armazena
inteiros. O
caminho
indicado pela
linha
azulcorrespon
de ao
caminhament
o ao procurar
(com
sucesso) 36.
A linha
pontilhada
vermelha
corresponde
aocaminham
ento ao
procurar
(sem
sucesso) por
70.
Observe
que o
tempo de
execuo da
pesquisa em
uma
rvorebinri
a de
pesquisa T
proporcional
altura de
T.
Estrutura
para
armazenar
um nodo da
rvore
binria:Exem
plo para os
valores
inseridos na
ordem:1.
Maria2.
Mnica3.
Daniela
5831
90627542362512
N
daesquerdaN
dadireitaInforma
odo n(valor)
Endereo N
do
paiE2E3MariaE
1
NilE4E5Daniela
E2
E1E6E7Mnica
E3
E1
NilNilE5
E2
NilNilE4
E2
NilNilE7
E3
NilNilE6
E3
Os nodos folha
semvalor so
necessriospara
que a rvore
seja prpria Or
dem em que
oselementos
foraminseridos:5
8,90,62,75,31,2
5,12,42,36
35
Algoritmo
para
pesquisar um
valor em uma
rvore binria
de pesquisa:
Pesquisa( n
odo,
valor_pesqu
isado ) :
Retorno
Inicio
se
Nodo_eh_ext
erno
(
Nodo
)
= verdadeiro
ento
escreva( Err
o: Valor
procurado
no est na
rvore!);pes
quisa := nil
caso
contrrioSe
valor_pesqui
sado
<
nodo.valor
ento
pesquisa
( nodo.esque
rda,
valor_pesqui
sado )
caso
contrrio se
valor_pesqui
sado
>
nodo.valor
ento
pesquisa
( nodo.direita
, valor
_
pesquisado )
caso
contrrio
pesquisa :=
nodo.valor;Fi
m Algoritmo
para inserir
um valor em
uma rvore
binria de
pesquisa:
Insere( nod
o,
NovoValor )
Incio
se
Nodo_eh_ext
erno(nodo) =
verdadeiro
ento
CriaNodoExt
erno( nodo.e
squerda )
CriaNodoExte
rno( nodo.dir
eita )
Nodo.valor :=
NovoValor
caso
contrriose
NovoValor
<
nodo.valor
ento
Insere
( nodo.esque
rda ,
NovoValor)
caso
contrrio se
NovoValor
>
nodo.valor
entoInsere
( nodo.direita
, NovoValor)
caso
contrrio
escreva(O
valor j
existe na
rvore.);Fim
;
O mtodo
CriaNodoExter
no cria
umnodo
externo (sem
valor e
semfilhos)
36
Implemen
tao de
uma
rvore
Binria de
Busca em
C#
// classe para
reprentar 1 Nodo na
rvoreclass Nodo{pr
ivate Nodono_pai
=null;
private Nodono_dire
ita =null;
private Nodono_esq
uerda =null;
private intvalor = 0;
public intget_valor()
{returnvalor; }
public voidset_valor(
intv) { valor = v; }
public voidset_no_p
ai(Nodono) { no_pai
= no;}
public voidset_no_di
reita(Nodono)
{ no_direita = no; }
public voidset_no_es
querda(Nodono)
{ no_esquerda =
no; }
public Nodoget_no_
pai()
{returnno_pai; }
public Nodoget_no_
direita()
{returnno_direita; }
public Nodoget_no_
esquerda()
{returnno_esquerda;
}
}
// classe da rvore de
pesquisa
binriaclass ArvoreB
in{private Nodoraiz
=null;// raiz da
rvore
private intqtde = 0;//
qtde de nos internos
private stringresultad
o ="";
public intqtde_nos_i
nternos()// devolve a
qtde de ns internos
{returnqtde;}public b
oolno_eh_externo(N
odono)// verifica se
um determinado
Nodo externo
{return(no.get_no_di
reita() ==null) &&
(no.get_no_esquerda
() ==null); }
public Nodocria_No
_externo(NodoNopai
)// cria um Nodo
externo {Nodono
=new Nodo();
no.set_no_pai(Nopai
);returnno;}
N daesquerdaN
dadireitaInformao
don(valor)Endere
o N do pai
37
public voidinsere(int
valor)// insere um
valor int
{Nodono_aux;if(qtd
e == 0){// rvore
vazia, devemos criar
o primeiro Nodo,
que ser a
raizno_aux
no_aux.get_no_direi
ta();elseno_aux =
no_aux.get_no_esqu
erda();}}// este era
um Nodo externo e
portanto no tinha
filhos.// Agora ele
passar a ter valor.
Tambm devemos
criar outros 2//
Nodos externos
(filhos) para
ele.no_aux.set_valor
(valor);no_aux.set_n
o_direita(cria_No_e
xterno(no_aux));no_
aux.set_no_esquerda
(cria_No_externo(no
_aux));qtde+
+;}private voidLe_N
odo(Nodono)
{if(no_eh_externo(n
o))return;Le_Nodo(n
o.get_no_esquerda()
);resultado =
resultado +" "+Convert.ToInt32(n
o.get_valor());
Le_Nodo(no.get_no
_direita());}//
devolve um string
com os elementos da
rvore, em ordem
crescentepublic strin
glistagem()
{resultado
="";Le_Nodo(raiz);re
turnresultado;}
38
Interface com o
Usurio:
Cdigo da
interface com o
usurio:
public partial class F
orm1:Form
{private ArvoreBin
minhaArvore
=new ArvoreBin();
publicForm1()
{InitializeComponen
t();}private voidbutt
on1_Click(objectsen
der,EventArgse)
{try{minhaArvore.in
sere(Convert.ToInt3
2(txtValor.Text));list
Box1.Items.Add("In
serido: "+
txtValor.Text);}catch
{MessageBox.Show(
"Valor invlido!
Digite apenas
nmeros!"); }
txtValor.Clear();txtV
alor.Focus();}private
voidbutton2_Click(o
bjectsender,EventAr
gse)
{listBox1.Items.Add
(minhaArvore.listag
em());}private voidb
utton3_Click(objects
ender,EventArgse)
{listBox1.Items.Add
("Qtde: "+
minhaArvore.qtde_n
os_internos() );}priva
te voidbutton4_Click
(objectsender,Event
Argse) {Close();}
39
GGGRRR
AAAFFF
OOOSSS
Material
sobre grafos:
[3], [4]
ehttp://www.
inf.ufsc.br/gr
afos/livro.ht
ml Um grafo
um
conjunto de
pontos,
chamados
vrtices (ou
nodos ou
ns),
conectados
por linhas,
chamadas de
arestas(ou
arcos).
Dependendo
da aplicao,
arestas
podem ou
no ter
direo, pode
ser permitido
ou no
arestas
ligarem
umvrtice a
ele prprio e
vrtices e/ou
arestas
podem ter
um peso
(numrico)
associado. Se
todas as
arestas tm
umadireo
associada
(indicada por
uma seta na
representa
o grfica)
temos
um grafo
dirigido
, ou dgrafo.
Se todas
asarestas em
um grafo
foram nodirigidas,
ento
dizemos que
o grafo um
grafo nodirigido
. Um grafo
que
temarestas
no-dirigidas
e dirigidas
chamado de
grafo misto
. Algumas
definies
sobre grafos:
Grau
: nmero de
arestas
ligadas a um
vrtice.
Grau de
entrada
: nmero de
setas que
chegam em
um vrtice X,
in(X).
Grau de
sada
: nmero de
setas que
saem de um
vrtice X,
out(X).
Fonte
: todo
vrtice, cujo
grau de
entrada
0(zero).
Sumidouro
(poo)
: todo
vrtice, cujo
grau de sada
0(zero).
VrticeAresta
Exemplo de um
grafo
no-dirigido
com 6 vrtices e
7 arestas.
So PauloRio
deJaneiroCuiab
BrasliaManausEx
emplo de um
grafo
dirigido
com 8 arestas e
5 vrtices
40
OOORRR
DDDEEE
NNNAAA
OOO
Material
retirado
de:Refernci
a [2],
[3]http://pt.
wikipedia.org
/wiki/Algorit
mo_de_orde
na
%C3%A7%C
3%A3o(com
exemplos em
vrias
linguagens)O
rdenar
corresponde
ao processo
de rearranjar
um conjunto
de objetos
em uma
ordem
ascendente
ou
descendente.
Oobjetivo
principal da
ordenao
facilitar a
recuperao
posterior de
itens do
conjunto
ordenado.
Imagine
como
seriadifcil
utilizar um
catlogo
telefnico se
os nomes das
pessoas no
estivessem
listados em
ordem
alfabtica!
Existem
diversos
mtodos
para realizar
ordenao.
Iremos
estudar aqui
dois dos
principais
mtodos.
Bubble sort
O bubble
sort, ou
ordenao
por flutuao
(literalmente
"por bolha"),
um
algoritmo de
ordenao
dos mais
simples.
Aideia
percorrer o
vector
diversas
vezes, a cada
passagem
fazendo
flutuar para o
topo o menor
elemento da
sequncia.Es
sa
movimenta
o lembra a
forma como
as bolhas em
um tanque
de gua
procuram seu
prprio nvel,
e disso vem
onome do
algoritmo.No
melhor caso,
o algoritmo
executa
(n2) / 2
operaes
relevantes.
No pior caso,
so feitas
2n2operae
s. No
casomdio,
so feitas
(5n2) / 2
operaes. A
complexidade
desse
algoritmo
de Ordem
quadrtica.
Por isso, ele
no
recomendad
o para
programas
que precisem
de velocidade
e operem
com
quantidade
elevada de
dados.O
algoritmo
pode ser
descrito em
pseudocdigo como
segue
abaixo. V
um VECTOR
de elementos
que podem
sercomparad
os e n o
tamanho
desse vector.
BUBBLESORT (V[],
n)1 houveTroca :=
verdade # uma varivel
de controle2 enquanto
houveTroca for
verdade faa3
houveTroca := falso4
para i de 1 at n-1 faa5
se V[i] vem depois de
V[i + 1]6 ento troque
V[i] e V[i + 1] de lugar
e7 houveTroca :=
verdade
Implementao
em C#
utilizando For e
While
class C_BubbleSort{static int[
] Ordena_BubbleSort(int[]
vetor) {intaux;for(inti =
vetor.Length - 1; i >= 1; i--)
{for(intj = 0; j <= i - 1; j++)
{if(vetor[j] > vetor[j + 1])
{class C_BubbleSort{static in
t[] Ordena_BubbleSort(int[]
vetor)
{intaux;boolhouvetroca;do{ho
uvetroca =false;for(intj = 0; j
<= vetor.Length - 2; j++)
{if(vetor[j] > vetor[j + 1])
{//efetua a troca de
valoreshouvetroca =true;aux =
vetor[j];vetor[j] = vetor[j +
1];vetor[j + 1] =
aux;}}}while(houvetroca
==true);
returnvetor;}static voidMain(s
tring[] args) {int[] dados
41
Console.WriteLine( dados[i]
);}Console.ReadKey();}}
Ordena_BubbleSort(dados);C
onsole.WriteLine("\n\nDados
ordenados:"); for(inti = 0; i <
dados.Length; i++)
{Console.WriteLine(dados[i])
;}Console.ReadKey();}}
Quicksort
O algoritmo
Quicksort
um mtodo
de ordenao
muito rpido
e eficiente,
inventado
por C.A.R.
Hoare em
1960,quando
visitou a
Universidade
de Moscou
como
estudante.
Foi publicado
em 1962
aps uma
srie de
refinamentos
.O Quicksort
adota a
estratgia de
diviso e
conquista. Os
passos so:1.
Escolha um
elemento da
lista,
denominado
piv (de forma
randmica)
;2.
Rearranje a
lista de forma
que todos os
elementos
anteriores ao
piv sejam
menores ou
iguais a ele, e
todos
oselementos
posteriores
ao piv
sejam
maiores ou
iguais a ele.
Ao fim do
processo o
piv estar
em sua
posiofinal.
Essa
operao
denominada
partio
;3.
Recursivame
nte ordene a
sublista dos
elementos
menores e a
sublista dos
elementos
maiores; A
base da
recurso so
as listas de
tamanho
zero ou um,
que esto
sempre
ordenadas. O
processo
finito pois a
cadaiterao
pelo menos
um elemento
posto em
sua posio
final e no
ser mais
manipulado
na iterao
seguinte.
Complexi
dade
O(n lg
2
n) nomelhor
casoe nocaso
mdio
O(n
2
) nopior caso;
Implemen
taes
Algoritmo em
portugus
estruturado
42
Choose a format:
.PDF
.TXT
Descarregar
Recomendados
Mislaid: A Novel
Nell Zink
In 1960s Virginia, college freshman and ingnue Peggy falls for professor and...
Baboon
Naja Marie Aidt
Beginning in the middle of crisis, then accelerating through plots that grow ...
Anterior|SeguintePage 1 of 8
Choose a format:
.PDF
.TXT
Descarregar
Browse books
Browse documents
Sobre Scribd
Our blog
Contactanos
Suporte
Ajuda
P.F.
Pressione
Purchase help
AdChoices
Scios
Editores
Desenvolvedores
Legal
o Termos
o Privacidade
o Copyright
Memberships
Join today