Você está na página 1de 11

EstruturasdeDadosDinmicasParte1 Objetivo: Apresentarasestruturasdedadosfreqentementeutilizadasnaprogramao,pormeiodediagramase exemplossimples,parafacilitaroentendimentoesuaimplementao. Introduo: Quandousamosvetoresoumatrizes,ocontedodoselementosarmazenadoemumespaodememria comtamanhoparaNelementosqueserodispostosemposiescontnuas,isso,umseguidodooutro.Mas, apesardeseremmaisfceisdecompreendercomomanipularseusdados,osvetoresematrizespossuem limitaoquantoquantidadedeelementosqueoconjuntoirsuportar,isto,existeumtamanhopr determinado,quepodeounosertotalmenteocupado,almdepoderhavernecessidadedemaisespaodo queaquelequefoiinicialmentereservado. Jquandofalamosemalocaodinmica,utilizamosposiesdescontinuadasdamemriaRAM.Isso possvel,poiscadaumdoselementosdalistadevepossuirumarefernciaparaoselementosseguintee anterior.Essarefernciaoendereodaposiodememriaemqueseencontratalelemento.

o.Asestruturas dedadosdinmicasqueabordaremosso: Listas; Filas; Pilhas; Listas Umalistaumacoleodeelementosdomesmotipodispostoslinearmentequepodemounoseguiruma determinadaorganizao. Porexemplo:[E1,E2,E3,E4,E5,...,En],ondendeveser>=0.Ouseja,umasequnciadezerooumais itensnaqualEideumdeterminadotipoenrepresentaotamanhodalista. Listassoestruturasflexveisqueadmitemasoperaesdeinsero,remooerecuperaodeitens. Suaprincipalpropriedadeestruturaldizrespeitoasposiesrelativasdositens: Sen>=1,x1oprimeiroitemexnoltimo Emgeral,xiprecedexi+1parai=1;2;...;n1exisucedexi1parai=2;3;...n;

Comoexemplosdelistaspodemsercitados:listasdechamadadealunos,listadecomprasde supermercado,listatelefnica,dentreoutros. Masoutrosdiversostiposdeaplicaocomputacionaisrequeremumalista:gernciadememria,simulao ecompiladores,dentreoutros. ListadePagamentos: Prestaodocarro; Cartodecrdito;

Contadeluz; Condomnio; TVacabo; Prestaodocredirio. BasicamenteexistemduasformasdeimplementaroTADListas: Esttica(utilizandovetores) Dinmica(utilizandolistasligadas) Esttica(utilizandovetores) EstruturadeDadosdotipoLista

UmaEstruturadeDadosdotipoListaumconjuntodedadosdispostose/ouacessveis emumaseqnciadeterminada,epodemestaremordemouno.
Observaes:
o o o Necessitamosdeumvetorparaarmazenarasinformaes. Necessitamosdeumindicadordaposioatualdoultimoelementodalista. Necessitamosdeumaconstantequenosdigaquandoalistaestcheiaeduasoutrasparacodificarerros.

Pseudocdigo:

Constantes Maxlista = 100; Tipo Lista { dados[Maxlista]: inteiro ultimo: inteiro }; Var Alista : lista

AspectosFuncionais:

1. Colocareretirardadosdalista. 2. Testarsealistaestvaziaoucheiaeoutrostestes. 3. Inicializalaegarantiraordemdoselementos.

Operaes:Colocareretirardadosdalista:

Adiciona(dado) AdicionaNoIncio(dado) AdicionaNaPosio(dado,posio) AdicionaEmOrdem(dado) Retira() RetiraDoIncio() RetiraDaPosio(posio) RetiraEspecfico(dado)


Operaes:Testaralistaeoutrostestes:

ListaCheia ListaVazia Posicao(dado) Contem(dado) Igual(dado1,dado2) Maior(dado1,dado2) Menor(dado1,dado2)


Operaes:Inicializaroulimpar:

InicializaLista DestroiLista
AlgoritmoInicializaLista

FUNO inicializaLista() inicio aLista.ultimo <- -1; fim;


AlgoritmoDestroiLista

FUNO destroiLista() inicio aLista.ultimo <- -1; fim;

AlgoritmoListaCheia

Booleano FUNO listaCheia() inicio SE (aLista.ultimo = Maxlista - 1) ENTO RETORNE(Verdade) SENO RETORNE(Falso); FIM SE fim;
AlgoritmoListaVazia

BooleanoFUNOlistaVazia() incio SE(aLista.ultimo=1)ENTO RETORNE(Verdade); SENO RETORNE(Falso); FIMSE fim;


AlgoritmoAdiciona

Procedimento: o Testamossehespao. o Incrementamosoltimo. Adicionamosonovodado.

Parmetros: o Odadoaserinserido. o Lista(global).

Constantes ErroListaCheia=1; ErroListaVazia=2; ErroPosio=3; InteiroFUNOadiciona(inteirodado) incio SE(listaCheia)ENTO RETORNE(ErroListaCheia); SENO aLista.ultimo<aLista.ultimo+1. aLista.dados[aLista.ultimo]<dado; RETORNE(aLista.ultimo); FIMSE fim;
AlgoritmoRetira

Procedimento: o Testamossehelementos. o Decrementamosoltimo. o Devolvemosoltimoelemento. Parmetros: o Lista(global).

InteiroFUNOretira() incio SE(listaVazia)ENTO RETORNE(ErroListaVazia); SENO aLista.ultimo<aLista.ultimo1. RETORNE(aLista.dados[aLista.ultimo+1]); FIMSE fim;

AlgoritmoAdicionaNoIncio AlgoritmoadicionaNoInicio Procedimento:


