27
17 Capítulo 2 Pilhas com Alocação Sequencial e Estática Seus objetivos neste capítulo Entender o que é e para que serve uma estrutura do tipo Pilha. Entender o significado de Alocação Sequencial e Alocação Estática de Memória, no contexto do armazenamento temporário de conjuntos de elementos. Desenvolver habilidade para implementar uma estrutura do tipo Pilha, como um Tipo Abstrato de Dados (TAD), com Alocação Sequencial e Estática de Memória. Desenvolver habilidade para manipular Pilhas através dos Operadores definidos para o TAD Pilha. Iniciar o desenvolvimento do seu primeiro jogo. 2.1 O que é uma Pilha? No contexto deste livro, o termo Pilha diz respeito a uma pilha de pratos, pilha de livros ou pilha de cartas. Ou seja, o sentido é de empilhar uma coisa sobre a outra.

Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Embed Size (px)

Citation preview

Page 1: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

17

Capítulo 2Pilhas com Alocação

Sequencial e Estática

Seus objetivos neste capítulo• EntenderoqueéeparaqueserveumaestruturadotipoPilha.

• EntenderosignificadodeAlocaçãoSequencialeAlocaçãoEstáticadeMemória,

nocontextodoarmazenamentotemporáriodeconjuntosdeelementos.

• DesenvolverhabilidadeparaimplementarumaestruturadotipoPilha,comoumTipo

AbstratodeDados(TAD),comAlocaçãoSequencialeEstáticadeMemória.

• DesenvolverhabilidadeparamanipularPilhasatravésdosOperadoresdefinidos

paraoTADPilha.

• Iniciarodesenvolvimentodoseuprimeirojogo.

2.1 O que é uma Pilha?Nocontextodestelivro,otermoPilhadizrespeitoaumapilhadepratos,pilhadelivrosoupilhadecartas.Ouseja,osentidoédeempilharumacoisasobreaoutra.

Page 2: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

18

Capítulo 2 Pilhas com Alocação Sequencial e Estática

Emumapilhadepratos,sevocêtentartirarumpratodomeiodapilha,apilhapoderádesmoronar.Tambémserábemcomplicadovocêinserirumpratonomeiodapilha.Omaisnaturaléretirarpratosdotopodapilhaeinserirpratossemprenotopodapilha.

Emessência,éassimquefuncionaumaPilha:novoselementosentramsemprenotopo;sequisermosretirarumelemento,retiramossempreoelementodotopo.

UmaPilhaéumconjuntoordenadodeelementos.Aordemdeentradadeterminaaposiçãodoselementosnoconjunto.SetemostrêselementosemumaPilha(A,BeC)eseelesentraramnaPilhanasequênciaA,depoisBeentãoC,sabemosqueoelementoCestaránotopodaPilha(Figura2.3a).

NasituaçãodaFigura2.3a,oúnicoelementoquepodemosretiraréexatamenteoelementoqueestánotopodaPilha.Ouseja,oelementoC.RetirandooelementoC,asituaçãodaPilhaficasendoadaFigura2.3b.Se,emseguida,quisermosinseriroelementoD,esseelementoDpassaráaserotopodaPilha—Figura2.3c.E,finalmente,sequisermosinseriroelementoE,essenovoelementopassaráaseroelementodotopo—Figura2.3d.SeaordemdeinserçãodoselementosnaPilhativessesidooutra,aPilharesultantetambémseriaoutra.

OmesmoraciocíniovaleparaumaPilhadeCartas,porexemplo.ConsiderecomosituaçãoinicialumaPilhacomtrêscartas:8decopas,Jdepause,notopodaPilha,Adeespadas,comomostraaFigura2.4a.AocontráriodoquefizemosnapilhadecubosdaFigura2.3,agoraotopoestárepresentadonapartedebaixodaPilhadeCartas.Essa

Figura 2.1 Ilustração do conceito de Pilha — sentido de empilhar.

Figura 2.2 Definição de Pilha.

Page 3: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

19

representaçãomostraovaloreonaipedetodasascartasdaPilha,comoseestivéssemosempilhandoumacartasobreaoutracomumbaralhodepapel.ÉarepresentaçãousualdasPilhasdeCartasemjogosdotipoFreeCell.

SequisermosinserirnoconjuntoacartaQdecopas,essanovacartaprecisaráserinseridanotopodaPilha,resultandonasituaçãodaFigura2.4b.Se,emseguida,quisermosretirarumacartadaPilha,aúnicacartaquepodemosretiraréacartadotopodaPilha—opróprioQdecopas,queacaboudeserinserido.APilhaentãovoltaráàsituaçãodaFigura2.4a,tendoapenastrêselementos,comoAdeespadasnovamentenotopo.

Figura 2.4 Inserindo e retirando cartas em uma Pilha.

Figura 2.3 Retirando e inserindo elementos em uma Pilha.

Page 4: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

20

Capítulo 2 Pilhas com Alocação Sequencial e Estática

2.2 Operações de uma PilhaVamoschamaraoperaçãoqueinsereelementosemumaPilhadeEmpilha,eaoperaçãoqueretiraelementosdeumaPilha,deDesempilha.AessasduasOperações,vamosacres-centaroutrastrês:operaçãoparacriarumaPilha,operaçãoparatestarseaPilhaestávaziaeoperaçãoparatestarseaPilhaestácheia.NaFigura2.5temosaespecificaçãodasoperaçõesEmpilha,Desempilha,Cria,VaziaeCheia,bemcomoumadescriçãodeseusparâmetrosefuncionamento.

