Upload
filipeot3240
View
213
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Cap 3
Citation preview
List
as Li
nea
res
Livr
oPr
ojet
ode
Algo
ritm
os
N
vio
Zi
vian
iCa
ptu
lo3
Se
o
3.1
http
://w
ww
2.dc
c.ufm
g.br
/livro
s/alg
orit
mos/
AlgoritmoseEstruturade Dados II
List
as
Lineare
s
Um
a da
s fo
rma
s m
ais
si
mpl
es
de in
terli
gar
os
ele
me
nto
s de
u
m co
njun
to.
Es
trutu
ra e
m qu
e a
s o
pera
in
serir
, re
tira
r e
lo
caliz
ar
so
de
finid
as.
Po
dem
cr
esc
er
ou
di
min
uir
de ta
ma
nho
du
ran
te a
exe
cu
o de
u
m pr
ogr
am
a, de
a
cord
o co
m a
dem
an
da.
Ite
ns
pode
m se
r a
cess
ado
s, in
serid
os
ou
re
tira
dos
de
um
a lis
ta.
AlgoritmoseEstruturade Dados II
List
as
Lineare
s
D
ua
s lis
tas
pode
m se
r co
nca
ten
ada
s pa
ra fo
rma
r u
ma
lista
n
ica
, o
u u
ma
po
de se
r pa
rtida
e
m du
as
ou
m
ais
lista
s.
Ad
equ
adas
qu
an
do n
o
poss
ve
l pre
ver
a de
ma
nda
por
me
mr
ia, pe
rmiti
ndo
a
m
an
ipu
la
o de
quan
tida
des
impr
evi
sve
is de
da
dos,
de
fo
rma
to
tam
bm
im
pre
vis
vel.
S
o t
eis
e
m a
plic
a
es
tais
co
mo
m
an
ipu
la
o
sim
blic
a, ge
rn
cia
de
m
em
ria
, si
mu
la
es
e
com
pila
dore
s.
AlgoritmoseEstruturade Dados II
Defin
io
deLi
stas
Lineare
s
Se
qn
cia
de ze
ro o
u m
ais
iten
s
x 1,x 2
,,x n
, na qu
al x
ide
um
de
term
inado
tip
o e n re
pres
enta
o
tam
anho
da
lis
ta lin
ear
.
Su
a pr
inci
pal p
ropr
ieda
de es
tru
tura
l en
vo
lve
as po
si
es
rela
tivas
do
s ite
ns
em u
ma
dim
ens
o.
As
sum
indo
n
1, x 1
o pr
imeiro
ite
m da
lis
ta e
x n
o
l
timo
ite
m
da lis
ta.
x i
pre
cede
x i
+1
para
i =
1,
2,,n
1
x isu
cede
x i
-1
para
i =
2,
3,,n
o
e
lem
en
to x i
di
to e
sta
r n
a i-
sim
a po
si
o da
lis
ta.
AlgoritmoseEstruturade Dados II
TAD
List
as Li
neare
s
O
co
njun
to de
o
pera
es
a
ser
defin
ido
de
pen
de de
ca
da ap
lica
o.
Um
co
njun
to de
o
pera
es
n
eces
srio
a
um
a m
aio
ria de
ap
lica
es
: 1)Cr
iar
um
a lis
ta lin
ear
vazi
a.
2)In
serir
um
nov
o ite
m im
edi
ata
mente
ap
s o i-
sim
o ite
m.
3)R
etir
ar o
i-si
mo ite
m.
4)Lo
caliz
ar
o i-
sim
o ite
m pa
ra exa
min
ar e/o
u alte
rar
o co
nte
do de
se
us
com
ponente
s.
5)Co
mbi
nar
du
as
ou m
ais
lis
tas
linear
es em
um
a lis
ta n
ica.
6)Pa
rtir
um
a lis
ta lin
ear
em
du
as
ou m
ais
lis
tas.
7)Fa
zer
um
a c
pia da
lis
ta lin
ear.
8)O
rden
ar os
ite
ns
da lis
ta em
or
dem
as
cende
nte
ou
de
scende
nte
, de
aco
rdo co
m al
guns
de se
us
com
ponen
tes.
9)Pe
squis
ar
a oc
orr
nci
a de
um
ite
m co
m um
va
lor
parti
cula
r em
alg
um
com
ponente
.
AlgoritmoseEstruturade Dados II
Impl
em
enta
es
deLi
stas
Li
neare
s
V
rias
estr
utu
ras
de da
dos
pode
m se
r u
sada
s pa
ra
repr
esen
tar
lista
s lin
eare
s, ca
da u
ma
com
v
anta
gen
s e
desv
anta
gen
s pa
rtic
ula
res.
A
s du
as
repr
esen
ta
es m
ais
util
izad
as s
o as
impl
emen
ta
es po
r m
eio
de
ar
ran
jos e
de a
pon
tado
res
.
AlgoritmoseEstruturade Dados II
Impl
em
enta
es
deLi
stas
Li
neare
s
Ex
empl
o de
Co
njun
to de
O
pera
es
:
1)FL
Vazi
a(Li
sta). F
az
a lis
ta fic
ar
vazi
a.
2)In
sere
(x, Li
sta). I
nse
re x
ap
s o l
timo ite
m da
lis
ta.
3)R
etir
a(p,
Li
sta, x).
R
eto
rna o ite
m x
que est
na po
si
o p
da lis
ta,
retir
ando
-o da
lis
ta e de
sloca
ndo
os
itens
a pa
rtir
da po
si
o p+
1 pa
ra
as
posi
es
an
terio
res.
4)Va
zia(Li
sta). E
sta fu
n
o re
torn
a tru
e se
lis
ta va
zia; s
eno
re
torn
a
fals
e.
5)Im
prim
e(Li
sta). I
mpr
ime os
itens
da lis
ta na o
rdem
de
oco
rrn
cia.
AlgoritmoseEstruturade Dados II
Impl
em
enta
o de
Li
stas
por
mei
o de
arr
anjos
O
s ite
ns
da lis
ta s
o ar
maz
enad
os
em
posi
es
c
on
tgu
as de
m
emr
ia.
A
lis
ta po
de se
r pe
rco
rrid
a em
qu
alqu
er
dire
o
.
A
in
ser
o de
u
m n
ov
o ite
m po
de se
r re
aliz
ada
ap
s o
l
timo
ite
m co
m cu
sto
con
sta
nte
.
A
in
ser
o de
u
m n
ov
o ite
m n
o m
eio
da
lista
re
quer
u
m de
slo
cam
ento
de
to
dos
os
iten
s lo
caliz
ado
s ap
s o
po
nto
de
inse
ro
.
R
etira
r u
m ite
m do
in
cio
da
lis
ta re
quer
um
de
slo
cam
ento
de
ite
ns
para
pr
een
cher
o es
pao
de
ixad
o v
azio
.
AlgoritmoseEstruturade Dados II
Estru
tura
da
Li
sta Us
an
do Ar
ranjo
O
s ite
ns
so
ar
maz
enad
os
em u
m ar
ray
de ta
man
ho
sufic
ien
te pa
ra ar
maz
enar
a
lista
.
O
ca
mpo
l
timo
ap
on
ta pa
ra a
posi
o
se
guin
te a
do
ltim
o el
emen
to da
lis
ta.
O
i-
sim
o ite
m da
lis
ta es
tar
maz
enad
o n
a i-
sim
a po
si
o do
ar
ray,
1
i < l
timo
.
A
co
ns
tan
te M
axTa
m de
fine
o ta
man
ho m
xim
o pe
rmiti
do
para
a
lista
.
AlgoritmoseEstruturade Dados II
Estru
tura
da
Li
sta Us
an
do Ar
ranjo
#include
#include
#include
#defineInicioArranjo
1#defineMaxTam
1000
typedef int TipoChave;
typedef int Apontador;
typedef struct{
TipoChave Chave;
/*outros componentes*/
}TipoItem;
typedef struct{
TipoItemItem[MaxTam];
Apontador Primeiro, Ultimo;
}TipoLista;
AlgoritmoseEstruturade Dados II
void
FLVazia(TipoLista*Lista)
{Lista->Primeiro=InicioArranjo;
Lista->Ultimo =Lista->Primeiro;
} /*
FLVazia
*/
int Vazia(TipoLista Lista)
{return (Lista.Primeiro==Lista.Ultimo);
} /*
Vazia
*/
void
Insere(TipoItemx,TipoLista*Lista)
{if (Lista->Ultimo >MaxTam)
printf("Lista esta cheia\n");
else {
Lista->Item[Lista->Ultimo -1] = x;
Lista->Ultimo++;
}} /*
Insere*/
Ope
ra
es so
bre
List
a Us
ando
A
rran
jo
AlgoritmoseEstruturade Dados II
void
Retira(Apontadorp,TipoLista*Lista,
TipoItem*Item)
{intAux;
if (Vazia(*Lista) || p >=Lista->Ultimo)
{ printf("Erro Posicao nao existe\n");
return;
} *Item =Lista->Item[p -1];
Lista->Ultimo--;
for (Aux = p; Aux Ultimo; Aux++)
Lista->Item[Aux -1] =Lista->Item[Aux];
} /*
Retira*/
Ope
ra
es so
bre
List
a Us
ando
A
rran
jo
AlgoritmoseEstruturade Dados II
void
Imprime(TipoLista Lista)
{intAux;
for (Aux =Lista.Primeiro-1;
Aux Primeiro= (Apontador)malloc(sizeof(Celula));
Lista->Ultimo =Lista->Primeiro;
Lista->Primeiro->Prox= NULL;
} int Vazia(TipoLista Lista)
{return (Lista.Primeiro==Lista.Ultimo);
} void
Insere(TipoItemx,TipoLista*Lista)
{Lista->Ultimo->Prox= (Apontador)malloc(sizeof(Celula));
Lista->Ultimo =Lista->Ultimo->Prox;
Lista->Ultimo->Item = x;
Lista->Ultimo->Prox= NULL;
}
AlgoritmoseEstruturade Dados II
Ope
ra
es so
bre
List
a Us
ando
Apo
nta
dore
s
void
Imprime(TipoLista Lista)
{ApontadorAux;
Aux =Lista.Primeiro->Prox;
while (Aux != NULL) {
printf("%d\n", Aux->Item.Chave);
Aux = Aux->Prox;
}}
AlgoritmoseEstruturade Dados II
Ope
ra
es so
bre
List
a Us
ando
Apo
nta
dore
s
Va
nta
gen
s:
Pe
rmite
in
serir
ou re
tirar
itens
do m
eio
da
lis
ta a um
cu
sto co
nst
ante
(impo
rtante
qu
ando
a lis
ta te
m de
se
r m
antid
a em
ord
em
).
Bom
pa
ra apl
ica
es
em
qu
e no
e
xiste
pr
evi
so so
bre o cr
esc
imento
da lis
ta (o
tam
anho
m
xim
o da
lis
ta no
pr
eci
sa se
r de
finid
o a pr
iori).
D
esv
anta
gem
:
Utiliz
a
o de
m
em
ria
e
xtra
pa
ra arm
aze
na
r os
apo
nta
dore
s.
AlgoritmoseEstruturade Dados II
Exem
plo
de
Us
o Li
stas
-
Vest
ibu
lar
N
um
v
estib
ula
r, ca
da c
andi
dato
te
m di
reito
a
trs
o
pe
s pa
ra te
nta
r u
ma
vag
a e
m u
m do
s s
ete
curs
os
ofe
reci
dos.
Pa
ra ca
da c
andi
dato
lido
u
m re
gist
ro:
Ch
ave
: nm
ero
de
in
scri
o do
ca
ndi
dato
.
N
ota
Fina
l: m
dia
da
s nota
s do
ca
ndi
dato
.
O
po
: ve
tor
conte
ndo
a pr
imeira
, a se
gunda
e a te
rceira
o
pe
s de
curs
o do
ca
ndi
dato
.
Cha
ve :
1..99
9;N
ota
Fin
al :
0.
.10
;O
pca
o :
arr
ay[1
. .3]
of 1
. .7;
AlgoritmoseEstruturade Dados II
Exem
plo
de
Us
o Li
stas
-
Vest
ibu
lar
Pr
obl
ema:
di
strib
uir
os
can
dida
tos
entr
e o
s c
urs
os,
segu
ndo
a
no
ta fin
al e
as o
pe
s ap
rese
nta
das
por
can
dida
to.
Em
ca
so de
em
pate
, o
s ca
ndi
dato
s se
ro
at
en
dido
s n
a o
rdem
de
in
scri
o pa
ra o
s ex
ames
.
AlgoritmoseEstruturade Dados II
Vest
ibu
lar
-Po
ssv
el So
lu
o
O
rde
nar
re
gist
ros
pelo
ca
mpo
N
ota
Fin
al,
resp
eita
ndo
a
ord
em de
in
scri
o;
Pe
rco
rrer
ca
da
con
junto
de
re
gist
ros
com
m
esm
a N
ota
Fin
al,
com
ean
do
pelo
co
njun
to
de
No
taFi
nal
10
,
segu
ido
pe
lo de
N
ota
Fin
al 9,
e
ass
im po
r di
an
te.
Pa
ra u
m co
njun
to de
m
esm
a N
ota
Fin
al te
nta
-se
en
caix
ar
cada
re
gis
tro
de
sse
con
junto
e
m
um
do
s cu
rso
s,
na
prim
eira
da
s tr
s
op
es
em
que
hou
ver
v
aga
(se
hou
ver
).
AlgoritmoseEstruturade Dados II
Vest
ibu
lar
-Po
ssv
el So
lu
o
Pr
imei
ro re
finam
ento
:
/* programaVestibular */
void main()
{int Nota;
ordena os registros pelo campo NotaFinal ;
for (Nota := 10; Nota >=0; Nota--) {
while (houver registro com mesma nota){
if (existe vaga em um dos cursos de opcao do
candidato)
insere registro no conjunto de aprovados
else insere registro no conjunto de reprovados;
}} imprime aprovados por curso ;
imprime reprovados;
}
AlgoritmoseEstruturade Dados II
Vest
ibu
lar
-Cl
assi
fica
o do
s A
lun
os
Um
a bo
a m
anei
ra de
re
pres
enta
r u
m co
njun
to de
regi
stro
s
com
o
u
so
de
lis
tas.
A
o se
rem
lid
os,
o
s re
gist
ros
so
a
rmaz
enad
os
em lis
tas
para
ca
da n
ota
.
A
ps
a le
itura
do
l
timo
re
gist
ro o
s ca
ndi
dato
s es
to
auto
mat
ica
men
te o
rde
nad
os
por
No
taFi
nal
.
AlgoritmoseEstruturade Dados II
Vest
ibu
lar
-Cl
assi
fica
o do
s A
lun
os
D
entr
o de
c
ada
lista
, o
s re
gist
ros
est
o o
rde
nad
os
por
ord
em de
in
scri
o,
desd
e qu
e o
s re
gist
ros
sejam
lid
os
na
ord
em de
in
scri
o de
ca
da c
an
dida
to e
inse
rido
s n
esta
o
rde
m.
NUL
L
NUL
L
AlgoritmoseEstruturade Dados II
Vest
ibu
lar
-Cl
assi
fica
o do
s A
lun
os
A
s lis
tas
de re
gist
ros
so
pe
rco
rrid
as,
inic
ian
do-se
pe
la
de N
ota
Fin
al 10
, se
guid
a pe
la de
N
ota
Fin
al 9,
e
assi
m
suce
ssiv
am
ente
.
Ca
da re
gist
ro
retir
ado
e
colo
cado
em
u
ma
das
lista
s ab
aix
o,
na
prim
eira
da
s tr
s o
pe
s em
qu
e ho
uv
er v
aga.
Ap
s a
le
itura
do
l
timo
re
gist
ro o
s ca
ndi
dato
s es
to
auto
mat
ica
men
te o
rde
nad
os
por
No
taFi
nal
.
AlgoritmoseEstruturade Dados II
Vest
ibu
lar
-Cl
assi
fica
o do
s A
lun
os
Se
n
o ho
uv
er v
aga,
o
re
gist
ro
co
loca
do em
u
ma
lista
de re
pro
va
dos.
A
o fin
al a
est
rutu
ra ac
ima
con
ter
a re
la
o de
can
dida
tos
apro
va
dos
em ca
da cu
rso
.
AlgoritmoseEstruturade Dados II
Vest
ibu
lar
-Se
gun
do R
efin
amen
to/* programa Vestibular */
Void main()
{int Nota;
TipoChave Chave;
le numero de vagas para cada curso;
inicializa listas de classificacao, aprovadose de reprovados;
le registro;
while (Chave != 0) {
insere registro nas listas de classificacao, conforme NotaFinal;
le registro;
} for (Nota = 10; Nota >= 0; Nota--) {
while (houver proximo registro com mesma NotaFinal) {
retira registro da lista;
if (existe vaga em um dos cursos de opcao do candidato) {
insere registro na lista de aprovados;
decrementa o numero de vagas para aquele curso;
} else insere registro na lista de reprovados;
obtem proximo registro;
}} imprime aprovados por curso;
imprime reprovados;
}
AlgoritmoseEstruturade Dados II
Vest
ibu
lar
-Es
tru
tura
Fi
nal
da
Li
sta
#defi
ne NOpcoes 3
#defi
ne NCursos 7
#defi
ne FALSE 0
#defi
ne TRUE 1
typede
f sho
rt Tip
oCha
ve;
typede
f struct Tip
oItem {
Tip
oCha
ve Cha
ve;
cha
r NotaFin
al;
cha
r Opcao[N
Opcoes];
} Tip
oItem;
typede
f struct Celu
la {
Tip
oItem Item;
struct Celu
la *Prox;
} Celu
la;
typede
f struct Tip
oLis
ta {
Celu
la *Prim
eir
o, *Ult
imo;
} Tip
oLis
ta;
AlgoritmoseEstruturade Dados II
Vest
ibu
lar
-Es
tru
tura
Fi
nal
da
Li
sta
#defi
ne NOpcoes 3
#defi
ne NCursos 7
#defi
ne FALSE
0
#defi
ne TRUE 1
Tip
oItem Regis
tro;
Tip
oLis
ta Cla
ssif
icacao[1
1];
Tip
oLis
ta Aprovado
s[N
Cursos];
Tip
oLis
ta Reprovado
s;
long Vagas[N
Cursos];
sho
rt Passou;
long i,
Nota;
AlgoritmoseEstruturade Dados II
Vest
ibu
lar
-R
efin
amen
to Fi
nal
O
bser
ve
que
o pr
ogr
am
a
com
plet
amen
te in
depe
nde
nte
da im
plem
enta
o
do
tip
o a
bstr
ato
de
da
dos
List
a.void
LeRegis
tro(T
ipoItem *Regis
tro)
{ /*
---os valo
res li
dos de
vem estar separado
s por br
ancos---*/
int i;
scanf(
"%d
%d", &(R
egis
tro->Cha
ve),
&(R
egis
tro->NotaFin
al)
);
for (i
= 0;
i
< NOpcoes; i+
+)
{ scanf(
"%d
", &(R
egis
tro->Opcao[i
]));
}
}
AlgoritmoseEstruturade Dados II
Vest
ibu
lar
-R
efin
amen
to Fi
nal
int main
(int argc, cha
r *argv[]
){
/*---Programa prin
cip
al-
--*/
for (i
= 1;
i
Topo = 0;
} /*
FPVazia
*/
int Vazia
(Tip
oPil
ha Pil
ha)
{return (P
ilha
.Topo == 0)
;}
/*
Vazia
*/
void
Empil
ha(T
ipoItem x, Tip
oPil
ha *Pil
ha)
{if
(P
ilha
->Topo == MaxTam)
prin
tf(
" Erro pil
ha esta che
ia\n
");
els
e {
Pil
ha->Topo++;
Pil
ha->Item[P
ilha
->Topo -
1] = x;
}}
/*
Empil
ha */
AlgoritmoseEstruturade Dados II
Ope
ra
es so
bre
Pilh
as Us
ando
Arr
anjos
void
Desempil
ha(T
ipoPil
ha *Pil
ha, Tip
oItem *Item)
{if
(V
azia
(*Pil
ha))
prin
tf(
" Erro pil
ha esta vazia
\n");
els
e {
*Item = Pil
ha->Item[P
ilha
->Topo -
1];
Pil
ha->Topo--;
}}
/*
Desempil
ha */
int Tamanho
(Tip
oPil
ha Pil
ha)
{return (P
ilha
.Topo);
} /*
Tamanho
*/
AlgoritmoseEstruturade Dados II
Impl
emen
ta
o de
Pi
lhas
po
r m
eio
de
Apo
nta
dore
s
H
um
a c
lula
ca
bea
no
to
po pa
ra
faci
litar
a
impl
emen
ta
o
das
ope
ra
es
empi
lha
e de
sem
pilh
a
qua
ndo
a
pilh
a es
tv
azi
a.
Pa
ra
dese
mpi
lhar
o
ite
m
xn
bast
a
desl
igar
a
c
lula
ca
bea
da
lis
ta
e
a
clu
la
que
co
nt
m
xn
pass
a a
se
r a
clu
la ca
bea
.
Pa
ra em
pilh
ar u
m n
ov
o ite
m,
bas
ta fa
zer
a o
pera
o
co
ntr
ria
, cr
ian
do u
ma
no
va
clu
la ca
bea
e
colo
can
do o
n
ov
o ite
m
na
antig
a.
AlgoritmoseEstruturade Dados II
Estr
utu
ra da
Pi
lha
Usan
doA
pon
tado
res
O
ca
mpo
Ta
man
ho ev
ita a
con
tage
m do
n
mer
o de
ite
ns
na
fun
o
Ta
man
ho.
Ca
da c
lula
de
u
ma
pilh
a co
nt
m u
m ite
m da
pi
lha
e u
m
apo
nta
dor
para
o
utr
a c
lula
.
O
re
gis
tro
Ti
poPi
lha
co
nt
m u
m ap
on
tado
r pa
ra o
to
po da
pilh
a (c
lula
ca
bea
) e u
m ap
on
tado
r pa
ra o
fu
ndo
da
pilh
a.
AlgoritmoseEstruturade Dados II
Estr
utu
ra da
Pi
lha
Usan
doA
pon
tado
res
#defi
ne max 10
typede
f in
t Tip
oCha
ve;
typede
f struct {
int Cha
ve;
/* ---
outros componentes ---
*/
} Tip
oItem;
typede
f struct Celu
la_str *Apontado
r;
typede
f struct Celu
la_str {
Tip
oItem Item;
Apontado
r Prox;
} Celu
la;
typede
f struct {
Apontado
r Fundo
, Topo;
int Tamanho
;}
Tip
oPil
ha;
AlgoritmoseEstruturade Dados II
Ope
ra
es so
bre
Pilh
as Us
ando
Apo
nta
dore
svoid
FPVazia
(Tip
oPil
ha *Pil
ha)
{Pil
ha->Topo = (A
pontado
r)
mall
oc(s
izeof(
Celu
la))
;Pil
ha->Fundo
= Pil
ha->Topo;
Pil
ha->Topo->Prox = NULL;
Pil
ha->Tamanho
= 0;
} /*
FPVazia
*/
int Vazia
(Tip
oPil
ha Pil
ha)
{return (P
ilha
.Topo == Pil
ha.Fundo
);}
/*
Vazia
*/
void
Empil
ha(T
ipoItem x, Tip
oPil
ha *Pil
ha)
{Apontado
r Aux;
Aux = (A
pontado
r)
mall
oc(s
izeof(
Celu
la))
;Pil
ha->Topo->Item = x;
Aux->Prox = Pil
ha->Topo;
Pil
ha->Topo = Aux;
Pil
ha->Tamanho
++;
} /*
Empil
ha */
AlgoritmoseEstruturade Dados II
Ope
ra
es so
bre
Pilh
as Us
ando
Apo
nta
dore
svoid
Desempil
ha(T
ipoPil
ha *Pil
ha, Tip
oItem *Item)
{Apontado
r q;
if (V
azia
(*Pil
ha))
{ prin
tf(
" Erro li
sta vazia
\n");
return;
} q = Pil
ha->Topo;
Pil
ha->Topo = q->Prox;
*Item = q->Prox->Item;
free(q
);Pil
ha->Tamanho
--;
} /*
Desempil
ha */
int Tamanho
(Tip
oPil
ha Pil
ha)
{return (P
ilha
.Tamanho
);}
/*
Tamanho
*/
AlgoritmoseEstruturade Dados II
Exem
plo
de
Us
o Pi
lhas
-
Edito
r de
Texto
s (E
T)
#
: ca
nce
lar
cara
cter
e an
terio
r n
a lin
ha se
ndo
e
dita
da.
Ex.:
UEM
##FM
B#G
! U
FMG
.
\
: ca
nce
la to
dos
os
car
acte
res
an
terio
res
na
linha
sen
do ed
itada
.
*:
salta
a
linha
. Im
prim
e o
s ca
ract
eres
qu
e pe
rten
cem
linha
se
ndo
ed
itada
, in
icia
ndo
u
ma
n
ov
a lin
ha de
impr
ess
o a
part
ir do
ca
ract
ere
imed
iata
men
te se
guin
te
ao ca
ract
ere
salta
-lin
ha. Ex
: D
CC*UF
MG
.* !
DCC UF
MG
.
AlgoritmoseEstruturade Dados II
Exem
plo
de
Us
o Pi
lhas
-
Edito
r de
Texto
s (E
T)
Vam
os
escr
ever
u
m Ed
itor
de Te
xto
(E
T) qu
e ac
eite
o
s tr
s co
man
dos
desc
rito
s ac
ima.
O
ET
de
ver
le
r u
m ca
ract
ere
de ca
da v
ez do
te
xto
de
entr
ada
e pr
odu
zir
a im
pres
so
lin
ha a
linha
, ca
da lin
ha
con
ten
do n
o m
xim
o 70
ca
ract
ere
s de
im
pres
so
.
O
ET
de
ver
u
tiliz
ar o
tip
o a
bstr
ato
de
da
dos
Pilh
a de
finid
o an
terio
rmen
te,
impl
emen
tado
po
r m
eio
de
arra
njo.
AlgoritmoseEstruturade Dados II
Suge
sto
de
Te
xto
pa
ra Te
star
o
ET
Este
et#
um
te
ste pa
ra o ET
, o ext
rate
rrest
re em
PASC
AL.*Ac
aba
mos
de te
star
a ca
paci
dade
de
o ET
salta
r de
lin
ha,
util
iza
ndo
se
us
pode
res
ext
ras
(cuid
ado
, po
is ago
ra
vam
os
est
oura
r
a ca
paci
dade
m
xim
a da
lin
ha de
im
press
o, qu
e
de70 ca
ract
ere
s.)*O
k#
cut#
rso dh
#e Es
trutu
ras
de D
ado
s
et#
h#
um
cuu#r
sh#o
#x
# x?
*!#
?!#+
.* Co
mo et#
bo
m
n#n
t#a
o##
# r#
ess
#tt#
ar
mb#
aa#t
riz#c
ull#
ado
nn#x
#ele
!\Se
ra
que est
e fu
nci
ona\\\
? O
si
nal?
no
###
deve
fic
ar!
~
AlgoritmoseEstruturade Dados II
ET -
Impl
emen
ta
o
Es
te pr
ogr
am
a u
tiliz
a u
m tip
o a
bstr
ato
de
da
dos
sem
con
hece
r de
talh
es de
su
a im
plem
enta
o
.
A
im
plem
enta
o
do
TA
D Pi
lha
que
util
iza
arra
njo
pode
ser
subs
titu
da
pela
im
plem
enta
o
qu
e u
tiliz
a ap
on
tado
res
sem
ca
us
ar im
pact
o n
o pr
ogr
ama.
AlgoritmoseEstruturade Dados II
ET -
Impl
emen
ta
o
#inclu
de
#defi
ne MaxTam 70
#defi
ne Cancela
Carater '#'
#defi
ne Cancela
Lin
ha '\\
'
#defi
ne Sa
ltaLin
ha '*'
#defi
ne MarcaEof
'~'
typede
f cha
r Tip
oCha
ve;
typede
f in
t Apontado
r;
typede
f struct {
/* ---
outros componentes ---
*/
Tip
oCha
ve Cha
ve;
} Tip
oItem;
typede
f struct {
Tip
oItem Item[M
axTam];
Apontado
r Topo;
} Tip
oPil
ha;
AlgoritmoseEstruturade Dados II
ET -
Impl
emen
ta
o
void
FPVazia
(Tip
oPil
ha *Pil
ha)
{Pil
ha->Topo = 0;
} /*
FPVazia
*/
int Vazia
(Tip
oPil
ha Pil
ha)
{return (P
ilha
.Topo == 0)
;}
/*
Vazia
*/
void
Empil
ha(T
ipoItem x, Tip
oPil
ha *Pil
ha)
{if
(P
ilha
->Topo == MaxTam)
prin
tf(
" Erro pil
ha est a che
ia\n
");
els
e {
Pil
ha->Topo++;
Pil
ha->Item[P
ilha
->Topo -
1] = x;
}}
/*
Empil
ha */
AlgoritmoseEstruturade Dados II
ET -
Impl
emen
ta
o
void
Desempil
ha(T
ipoPil
ha *Pil
ha, Tip
oItem *Item)
{if
(V
azia
(*Pil
ha))
prin
tf(
" Erro pil
ha est a vazia
\n");
els
e {
*Item = Pil
ha->Item[P
ilha
->Topo -
1];
Pil
ha->Topo--;
}}
/*
Desempil
ha */
int Tamanho
(Tip
oPil
ha Pil
ha)
{return (P
ilha
.Topo);
} /*
Tamanho
*/
AlgoritmoseEstruturade Dados II
ET -
Impl
emen
ta
o
int main(int argc, char *argv[])
{TipoPilha Pilha;
TipoItem x;
FPVazia(&Pilha);
x.Chave = getchar();
while (x.Chave != MarcaEof) {
if (x.Chave == CancelaCarater) {
if (!Vazia(Pilha))
Desempilha(&Pilha, &x);
} else if (x.Chave == CancelaLinha)
FPVazia(&Pilha);
else if (x.Chave == SaltaLinha)
Imprime(&Pilha);
else if (Tamanho(Pilha) == MaxTam){
Imprime(&Pilha);
Empilha(x, &Pilha);
} x.Chave = getchar();
} if (!Vazia(Pilha)) Imprime(&Pilha);
return 0;
} /* ET */
AlgoritmoseEstruturade Dados II
ET -
Impl
emen
ta
o
void
Imprim
e(T
ipoPil
ha *Pil
ha)
{Tip
oPil
ha Pil
haux;
Tip
oItem x;
FPVazia
(&Pil
haux);
whi
le (!
Vazia
(*Pil
ha))
{Desempil
ha(P
ilha
, &x);
Empil
ha(x
, &Pil
haux);
}whi
le (!
Vazia
(Pil
haux))
{ Desempil
ha(&
Pil
haux, &x);
putcha
r(x
.Cha
ve);
}putcha
r('
\n');
} /*
Imprim
e */
AlgoritmoseEstruturade Dados II
Fila
um
a lis
ta lin
ear
em qu
e to
das
as in
ser
es
so
real
izad
as em
u
m ex
trem
o da
lis
ta,
e to
das
as
retir
adas
e,
gera
lmen
te,
os
aces
so
s s
o re
aliz
ado
s n
o o
utr
o ex
trem
o
da lis
ta.
O
m
ode
lo in
tuiti
vo
de
u
ma
fila
o
de
u
ma
fila
de
es
pera
em qu
e as
pe
sso
as n
o in
cio
da
fil
a s
o se
rvid
as pr
imei
ro
e as
pe
sso
as qu
e c
hega
m en
tra
m n
o fim
da
fil
a.
S
o ch
ama
das
lista
s fif
o (f
irst-i
n,
fir
st-o
ut
).
AlgoritmoseEstruturade Dados II
Fila
Ex
iste
u
ma
ord
em lin
ear
pa
ra fil
as
que
a
o
rdem
de
cheg
ada
.
S
o u
tiliz
adas
qu
an
do de
sejam
os
pro
cess
ar ite
ns
de
aco
rdo
co
m a
ord
em pr
imei
ro-qu
e-c
hega
, pr
imei
ro-
aten
dido
.
Si
stem
as o
pera
cio
nai
s u
tiliz
am fil
as pa
ra re
gula
r a
ord
em
na
qual
ta
refa
s de
vem
re
cebe
r pr
oce
ssam
ento
e
rec
urs
os
dev
em se
r al
oca
dos
a pr
oce
sso
s.
AlgoritmoseEstruturade Dados II
TAD
Fi
las
Co
njun
to de
o
pera
e
s:
1)FF
Vazi
a(F
ila). F
az
a fila
fic
ar
vazi
a.
2)En
fileira
(x, Fi
la). I
nse
re o ite
m x
no fin
al d
a fila
.
3)D
ese
nfile
ira(F
ila, x).
R
eto
rna o ite
m x
no in
cio
da
fila, re
tirando
-o da
fila
.
4)Va
zia(F
ila). E
sta
fun
o re
torn
a tru
e se
a fila
est
va
zia; s
eno
re
torn
a fa
lse.
AlgoritmoseEstruturade Dados II
Impl
emen
ta
o de
Fi
las
por
mei
o de
Arr
anjos
O
s ite
ns
so
ar
maz
enad
os
em po
si
es
con
tgu
as de
mem
ria
.
A
o
pera
o
En
filei
ra fa
z a
part
e de
tr
s da
fil
a ex
pan
dir-
se.
A
o
pera
o
D
esen
filei
ra fa
z a
part
e da
fre
nte
da
fil
a co
ntr
air-
se.
A
fil
a te
nde
a
cam
inha
r pe
la m
emr
ia do
c
om
puta
dor,
ocu
pan
do es
pao
n
a pa
rte
de tr
s e
desc
arta
ndo
es
pao
na
part
e da
fre
nte
.
AlgoritmoseEstruturade Dados II
Impl
emen
ta
o de
Fi
las
por
mei
o de
Arr
anjos
Co
m po
uca
s in
ser
es
e
retir
adas
, a
fila
vai
a
o en
co
ntr
o
do lim
ite do
es
pao
da
m
emr
ia al
oca
do pa
ra el
a.
So
lu
o:
imag
inar
o
ar
ray
co
mo
u
m c
rcu
lo. A
pr
imei
ra
posi
o
se
gue
a l
tima.
AlgoritmoseEstruturade Dados II
Impl
emen
ta
o de
Fi
las
por
mei
o de
Arr
anjos
A
fil
a se
e
nco
ntr
a em
po
si
es c
on
tgu
as de
m
emr
ia,
em al
gum
a po
si
o do
c
rcu
lo,
delim
itada
pe
los
apo
nta
dore
s Fr
ente
e
Trs
.
Pa
ra en
filei
rar,
ba
sta
mo
ver
o
ap
on
tado
r Tr
s u
ma
posi
o
n
o se
ntid
o ho
rrio
.
Pa
ra de
sen
filei
rar,
ba
sta
m
ov
er o
ap
on
tado
r Fr
ente
u
ma
posi
o
n
o se
ntid
o ho
rrio
.
AlgoritmoseEstruturade Dados II
Estr
utu
ra da
Fi
la Us
ando
A
rran
jo
O ta
man
ho m
xim
o do
ar
ray
circ
ula
r
defin
ido
pe
la
con
sta
nte
M
axTa
m.
O
s o
utr
os
cam
pos
do re
gist
ro Ti
poPi
lha
co
nt
m
apo
nta
dore
s pa
ra a
part
e da
fre
nte
e
de tr
s da
fil
a.#i
nclu
de
#inclu
de
#inclu
de
#defi
ne MaxTam 10
00
typede
f in
t Apontado
r;
typede
f in
t Tip
oCha
ve;
typede
f struct {
Tip
oCha
ve Cha
ve;
/* outros componentes */
} Tip
oItem;
typede
f struct {
Tip
oItem Item[M
axTam];
Apontado
r Frente, Tras;
} Tip
oFil
a;
AlgoritmoseEstruturade Dados II
Ope
ra
es so
bre
Fila
s Us
ando
Posi
es
Co
ntg
uas
de
M
emr
ia
N
os
cas
os
de fil
a c
heia
e
fila
vaz
ia,
os
apo
nta
dore
s Fr
ente
e
Trs
ap
on
tam
pa
ra a
mes
ma
posi
o
do
c
rcu
lo.
Um
a sa
da
para
di
stin
guir
as du
as
situ
ae
s
deix
ar u
ma
posi
o
v
azi
a n
o ar
ray.
N
este
ca
so
, a
fila
est
chei
a qu
ando
Tr
s+
1 fo
r ig
ua
l a
Fren
te.
void
FFVazia
(Tip
oFil
a *Fil
a)
{Fil
a->Frente = 1;
Fil
a->Tras = Fil
a->Frente;
} /*
FFVazia
*/
int Vazia
(Tip
oFil
a Fil
a)
{return (F
ila.Frente == Fil
a.Tras);
} /*
Vazia
*/
AlgoritmoseEstruturade Dados II
Ope
ra
es so
bre
Fila
s Us
ando
Posi
es
Co
ntg
uas
de
M
emr
iavoid
Enfi
leir
a(T
ipoItem x, Tip
oFil
a *Fil
a)
{if
(F
ila->Tras %
MaxTam + 1
== Fil
a->Frente)
prin
tf(
" Erro fi
la est a che
ia\n
");
els
e {
Fil
a->Item[F
ila->Tras -
1] = x;
Fil
a->Tras = Fil
a->Tras %
MaxTam + 1;
}}
/*
Enfi
leir
a */
void
Desenfi
leir
a(T
ipoFil
a *Fil
a, Tip
oItem *Item)
{if
(V
azia
(*Fil
a))
prin
tf(
" Erro fi
la est a vazia
\n");
els
e {
*Item = Fil
a->Item[F
ila->Frente -
1];
Fil
a->Frente = Fil
a->Frente %
MaxTam + 1;
}}
/*
Desenfi
leir
a */
AlgoritmoseEstruturade Dados II
Impl
emen
ta
o de
Fi
las
por
mei
o de
Apo
nta
dore
s
H
um
a c
lula
ca
bea
para
fa
cilit
ar a
impl
em
enta
o
das
ope
ra
es En
filei
ra e
Des
enfil
eira
qu
an
do a
fila
est
vaz
ia.
Qu
an
do a
fila
est
vaz
ia,
os
apo
nta
dore
s Fr
en
te e
Trs
apo
nta
m pa
ra a
clu
la ca
bea
.
Pa
ra en
filei
rar
um
n
ov
o ite
m,
bas
ta cr
iar
um
a c
lula
n
ov
a,
lig-
la a
ps
a
clu
la qu
e co
nt
m x
ne
colo
car
nel
a o
n
ov
o
item
.
Pa
ra de
sen
filei
rar
o ite
m x
1, ba
sta
desl
igar
a
cl
ula
cabe
a da
lis
ta e
a c
lula
qu
e co
nt
m x
1pa
ssa
a se
r a
clu
la ca
bea
.
AlgoritmoseEstruturade Dados II
Estr
utu
ra da
Fi
la Us
ando
A
pon
tado
res
A
fil
a
impl
emen
tada
po
r m
eio
de
c
lula
s.
Ca
da c
lula
co
nt
m u
m ite
m da
fil
a e
um
ap
on
tado
r pa
ra
ou
tra
cl
ula
.
A
es
tru
tura
Ti
poFi
la c
on
tm
u
m a
pon
tado
r pa
ra a
fren
te
da fil
a (c
lula
ca
bea
) e u
m ap
on
tado
r pa
ra a
pa
rte
de
trs
da
fil
a.
AlgoritmoseEstruturade Dados II
Estr
utu
ra da
Fi
la Us
ando
A
pon
tado
res
#inclu
de
#inclu
de
#inclu
de
#defi
ne max 10
typede
f struct Celu
la_str *Apontado
r;
typede
f in
t Tip
oCha
ve;
typede
f struct Tip
oItem {
Tip
oCha
ve Cha
ve;
/* outros componentes */
} Tip
oItem;
typede
f struct Celu
la_str {
Tip
oItem Item;
Apontado
r Prox;
} Celu
la;
typede
f struct Tip
oFil
a {
Apontado
r Frente, Tras;
} Tip
oFil
a;
AlgoritmoseEstruturade Dados II
Ope
ra
es so
bre
Fila
s Us
ando
Apo
nta
dore
svoid
FFVazia
(Tip
oFil
a *Fil
a)
{Fil
a->Frente = (A
pontado
r)
mall
oc(s
izeof(
Celu
la))
;Fil
a->Tras = Fil
a->Frente;
Fil
a->Frente->Prox = NULL;
} /*
FFVazia
*/
int Vazia
(Tip
oFil
a Fil
a)
{return (F
ila.Frente == Fil
a.Tras);
} /*
Vazia
*/
void
Enfi
leir
a(T
ipoItem x, Tip
oFil
a *Fil
a)
{Fil
a->Tras->Prox = (A
pontado
r)
mall
oc(s
izeof(
Celu
la))
;Fil
a->Tras = Fil
a->Tras->Prox;
Fil
a->Tras->Item = x;
Fil
a->Tras->Prox = NULL;
} /*
Enfi
leir
a */
AlgoritmoseEstruturade Dados II
Ope
ra
es so
bre
Fila
s Us
ando
Apo
nta
dore
svoid
Desenfi
leir
a(T
ipoFil
a *Fil
a, Tip
oItem *Item)
{Apontado
r q;
if (V
azia
(*Fil
a))
{ prin
tf(
" Erro fi
la est a vazia
\n");
return;
} q = Fil
a->Frente;
Fil
a->Frente = Fil
a->Frente->Prox;
*Item = Fil
a->Frente->Item;
free(q
);}
/*
Desenfi
leir
a */
Exer
cici
os
1)Es
ten
da o TA
D Li
sta, im
ple
menta
do po
r apo
nta
dore
s, pa
ra in
cluir
um
proce
dim
ento
que
rem
ova
TOD
OS
os
ele
mento
s pa
res
da lis
ta.
2)Im
plem
ente
u
m pr
oce
dim
en
to qu
e, util
iza
ndo
os
TAD
s Li
sta e Pi
lha,
reto
rne o
s ele
mento
s da
Li
sta em
ord
em
in
verti
da (em
u
ma o
utra
lis
ta)
3)Im
plem
ente
a
s ope
raco
es
Empi
lha e D
ese
mpi
lha, usa
ndo
du
as
Fila
s
4)Um
pr
obl
em
a qu
e po
de su
rgr
na m
anip
ula
cao de
lis
tas
line
are
s si
mpl
es
e
o de
vo
ltar
atra
s na lis
ta, o
u se
ja, pe
rcorr
e-la
no se
ntid
o in
vers
o a
o do
s apo
nta
dore
s. A
solu
cao ge
ralm
ente
ado
tada
e a in
corp
ora
cao a ce
lula
de
um
a
ponta
dor
para
o se
u a
nte
cess
or.
Li
sta
s de
ste tip
o sa
o ch
am
ada
s de
dupl
amen
te e
nca
dead
as.
Fa
ca:
a)
Decl
are
os
tipos
nece
ssario
s pa
ra a m
anip
ula
cao da
lis
tab)
Escr
eva
um
pr
oce
dim
ento
pa
ra re
tira
r da
lis
ta a ce
lula
a
ponta
da po
r p.
Na
o de
ixe de
co
nsi
dera
r eve
ntu
ais
ca
sos
esp
eci
ais
5)Es
ten
da o TA
D lis
ta (po
r a
ponta
dore
s) co
m um
pr
oce
dim
ento
pa
ra tro
car
de po
sica
o do
is ele
mento
s. Es
te pr
oce
dim
ento
de
ve re
cebe
r co
mo
para
metro
, ale
m da
lis
ta, os
apo
nta
dore
s p
e q.
El
e de
ve tra
tar
os
caso
s esp
eci
ais
(ap
onta
dore
s pa
ra N
ULL,
etc
).