You are on page 1of 877

EnviarSign inJoin

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

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
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

Apostila de Estrutura de Dados C#_atualizada


(1 rating)
|Views: 12.615|Likes: 51
Publicado porCarlos Henrique Messias

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 -

No, por uma


boa razo.
Pondo em
perspectiva,
vemos que as
damas
possuem 5 x 10
na potncia
20posies.

Muitas pessoas
tm
computadores
com discos
rgidos de 100
gigabytes [10
na potncia 11
bytes]. Se
voctiver uma

mquina "hipersuper" voc


deve ter um
disco de 1
terabyte [10 na
potncia 12]. Se
voc for a um
dos
50supercomput

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

acho que isso


possa ser feito
com os
computadores
que temos hoje
ou com os
queteremos nas
prximas
dcadas.H

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

(1), pois est


pressupondo-se
o nmero
desejado est
no topo da
lista.Exemplo 2:
Extrair qualquer
elemento de um
vetor. A

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

cada busca (ou


sub-busca), o
problema (as
pginasem que
a palavra pode
estar) vo se
reduzindo
metade, o que
corresponde

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

que tem que


processar
n

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

(Last In First Out).

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.

private string[] dados


=new string[CAPACID
ADE];// vetor para
guardar os dados da
pilha. private inttopo =
-1;// varivel que ir
indicar a posio no
vetor do topo da pilha. //
este mtodo informa o
tamanho da
pilhapublic intTamanho
() {returntopo + 1;//

lembre-se que o vetor


inicia da posio
zero...}// este mtodo
retorna true se a pilha
estiver
vaziapublic boolVazia()
{returnTamanho() ==
0;}// este mtodo
empilha um valor string
na
pilhapublic voidEmpilh
a(stringp_valor)