Exercício 2.1 Transfere elementos de uma Pilha para outraDesenvolvaumalgoritmoparatransferirtodososelementosdeumaPilhaP1paraumaPilhaP2.ConsiderequeasPilhasP1eP2jáexistem,ouseja,nãoprecisamsercriadas.Paraelaboraressealgoritmo,useosoperadoresdefinidosnaFigura2.5.ConsiderequeasPilhasP1eP2possuemelementosdotipointeiro.VocêteráqueelaboraressealgoritmosemsabercomooTipoAbstratodeDadosPilhaéefetivamenteimplementado.Vocêencontraráumasoluçãoparaesteexercícionasequênciadotexto.Mas,antesdeprosseguiraleitura,tenteproporumasolução.ÉassimquedesenvolvemoshabilidadeparamanipularPilhas(eoutrasestruturas)pelosseusOperadores.

AlógicadasoluçãodoExercício2.1éaseguinte:enquantoaPilhaP1nãoestivervazia,retiramoselementosdeP1atravésdaoperaçãoDesempilha.Cadavalordesempi-lhadodeP1deveserempilhadonaPilhaP2atravésdaoperaçãoEmpilha.RepetimosessasequênciadecomandosatéqueaPilhaP1setornevazia.VejaoalgoritmodaFigura2.6.

Figura 2.5 Operações de uma Pilha.

Page 5: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

21

NotequeaindanãotemosamenorideiadecomoessasoperaçõesdoTADPilha(Empilha,Desempilha,Vazia,Cheia,Cria)sãoefetivamenteimplementadas.ConsideramosasPilhascomocaixas-pretasemanipulamososvaloresarmazenadosapenasatravésdosOperado-res(ou“botõesdatelevisão”).Éassimquemanipulamosestruturasdearmazenamento,comoPilhas,demodoabstrato.ÉassimqueutilizamososTiposAbstratosdeDados.

ProponhaumasoluçãoparaosExercícios2.2,2.3e2.4semprecomamesmaestratégia:manipulandoosvaloresarmazenadosexclusivamenteatravésdosOperadoresdoTADPilhadescritosnaFigura2.5.

Exercício 2.2 Mais elementos?DesenvolvaumalgoritmoparatestarseumaPilhaP1temmaiselementosdoqueumaPilhaP2.ConsiderequeasPilhasP1eP2jáexistemesãopassadascomoparâmetro.ConsideretambémqueasPilhasP1eP2possuemelementosdotipoInteiro.VocêpodecriarPilhasauxiliares,senecessário.VocêdevepreservarosdadosdeP1eP2.Ouseja,aofinaldaexecuçãodessaoperação,P1eP2precisamconterexatamenteosmesmoselementosquecontinhamnoiníciodaoperação,enamesmasequência.Paraproporasolução,utilizeosOperadoresdaFigura2.5.

Exercício 2.3 Algum elemento igual a X?DesenvolvaumalgoritmoparaverificarseumaPilhaPpossuialgumelementoigualaumvalorX.PeXsãopassadoscomoparâmetros.ConsiderequeaPilhaPpossuielementosdotipoInteiro.Paraproporasolução,utilizeosOperadoresdaFigura2.5.VocêpodecriarPilhasauxiliares,senecessário.

Exercício 2.4 As Pilhas são iguais?DesenvolvaumalgoritmoparatestarseduasPilhasP1eP2sãoiguais.DuasPilhassãoiguaissepossuemosmesmoselementos,exatamentenamesmaordem.Paraproporsuasolução,vocêpodeutilizarPilhasauxiliares,senecessário.ConsiderequeasPilhasP1eP2jáexistemesãopassadascomoparâmetro.Considerequeas

Figura 2.6 Algoritmo para transferir elementos de uma Pilha para outra.

Page 6: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

22

Capítulo 2 Pilhas com Alocação Sequencial e Estática

PilhasP1eP2possuemelementosdotipoInteiro.Paraproporasolução,utilizeosOperadoresdaFigura2.5.

Nofinaldestecapítulovocêencontrarárespostasousugestõesparaalgunsdosexercícios.Mas,paradesenvolverashabilidadespretendidas,proponhasuasprópriassoluçõesantesdeconsultarasrespostassugeridas.

2.3 Alocação de memória para conjuntos de elementosAlocarmemória,emessência,significareservarumaporçãodamemóriadocomputadorparaumusoespecífico.Alocarmemóriaparaumconjuntodeelementos,comoumaPilha,envolvereservarespaçodememóriaparaarmazenarcadaumdoselementosdoconjunto.

Alocação SequencialNaAlocaçãoSequencialdeMemóriaparaumconjuntodeelementos(Knuth,1972,p.240;Pereira,1996,p.12),todososelementosdoconjuntoserãoarmazenadosjuntos,emposiçõesadjacentesdememória.Ouseja,oselementosficam“emsequência”,umaoladodooutronamemóriadocomputador.

AFigura2.8mostraumaPilhacomquatroelementos:oelementoAnotopodaPilhae,emseguida,oselementosD,CeB.NaAlocaçãoSequencialdeMemória,aordemdessesquatroelementosérefletidanasposiçõesdememóriaemqueoselementossãoarmazenados.