o o o o

Testamossehespao. Incrementamosoltimo. Empuramostudoparatrs. Adicionamosonovodadonaprimeiraposio.

Parmetros: o Odadoaserinserido. o Lista(global).

InteiroFUNOadicionaNoIncio(inteirodado) variveis inteiroposio;"Varivelauxiliarparacaminhar" incio SE(listaCheia)ENTO RETORNE(ErroListaCheia); SENO aLista.ultimo<aLista.ultimo+1; posio<aLista.ultimo; ENQUANTO(posio>0)FAA "Empurrartudoparatras" aLista.dados[posicao]<aLista.dados[posicao1]; posio<posio1; FIMENQUANTO aLista.dados[0]<dado; RETORNE(0); FIMSE fim;

AlgoritmoRetiraDoIncio

Procedimento: o Testamossehelementos. o Decrementamosoltimo. o Salvamoseprimeiroelemento. o Empuramostudoparaafrente. Parmetros: o Lista(global). Inteiro FUNO retiraDoIncio() variveis inteiro posio, valor; incio SE (listaVazia) ENTO RETORNE(ErroListaVazia); SENO aLista.ultimo <- aLista.ultimo - 1; valor <- aLista.dados[0]; posio <- 0; ENQUANTO (posio <= aLista.ultimo) FAA "Empurrar tudo para frente" aLista.dados[posicao]<- aLista.dados[posicao + 1]; posio <- posio + 1; FIM ENQUANTO RETORNE(valor); FIM SE fim;

AlgoritmoAdicionaNaPosio

Procedimento: o Testamossehespaoeseaposioexiste. o Incrementamosoltimo. o Empuramostudoparatrsapartirdaposio. o Adicionamosonovodadonaposiodada. Parmetros: o Odadoaserinserido. o Aposioondeinserir. o Lista(global).

Inteiro FUNO adicionaNaPosio(inteiro dado, destino) variveis inteiro posio; incio SE (listaCheia) ENTO RETORNE(ErroListaCheia); SENO SE (destino > aLista.ultimo + 1) ENTO RETORNE(ErroPosio); FIM SE aLista.ultimo <- aLista.ultimo + 1; posio <- aLista.ultimo; ENQUANTO (posio > destino) FAA "Empurrar tudo para tras" aLista.dados[posicao] <- aLista.dados[posicao - 1]; posio <- posio - 1; FIM ENQUANTO aLista.dados[destino] <- dado; RETORNE(destino); FIM SE fim;

AlgoritmoRetiraDaPosio

Procedimento: o Testamossehelementoseseaposioexiste. o Decrementamosoltimo. o Salvamoselementonaposio. o Empuramostudoparafrenteatposio. Parmetros: o Odadoaserinserido. o Aposioondeinserir. o Lista(global).

InteiroFUNOretiraDaPosio(inteirofonte) variveis inteiroposio; inteirovalor; incio SE(fonte>aLista.ultimo)ENTO RETORNE(ErroPosio); SENO SE(listaVazia)ENTO RETORNE(ErroListaVazia); SENO aLista.ultimo<aLista.ultimo1; valor<aLista.dados[fonte]; posio<fonte; ENQUANTO(posio<=aLista.ultimo)FAA "Empurrartudoparafrente" aLista.dados[posicao]<aLista.dados[posicao+1]; posio<posio+1; FIMENQUANTO RETORNE(valor); FIMSE FIMSE fim;

AlgoritmoAdicionaEmOrdem

Procedimento: o Necessitamosdeumafunoparacompararosdados(maior) o Testamossehespao. o Procuramospelaposioondeinserircomparandodados. o ChamamosadicionaNaPosio. Parmetros: o Odadoaserinserido. o Lista(global). AlgoritmoMaior BooleanoFUNOmaior(inteirodado1,dado2) incio SE(dado1>dado2)ENTO RETORNE(Verdade) SENO RETORNE(Falso); FIMSE fim; AlgoritmoAdicionaEmOrdem InteiroFUNOadicionaEmOrdem(inteirodado) variveis inteiroposio;"Varivelauxiliarparacaminhar" incio SE(listaCheia)ENTO RETORNE(ErroListaCheia); SENO posio<0; ENQUANTO(posio<=aLista.ultimoEmaior(dado,aLista.dados[posio]))FAA "Encontrarposioparainserir" posio<posio+1; FIMENQUANTO RETORNE(adicionaNaPosio(dado,posio)); FIMSE fim;

AlgoritmoRetiraEspecfico

Retiraumdadoespecficodalista. Procedimento: o Testamossehelementos. o Testamosseodadoexisteequalsuaposio. o NecessitamosdeumafunoPosio(dado) o ChamamosRetiraDaPosio. Parmetros: o Odadoaserretirado. o Lista(global). Prembulo:AlgoritmoPosio InteiroFUNOposio(inteirodado) variveis inteiroposio; incio posio<0; ENQUANTO(posio<=aLista.ultimoE NO(IGUAL(dado,aLista.dados[posio])))FAA posio<posio+1; FIMENQUANTO SE(posio>aLista.ultimo)ENTO RETORNE(ErroPosio); SENO RETORNE(posio); FIMSE fim;

AlgoritmoRetiraEspecfico
InteiroFUNOretiraEspecfico(inteirodado) variveis inteiroposio; incio SE(listaVazia)ENTO RETORNE(ErroListaVazia); SENO posio<posio(dado); SE(posio<0)ENTO RETORNE(ErroPosio); SENO RETORNE(retiraDaPosio(posio)); FIMSE FIMSE fim;

Você também pode gostar