{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(

"A pilha est


vazia!!!"); }
else{topo--;returndados
[topo + 1];}}// este
mtodo devolve o valor
que est no
topopublic stringRetorn
aTopo() {if(Vazia()
==true)
throw new Exception("
A pilha est vazia!!!");

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

ass Program{static void


Main(string[] args)
{stringopcao ="",
valor; Filaminhafila
=new Fila();
Console.WriteLine("Si
stema em C# para testar
a execuo de uma fila
circular\n");
do{try{Console.WriteL
ine("\n\nDigite: 1>Enfileirar 2-

>Desenfileirar "+ "3->


Tamanho 9>Sair");opcao
=Console.ReadLine();s
witch(opcao){case "1":
Console.WriteLine("Di
gite um valor para
enfileirar:"); valor
=Console.ReadLine();
minhafila.enfileirar(valo
r);break;case "2":
Console.WriteLine("De

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.

3. Retirar 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

class Lista{private cons


t intCAPACIDADE =
10; private string[]
dados
=new string[CAPACID
ADE];
private intquantidade =
0; public inttamanho()
{returnquantidade;}pub
lic voidinsereNaPosicao
(intp_posicao,stringp_v
alor) {if(tamanho() ==

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->

Inserir no incio \n "+


"2-> Inserir no fim \n
"+"3-> Inserir em uma
posio (lembre-se que
inicia do do zero!)\n
"+"4-> Tamanho \n 5->
Listar \n "+"6->
Remover elemento de
uma posio \n 9->
Sair");opcao
=Console.ReadLine();s
witch(opcao){case "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

pode ser feito


sem que seja
necessrio
alterar nada
na classe
Lista.Partindo
deste
princpio, crie

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

para qual tipo


de dado ele
vaiapontar,
para que ele
possa
acessarcorret
amente a
informao.

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

protegido.// para tanto, v


ao menu project->
properties (ultima opo
do menu) -> escolha a aba
BUILD// e marque a opo
"ALLOW UNSAFE
CODE". Salve o projeto e
compile-o com
F5.unsafe{int* p1;// cria
uma varivel que pode
apontar para uma//outra
varivel inteiraintnumero
= 7;// &numero = endereo

da varivel numerop1 =
&numero;// 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

on("A pilha est


vazia!");
else{stringretorno =
topo.Valor;topo =
topo.Anterior;quanti
dade--;returnretorno;
}}/// <summary>///
Mtodo para retornr
o topo da
pilha/// </summary>/

// <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;

i<= numero; i++) {r


= r * i;}returnr;}
longfat_recursivo(int
numero) {if(numero
==
0)return1;else if(num
ero >= 2)
returnnumero*fat_re
cursivo(numero-

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,

pois, toda vez


que uma
Rotina
chamada,
todas as
variveislocai
s so
recriadas.

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

=new Nodo(); raiz =


no_aux;}else{//
localiza onde deve
ser inserido o novo
n.no_aux =
raiz;while(no_eh_ext
erno(no_aux)
==false) {if(valor >
no_aux.get_valor())n
o_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])

{//efetua a troca de valoresaux


= vetor[j];vetor[j] = vetor[j +
1];vetor[j + 1] =
aux;}}}returnvetor;}static voi
dMain(string[] args) {int[]
dados =new int[10]; for(inti =
0; i < dados.Length; i++)
{Console.WriteLine("Informe
um nmero");
dados[i]=Convert.ToInt16(Co
nsole.ReadLine()); }
Ordena_BubbleSort(dados);C
onsole.WriteLine("\n\nDados
ordenados:"); for(inti = 0; i <
dados.Length; i++)

{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

=new int[10]; for(inti = 0; i <


dados.Length; i++)
{Console.WriteLine("Informe
um nmero");
dados[i]=Convert.ToInt16(Co
nsole.ReadLine()); }

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

proc quicksort (x:vet[n]


int; ini:int; fim:int;
n:int)varint:
i,j,y,aux;incioi <- ini;j <fim;y <- x[(ini + fim) div
2];repeteenquanto (x[i] <
y) faai <- i + 1;fimenquanto;enquanto (x[j] >
y) faaj <- j - 1;fimenquanto;se (i <= j)
entoaux <- x[i];x[i] <x[j];x[j] <- aux;i <- i + 1;j
<- j - 1;fim-se;at_que (i

>= j);se (j > ini) entoexec


quicksort (x, ini, j, n);fimse;se (i < fim) entoexec
quicksort (x, i, fim, n);fimse;fim.

42

Mais deste Usurio


Apostila ASP.net c#
Carlos Henrique Messias
Apostila ASP.net c#

Baixar e imprimir este documento

Leia e imprima sem anncios

Download to keep your version

Edit, email or read offline

Choose a format:
.PDF

.TXT

Descarregar

Recomendados
Mislaid: A Novel
Nell Zink
In 1960s Virginia, college freshman and ingnue Peggy falls for professor and...

The Shell Collector: Stories


Anthony Doerr
The "perilously beautiful" (Boston Globe) first story collection by the autho...

Men We Reaped: A Memoir


Jesmyn Ward
In this stirring and clear-eyed memoir, the 2011 National Book Award winner c...

Baboon
Naja Marie Aidt
Beginning in the middle of crisis, then accelerating through plots that grow ...

Anterior|SeguintePage 1 of 8

Baixar e imprimir este documento

Leia e imprima sem anncios

Download to keep your version

Edit, email or read offline

Choose a format:
.PDF

.TXT

Descarregar

Read Unlimited Books for $8.99 per month


Start your free 14 days
No commitment.Cancel anytime.
Movie lovers have Netflix, music lovers have Spotify and book lovers (whether they
read literary fiction or best-selling potboilers) now have Scribd.
[Scribd] is a place where you can browse and skim and read whatever strikes your
fancy
For less than the price of buying one new book a month (e- or otherwise), you can wander
through more than 50,000 books.
This has got to be the next best thing to sliced bread. I can finish reading one book and go
grab another instantly Wendy Brooks, a Scribd reader
Close

You're Reading a Free Preview


Descarregar
Sobre

Browse books

Browse documents

Sobre Scribd

Meet the team

Our blog

Junte-se a nossa equipe!

Contactanos

Suporte

Ajuda

P.F.

Pressione

Purchase help

AdChoices

Scios

Editores

Desenvolvedores
Legal
o Termos
o Privacidade
o Copyright

Memberships

Join today

You might also like