Alocação EstáticaNaAlocaçãoEstáticadeMemóriaparaumconjuntodeelementos,estabelecemosotamanhomáximodoconjuntopreviamente,aoelaboraroprograma,ereservamosmemóriaparatodososseuselementos.Esseespaçodememóriapermaneceráreser-vadodurantetodaaexecuçãodoprograma,mesmoquenãoestejasendototalmenteutilizado,istoé,mesmoqueemdeterminadomomentoaquantidadedeelementosnoconjuntosejamenorqueoqueseutamanhomáximo.Comootamanhodoespaçodememóriaédefinidopreviamente,elenãopoderácresceroudiminuiraolongodaexecuçãodoprograma.

Figura 2.7 Definição de Alocação Sequencial de Memória para um conjunto de elementos.

Page 7: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

23

2.5 Implementando uma Pilha com Alocação Sequencial e EstáticaParaimplementarumaPilhacombinandoosconceitosdeAlocaçãoSequencialeAlocaçãoEstáticadeMemória,aoelaboraroprogramaprecisamosdefinirotamanhodoespaçodememóriaaserreservadoepossibilitarqueoselementosdaPilhapossamserarmazenadosemposiçõesadjacentesdememória.Podemosfazerissoatravésdeumaestruturadotipovetor.

NaFigura2.10temosoesquemadeumaPilhaimplementadaatravésdeumvetordeno-minadoElementos,quearmazenaoselementosdaPilha,edeumavariáveldenominadaTopo,queindicaotopodaPilha.

PodemosdefinirotipoPilhacomoumRegistro(umaStructnalinguagemC)contendodoiscampos:ElementoseTopo.TopodotipoInteiroeElementosdotipovetorde1atéTamanho(constantequeindicaotamanhodaPilha)ou,ainda,dezeroatéTamanho−1,conformeopadrãodalinguagemC.OselementosdaPilhapodemserdotipoChar,dotipoInteiro,dotipoCarta-do-Baralhooudeoutrotipoqualquer,conformenecessário.

ParaimplementarumTipoAbstratodeDados(TAD)precisamosdeumaestruturadearmazenamentoedeOperadoresquepossamseraplicadossobreosDadosarmazenados.VamosimplementaroTADPilhacomaestruturadearmazenamentodefinidanaFigura2.10ecomosOperadoresdefinidosnaFigura2.5:Empilha,Desempilha,Cria,VaziaeCheia.

Figura 2.9 Definição de Alocação Estática de Memória para um conjunto de elementos.

Figura 2.8 Alocação Sequencial — armazenamento em posições de memória adjacentes.

Page 8: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

24

Capítulo 2 Pilhas com Alocação Sequencial e Estática

Exercício 2.5 Operação EmpilhaConformeespecificadonaFigura2.5,aoperaçãoEmpilharecebecomoparâmetrosaPilhaeovalordoelementoquequeremosempilhar.OelementosónãoseráinseridoseaPilhajáestivercheia.Vocêencontraráumapossívelsoluçãoparaesteexercícionasequênciadotexto.Mastenteproporumasoluçãoantesdeprosseguiraleitura.

AFigura2.11ilustraofuncionamentodaoperaçãoEmpilha.ApartirdasituaçãodaFigu-ra2.11a,umelementodevalor’E’éinserido,resultandonasituaçãodaFigura2.11b.

Figura 2.10 Esquema da implementação de uma Pilha com Alocação Sequencial e Estática de Memória.

Figura 2.11 Operação Empilha.

Page 9: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

25

NotequeovalordavariávelTopofoiincrementado,eoelemento’E’foiinseridonovetorElementosnaposiçãoindicadapelovaloratualizadodavariávelTopo.

AFigura2.12apresentaumalgoritmoconceitualparaaOperaçãoEmpilha.SeaPilhaPestivercheia,sinalizamosatravésdoparâmetroDeuCertoqueoelementoXnãofoiinserido.Mas,seaPilhaPnãoestivercheia,Xseráinseridodaseguinteforma:incremen-tamosoTopodaPilhaP(P.Topo=P.Topo+1)earmazenamosXnovetorElementos,naposiçãoindicadapeloTopodaPilha(P.Elementos[P.Topo]=X).OelementoXpassaráaseroelementodoTopodaPilha.

Exercício 2.6 Operação DesempilhaConformeespecificadonaFigura2.5,aoperaçãoDesempilharecebecomoparâmetroaPilhadaqualqueremosretirarumelemento.CasoaPilhanãoestivervazia,aoperaçãoretornaovalordoelementoretirado.AaçãodaoperaçãoDesempilha,nasituaçãodaFigura2.13a,resultarianasituaçãodaFigura2.13b.

Figura 2.12 Algoritmo conceitual — Empilha.

Figura 2.13 Operação Desempilha.

Page 10: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

26

Capítulo 2 Pilhas com Alocação Sequencial e Estática

Exercício 2.7 Operação CriaConformeespecificadonaFigura2.5,aoperaçãoCriarecebecomoparâmetroaPilhaquedeverásercriada.CriaraPilhasignificainicializarosvaloresdemodoaindicarqueaPilhaestávazia,ouseja,semnenhumelemento.

Exercício 2.8 Operação VaziaConformeespecificadonaFigura2.5,aoperaçãoVaziatestaseaPilhapassadacomoparâmetroestávazia(semelementos),retornandoovalorVerdadeiro(Pilhavazia)ouFalso(Pilhanãovazia).

