72
Listas Lineares Livro “Projeto de Algoritmos” – Nívio Ziviani Capítulo 3 – Seção 3.1 http://www2.dcc.ufmg.br/livros/algoritmos/

cap3

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

    ).