Exercício 2.9 Operação CheiaConformeespecificadonaFigura2.5,aoperaçãoCheiatestaseaPilhapassadacomoparâmetroestácheia.APilhaestarácheiasenaestruturadearmazenamentonãocoubermaisnenhumelemento.

ConformemostraaFigura2.14,naoperaçãoCriainicializamosoTopodaPilhacomovalorzero,poisoselementoscomeçamaserarmazenadosnovetorElementosapartirdaposição1.Assim,comovalordeToposendozero,indicamosqueaPilhaestávazia.

Figura 2.14 Pilha Vazia e Pilha Cheia.

Page 11: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

27

Noteque,emvezdecomeçarem1,seovetorcomeçaremzero(esseéopadrãonalinguagemC)asituaçãodePilhavaziaserácaracterizadaquandoovalordoTopofor−1.

AoperaçãoVaziasimplesmentetestaráseoTopodaPilhaestáapontandoparaovalorzero.SeovalordoTopoforzero,aPilhaestarávazia.SeovalordoToponãoestiveremzero,aPilhanãoestarávazia.Se,emvezdecomeçarem1,ovetorcomeçaremzero(padrãonalinguagemC)aPilhaestarávaziaquandoovalordoTopofor−1.

Analogamente,naoperaçãoCheiaverificamosseovalordoTopoéigualàconstanteTamanho,queindicaoTamanhodaPilha.Se,emvezdecomeçarem1,ovetorcomeçaremzero(padrãonalinguagemC)asituaçãodePilhacheiaserácaracterizadaquandoovalordoTopoforigualaTamanho−1.

Nofinaldestecapítulosãoapresentadassoluçõesousugestõesparaalgunsdosexercícios.Mas,paradesenvolverashabilidadespretendidas,proponhasuasprópriassoluçõesantesdeconsultarasrespostasesugestões.

2.6 Abrir ou não a televisão?SuponhaquequeiramosdesenvolverumaoperaçãoparaconsultarovalordoelementodotopodeumaPilha.Nãoqueremosretiraroelementodotopo;queremosapenasconsultaroseuvalor,semretirá-lodaPilha.Penseemduasestratégiasdiferentesparaimplementaressaoperação.

Exercício 2.10 Duas estratégias para elemento do topoDesenvolvaumaoperaçãoqueretorneovalordoelementodotopodeumaPilhasemretiraroelementodaPilha.Proponhaduassoluçõesdiferentesparaessaoperaçãoecompareassoluções,apontandosuasvantagensedesvantagens.Proponhaecompareassoluçõesantesdeprosseguiraleitura.

PodemosimplementaraoperaçãoElementodoTopobasicamentededuasmaneiras.Aprimeiramaneiraédependentedaestruturadearmazenamento,easegundamaneiraéindependentedaestruturadearmazenamento.NaFigura2.15apresentamosduassoluçõesparaaoperaçãoElementodoTopo.Adiferençaentreassoluçõesestádestacadaemnegrito.OquemudaéomododepegarainformaçãodoTopodaPilha.

Naprimeirasolução,pegamosovalordoelementodoToposimplesmenteatribuindoaXovalordeP.Elementos[P.Topo].Nessaprimeirasolução,ficaevidentequeaestruturadearmazenamentoutilizadaéumvetor.Ouseja,éumasoluçãodependentedaestruturadearmazenamento;sófuncionaránaestruturadearmazenamentoemquestão—umvetor.Nasegundaimplementação,pegamosovalordoelementodoTopoatravésdaoperaçãoDesempilha.AoperaçãoDesempilharetornaovalordoelementodoToponavariávelX,masretiraoelementodaPilha.Porisso,temosquerecolocaroelementonaPilhaatravésdaoperaçãoEmpilha.Nessasegundasolução,nãoficaevidenteaestruturadearmazenamentoutilizada.É,portanto,umasoluçãoindependentedaestruturadearmazenamento.

Page 12: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

28

Capítulo 2 Pilhas com Alocação Sequencial e Estática

Quaisasvantagensdeumasoluçãoedeoutra?Aprimeirasoluçãofuncionaráexclusiva-mentenessaimplementaçãoquefizemosdaPilha,comAlocaçãoSequencialeEstáticadeMemória.NoscapítulosaseguirimplementaremosumaPilhacomoutrastécnicas,eessaprimeirasoluçãonãocontinuaráfuncionando;teráqueserreescrita.AsegundasoluçãoparaaoperaçãoElementodoTopoéindependentedaestruturadearmazenamento,poismanipulaaPilhaexclusivamenteatravésdosoperadoresVazia,EmpilhaeDesempilha.Assim,essasegundaimplementaçãocontinuaráfuncionandomesmoseadotarmosumanovaestruturadearmazenamentoparaaPilha,comofaremosnospróximoscapítulos.Porserindependentedaestruturadearmazenamento,asegundasoluçãoproporcionamaiorportabilidadedecódigo,conceitoqueestudamosnoCapítulo1.

Vocêpodeestarpensando:“Paraquecomplicar,sepodemossimplesmenteconsultarovalordoelementodoTopocomumcomandoX=P.Elementos[P.Topo]”?Sim,éumasoluçãoeficiente.Masédependentedaimplementaçãoenãoproporcionaportabilidadedecódigo.

PensetambémnassoluçõesdosExercícios2.1a2.4.OExercício2.2,porexemplo,verificaseumaPilhaP1possuimaiselementosdoqueumaPilhaP2.PodemosterumasoluçãoquesimplesmentecomparaosvaloresdoTopodasPilhasP1eP2,ouseja,seP1.TopoformaiordoqueP2.Topo,aPilhaP1temmaiselementosdoqueaPilhaP2.Essaseriaumasoluçãodependentedaestruturadearmazenamento;dependentedaim-plementação.Ocódigodessasoluçãonãoseriaportável.Seriacomoabrirumatelevisãocomumachavedefendaparaaumentarovolume.

UmasegundasoluçãopoderiadesempilhartodososelementosdeP1edeP2,colocandooselementosemPilhasauxiliaresecontandooselementosdecadaPilha.DepoisoselementospoderiamserdevolvidosàsPilhasoriginais.Essasegundasoluçãoseriain-dependentedaestruturadearmazenamento;independentedaimplementação.Umasoluçãoportável.ConformeestudamosnoCapítulo1,portabilidadeereusabilidade

Figura 2.15 Soluções para a operação Elemento do Topo.

Page 13: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

29

decódigosãocaracterísticasextremamentedesejáveise,nolongoprazo,tornamassoluçõesmaisbaratas.

Chavedefendaoubotãodatelevisão?Qualdessassoluçõesvocêconsideramaisin-teressante?

Operações Primitivas e Não PrimitivasPodemosdizerque,emumaPilha,asoperaçõesEmpilha,Desempilha,Cria,VaziaeCheiasãoOperações Primitivas,poissópodemserimplementadasatravésdeumasoluçãodependentedaestruturadearmazenamento.JáasoperaçõesquedesenvolvemosnosExercícios2.1a2.4e2.10(transferirelementosdeumaPilhaaoutra,verificarseumaPilhatemmaiselementosqueoutra,verificarseumaPilhapossuiumelementocomvalorX,verificarseduasPilhassãoiguaisepegarovalordoElementodoTopodeumaPilha)sãoOperações Não Primitivas,poispodemserimplementadasapartirdechamadasaOperaçõesPrimitivasdoTADPilha,resultandoemumaimplementaçãoindependentedaestruturadearmazenamento.

Visandoproporcionarportabilidadeereusabilidadedecódigo,menorcustodedesenvol-vimentoemanutenção,amelhorformadeimplementarumaOperaçãoNãoPrimitivaédemodoabstrato,manipulandooTADemquestãoexclusivamentepelasOperaçõesPrimitivasou,ainda,pelos“botõesdatelevisão”.

2.7 Projeto FreeCell: Pilha Burra ou Pilha Inteligente?NoFreeCelltemosoitoPilhasIntermediáriasquepossuemalgumasrestriçõescomrelaçãoaovalordoselementosqueserãoempilhados.NessasPilhasIntermediáriassóépossívelempilharcartasemordemdecrescenteeemcoresalternadas—pretassobrevermelhasevermelhassobrepretas.

TemostambémnoFreeCellumsegundotipodePilha,asPilhasDefinitivas,quetambémpossuemsuasregrascomrelaçãoaovalordoselementosqueserãoempilhados.NessasquatroPilhasDefinitivassóépossívelempilharcartasdeummesmonaipeeemordemcrescente.

AcaracterísticabásicadeinserirelementossemprenoTopoéválidatantoparaasPilhasIntermediáriasquantoparaasPilhasDefinitivas.MasasregrascomrelaçãoaovalordoselementosqueserãoempilhadossãodiferentesparaPilhasIntermediáriasePilhasDefinitivas.

Figura 2.16 Definição de Operações Primitivas e Não Primitivas.

Page 14: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

30

Capítulo 2 Pilhas com Alocação Sequencial e Estática

APilhaquedefinimoseimplementamosnasseçõesanterioreséuma“pilhaburra”,poiselanãofazqualquerverificaçãoquantoaovalordoelementoqueestásendoempilhado.Comovocêachaquepodemosimplementara”inteligência“dasPilhasIntermediáriasedasPilhasDefinitivas?Por”inteligência“queremosdizeraverificaçãodosvaloresqueestãosendoempilhados,parasabersepodemserinseridosemumaPilhaIntermediáriaouemumaPilhaDefinitiva,deacordocomasregrasdefuncionamentodoFreeCell.

AFigura2.18mostratrêsalternativasparaimplementara”inteligência“dasPilhas.Umaprimeiraalternativa(soluçãoA)seriautilizarumaPilhaBurraerealizartodasasverificaçõesnaaplicação.Ouseja,”fora“doTADPilhaéqueiríamosverificarseumacartapodeounãoserempilhada.NessasoluçãoA,tantoasPilhasIntermediáriasquantoasPilhasDefinitivaspoderiamserimplementadasatravésdomesmoTADPilhaBurra.

Umasegundaalternativa(soluçãoB)seriadesenvolverdoisTADsdiferentes,PilhaInterme-diáriaePilhaDefinitiva,cadaqualincorporandosuaprópriainteligência.Nessasolução,aaplicaçãoemsinãofariaqualquerverificaçãodevalores.Todaaverificaçãoseriafeita”dentro“dasPilhas.Se,pelasregrasdoFreeCell,umacartanãopuderserempilhada,a

Figura 2.17 Pilha Intermediária: ordem decrescente e em cores alternadas. Pilha Definitiva: ordem crescente e cartas do mesmo naipe.

Page 15: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

31

própriaPilhavaiidentificarissoecomunicaràaplicação.Noteque,nasoluçãoB,temosduasimplementaçõesdistintasdePilha:aPilhaIntermediáriaeaPilhaDefinitiva.

AsoluçãoCéumavariaçãodasoluçãoB.AdiferençaéquenasoluçãoCaPilhaIn-termediáriaeaPilhaDefinitivasãoimplementadascombaseemumaPilhaBurra.Emumalinguagemorientadaaobjeto,comoC++,asPilhasIntermediáriaseasPilhasDefinitivaspodem”herdar“característicasdaPilhaBurraeagregarsuascaracterísticasprópriasediferenciadas—a”inteligência“.Mesmosemutilizaroconceitodeherançadaorientaçãoaobjetos,asoperaçõesdasPilhasIntermediáriaeDefinitivapodemserimplementadasatravésdechamadasàsoperaçõesdaPilhaBurra.

Astrêssoluçõesincluemummóduloqueimplementaainterfacedosistemacomousuário.Incluirummóduloindependenteparaainterfaceaumentaaportabilidadedasoluçãoefacilitaajustesoumesmoumatrocaradicaldeinterfaceoudeplataforma,semgrandesmudançasnosdemaismódulos.

Qualdessastrêssoluções—A,BouC—vocêconsideramaisadequadaaoseuprojeto?

Exercício 2.11 Avançar o Projeto FreeCell — propor uma arquitetura de softwarePilhaBurra?PilhaInteligente?ProponhaumaarquiteturadesoftwareparaoseuProjetoFreeCellidentificandoosprincipaismódulosdosistemaeorelacionamentoentreeles.TomecomopontodepartidaassoluçõesalternativaspropostasnaFigura2.18.Escolhaaalternativaqueformaisadequadaaoseuprojetoouadapteumadasalternativas,conformenecessário.Sugestãoparausoacadêmico:desenvolvaoProjetoFreeCellemgrupo.Promovaumadiscussão,definaaarquiteturadosoftwareedividaotrabalhoentreoscomponentesdogrupo.

Figura 2.18 Projeto FreeCell — soluções alternativas quanto à arquitetura do software.

Page 16: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

32

Capítulo 2 Pilhas com Alocação Sequencial e Estática

SejaqualforaarquiteturadesoftwarequeadotarparaoseuProjetoFreeCell,visandoagregarportabilidadeereusabilidade,observeasseguintesrecomendaçõesnaim-plementação:

● ParamanipularasPilhasdeCartas,projeteeutilizeumTADPilha(sejaumaPilhaBurra,sejaumaPilhaInteligente).

● AaplicaçãoemsieoTADPilhadevemestaremunidadesdesoftwareindependenteseemarquivosseparados;utilizeumarquivoexclusivamenteparaaimplementaçãodoTADPilha.

●• Aaplicação(eoutrosmódulos)devemanipularoTADPilhaexclusivamenteatravésdosseusOperadoresPrimitivos:Empilha,Desempilha,Vazia,CriaeCheia.Aumenteovolumedatelevisãoapenaspelobotãodevolume.

● IncluanocódigodoTADPilhaexclusivamenteaçõespertinentesaoarmazena-mentoerecuperaçãodasinformaçõessobreasPilhasdeCartas.FaçaopossívelparanãoincluirnoTADPilhaaçõesrelativasàinterfaceouaqualqueroutroaspectoquenãosejaoarmazenamentoearecuperaçãodeinformaçõessobreasPilhasdeCartas.

Exercício 2.12 Implementar uma Pilha BurraImplementeumTADPilhaBurra(Pilhasemqualquerrestriçãoaosvaloresqueestãosendoempilhados)emumalinguagemdeprogramaçãocomoCouC++,semutilizarrecursosdaorientaçãoaobjetos.DefinaumtipoestruturadoeosOperadores.OselementosdaPilhadevemserdotipoInteiro.ImplementeaPilhacomoumaunidadeindependente.Emumarquivoseparado,façaoprogramaprincipalbemsimples,paratestarofuncionamentodaPilha.

Exercício 2.13 Implementar uma Pilha Burra como uma classeImplementeumTADPilhaBurra(Pilhasemqualquerrestriçãoaosvaloresqueestãosendoempilhados)emumalinguagemdeprogramaçãoorientadaaobjetos,comoC++.ImplementeaPilhacomoumaclasse.OselementosdaPilhadevemserdotipoInteiro.ImplementeaPilhacomoumaunidadeindependente.Emumarquivoseparado,façaoprogramaprincipalbemsimples,paratestarofuncionamentodaPilha.

Exercício 2.14 Avançar o Projeto FreeCell — defina e implemente a Carta do BaralhoDefinaeimplementeaCartadoBaralho,comoumaclasseoucomoumtipoes-truturado.Nãosepreocupe,nestemomento,comaspectosdainterface.Preocupe-seemdefinirumacartacomnaipe(ouro,paus,copasouespadas)evalor(A,2,3,4,5,6,7,8,9,10,J,Q,K).

Exercício 2.15 Avançar o Projeto FreeCell — implemente uma Pilha Intermediária InteligenteDefinaeimplementeumaPilhaIntermediária”Inteligente“,ouseja,comrestriçõesquantoàscartasqueserãoempilhadas,conformeasregrasdoFreeCellconvencionalouconformeasregrasdoseuProjetoFreeCell.OselementosdaPilhadevemserdotipoCarta,conformedefinidonoExercício2.14.ParaimplementaraPilhaIntermediáriaInteligente,utilizedealgummodoaPilhaBurraimplementadanoExercício2.12ouno

Page 17: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

33

Exercício2.13.FaçaumprogramaparatestarofuncionamentodaPilhaIntermediáriaInteligentesemsepreocuparcomaqualidadedainterface.

Exercício 2.16 Avançar o Projeto FreeCell — implemente uma Pilha Definitiva InteligenteDefinaeimplementeumaPilhaDefinitiva”Inteligente“,ouseja,comrestriçõesquantoàscartasqueserãoempilhadas,conformeasregrasdoFreeCellconvencional.OselementosdaPilhadevemserdotipoCarta,conformedefinidonoExercício2.14.ParaimplementaraPilhaDefinitivaInteligente,utilizedealgummodoaPilhaBurraimplementadanoExercício2.12ounoExercício2.13.FaçaumprogramaparatestarofuncionamentodaPilhaDefinitivaInteligentesemsepreocuparcomaqualidadedainterface.

Exercício 2.17 Avançar o Projeto FreeCell — defina as regras, escolha um nome e inicie o desenvolvimento do seu FreeCellDefinaasregrasdoseuFreeCellalterandoasregrasdoFreeCellconvencionalemalgumaspecto.DêpersonalidadeprópriaaoseuFreeCelleescolhaparaoseujogoumnomequereflitasuascaracterísticasmaismarcantes.EscrevaasregrasdoseuFreeCellecoloqueemumarquivo-texto,paraquepossaserutilizadonadocumentaçãodojogoouemumaopçãodojogoqueensinecomojogar.Definaaarquiteturadosoftware(Exercício2.11),adapteasPilhasdesenvolvidas(Exercícios2.12a2.16)einicieodesenvolvimentodoseujogo.Sugestãoparausoacadêmico:desenvolvaoProjetoFreeCellemgrupo.Tomeasprincipaisdecisõesemconjuntoedividaotrabalhoentreoscomponentesdogrupo,cadaqualficandoresponsávelporpartedasatividades.

Exercício 2.18 Avançar o Projeto FreeCell — inicie o projeto da interface EmparaleloaodesenvolvimentodalógicadoFreeCell,escolhaeestudeumabibliotecagráficaparaajudaraconstruirumainterfacevisualeintuitivaparaoseujogo.VocêpodecomeçarestudandooTutorial de Programação GráficadisponívelnosMateriaisComplementaresdeEstruturas de dados com jogos,masfiquelivreparaes-tudaroutrosmateriaisouadotaroutrasferramentasgráficasnoseuFreeCell.Projeteainterfacedomodomaisindependentepossíveldosdemaismódulos.Seestivertrabalhandoemgrupo,umdosmembrosdogrupopodesededicaraestudarmaisintensamenteosaspectosreferentesàinterfaceedepoisajudarosdemaiscompo-nentesnoaprendizado.Vocêpodeoptartambémporimplementarprimeiramenteumainterfacebemsimples,textual,paratestarbemosdemaiscomponentesdojogoedepoissubstituirporumainterfacegráfica.Emalgummomento,vocêprecisarámesmoganharexperiêncianodesenvolvimentodesoftwareutilizandobibliotecasgráficas.Porquenãoagora?

Comece a desenvolver o seu FreeCell agora!

Façaumjogolegal!Façaumjogoquetenhaasuacara!Façaseujogoficaratrativo,distribuaparaosamigos,disponibilizepublicamente,façaseujogobombar!Aprenderaprogramarpodeserdivertido!

Page 18: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

34

Capítulo 2 Pilhas com Alocação Sequencial e Estática

http://www.elsevier.com.br/edcomjogos

Consulte no Banco de Jogos AdaptaçõesdoFreeCellwww.elsevier.com.br/edcomjogos

Consulte nos Materiais Complementares TutorialdeProgramaçãoGráfica

Exercícios de fixaçãoExercício 2.19OqueéumaPilha?

Exercício 2.20ParaqueserveumaPilha?EmquetipodesituaçõesumaPilhapodeserutilizada?

Exercício 2.21OquesignificaAlocaçãoSequencialdeMemóriaparaumconjuntodeelementos?

Exercício 2.22OquesignificaAlocaçãoEstáticadeMemóriaparaumconjuntodeelementos?

Exercício 2.23FaçaoesquemadaimplementaçãodeumaPilhacomAlocaçãoSequen-cialeEstáticadeMemória,edescrevaoseufuncionamento.

Exercício 2.24 Desafio das Torres de Hanoi.ODesafiodasTorresdeHanoiéumjogoclássico,inspiradoemumaantigalenda.Ojogocontacomtrêshastesverticais.Umadashastescontémtrêsdiscos:embaixo,umprimeirodiscodediâmetromaior;emcimadesseprimeirodisco,háumsegundodiscodediâmetroumpoucomenor;eemcimadessesegundodisco,háumterceirodiscodediâmetroaindamenor,comoilustraaFigura2.19.Odesafiodojogoépassartodosostrêsdiscos,nessamesmasequência,paraumadasoutrashastesverticais.Épossívelutilizarastrêshastesparaauxiliaramovimentaçãodosdiscos.Masexistemalgumasrestriçõesnamovimentação:sóépos-sívelmovimentarumdiscodecadavez;sóépossívelretirarodiscodotopodeumapilhadediscos;sóépossívelinserirdiscosnotopodeumapilhadediscos;emnenhummomentovocêpodecolocarumdiscoemcimadeoutrodiscocomdiâmetromenor.SenãoconhecebemoDesafiodasTorresdeHanoi,joguealgumaspartidasemumaversãoon-line(porexemplo,noGamesOnenoUOLJogos—links1e2)ouassistaaalgumvídeo(porexemplo,noslinks3e4)parasefamiliarizarcomojogo.Épossívelaumentaraquantidadedediscosecomissoaumentarograudedificuldade.ComovocêpoderiausarumaoumaisPilhasparaimplementarumjogocomooDesafiodasTorresdeHanoi?

Exercício 2.25 Identificar outras aplicações de Pilhas.IdentifiqueelisteaplicaçõesdePilhas.IdentifiqueeanotealgunsjogosquepodemserimplementadoscomousodeumaPilhaeidentifiquetambémoutrasaplicaçõesdeforadomundodosgames.Suges-tãodeusoacadêmico:façaumadiscussãoemgrupo.Aofinal,cadagrupoapresenta

Page 19: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

35

atodososestudantesasaplicaçõesqueidentificou.Podeserumaboafontedeideiasparanovosjogos.

Figura 2.19 Ilustração do Desafio das Torres de Hanoi.

Page 20: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

36

Capítulo 2 Pilhas com Alocação Sequencial e Estática

Soluções e sugestões para alguns exercíciosExercício 2.2 Mais elementos?

Page 21: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

37

Exercício 2.4 As Pilhas são iguais?

Page 22: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

38

Capítulo 2 Pilhas com Alocação Sequencial e Estática

Exercício 2.12 Implementação de uma ”Pilha Burra“

Page 23: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

39

Page 24: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

40

Capítulo 2 Pilhas com Alocação Sequencial e Estática

Exercício 2.13 Pilha Burra como classe em C + +

Page 25: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

41

Page 26: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

42

Capítulo 2 Pilhas com Alocação Sequencial e Estática

Exercício 2.14 Carta do BaralhoSugestões:

● ACarta-do-Baralhopodeserumtipoestruturadoouumaclasse,comdoiscampos:Naipe(ouros,copas,espadasepaus)eValor(A,2,3,4,5,6,7,8,9,10,J,Q,K).Onaipepodeserdefinidocomoumtipoenumeradooudotipointeiro(nessecaso,estabelecendoumacorrelaçãodotipoouros=1,copas=2,eassimpordiante).Valorpodeserumtipoenumerado,dotipointeirooudotipoChar.

● Tambémépossíveldefiniroperaçõessobrecartas—operaçãopararetornaronaipe,retornarovalor,atualizaronaipe,atualizarovalor,entreoutras.

Exercício 2.15 e 2.16 Pilha Intermediária Inteligente e Pilha Definitiva InteligenteSugestões:

● DefinaumaclassePilhaBurradeelementosdotipoCarta-do-Baralho.EntãodefinaumaclassePilhaIntermediáriaherdandocaracterísticasdaclassePilhaBurra;rees-crevaaoperaçãoEmpilha,sópermitindoempilharcartasnasequênciacorreta;emumaPilhaIntermediáriapodemosempilharqualquercartaseaPilhaestivervaziaouemordemdecrescenteeemcoresalternadas,seaPilhanãoestivervazia.

● FaçaomesmoparaaclassePilhaDefinitiva;emumaPilhaDefinitivapodemosempi-lharsomenteacartadevalorAseaPilhaestivervaziaouemordemcrescenteedomesmonaipe,seaPilhanãoestivervazia.

● NapráticavocêterátrêsoperaçõesEmpilha(PilhaBurra,PilhaDefinitivaePilhaIntermediária).Ocódigodasdemaisoperaçõesserácomum.

Paraexemplificar,seguetrechodeimplementaçãodeumaPilhaInteligentecomelementosdotipointeiro,naqualsóépossívelempilharelementosmaioresdoqueoelementodotopodapilha.

Page 27: Cap-tulo-2-Pilhas-com-Aloca-o-Sequencial-e-Est-tica_2014_Estruturas-de-Dados-Com-Jogos.pdf

Estruturas de Dados com Jogos

43

Links1. GamesOn:TorredeHanoi:http://www.gameson.com.br/Jogos-Online/ClassicoPuzzle/

Torre-de-Hanoi.html(consultaemsetembrode2013).2. UOLJogos:TorredeHanoi:http://jogosonline.uol.com.br/torre-de-hanoi_1877.html

(consultaemsetembrode2013).3. YouTube:TorresdeHanoi:Bezerra:http://www.youtube.com/watch?v=yrNWiFFbcEY

(consultaemsetembrode2013).4. YouTube:TorresdeHanoi:Neves:http://www.youtube.com/watch?v=3qTe_X1yXEs

(consultaemsetembrode2013).

Referências e leitura adicionalKnuthD.The Art of Computer Programming.VolumeI:FundamentalAlgorithms.Reading,MA:Addi-

son-Wesley,1972.LangsamY,AugensteinMJ,TenenbaumAM.Data Structures Using C and C++.2nded.UpperSaddle

River.NewJersey:PrenticeHall,1996.PereiraSL.Estruturasdedadosfundamentais:conceitoseaplicações.SãoPaulo:Érica;1996.