Você está na página 1de 3

Centro de Cincias Exatas Departamento de Computao Curso: Bacharelado em Cincia da Computao Disciplina: 3COP069 - Estrutura de Dados A Professor: Roberto

Vedoato

Lista de Exerccios 01 TDA e Pilhas Instrues Os exerccios devem ser resolvidos individualmente ou em dupla; Documente e idente o cdigo; Compacte todos arquivos (projeto, fontes e cabealhos, exceto o executvel), num arquivo denominado com nome da dupla (ex: Joao_Maria.rar) e o envie por e-mail com o assunto: UEL - EDA - Lista 01 para roberto.vedoato@gmail.com; Ao enviar o e-mail certifique-se de ativar a confirmao de recebimento e o registro de itens enviados; Prazo de entrega: 07/04/2008; No sero aceitos exerccios entregues fora destas especificaes. Exerccios Sabe-se que um Tipo Abstrato de Dado (TDA) um modo de definir um novo tipo de dado juntamente com as operaes que o manipulam. Este novo tipo de dado dito abstrato, pois sua funcionalidade independe de sua implementao. No necessrio conhecer ou depender da implementao de um TDA para utiliz-lo, mas, apenas, sua interface (conjunto de operaes vlidas). Por exemplo, a implementao de uma pilha pode ser alterada ou substituda sem afetar a aplicao que a utiliza, desde que a interface pblica da pilha no mude. Em C++ pode-se definir novos TDAs atravs de classes. Sabe-se tambm, que uma pilha pode ser operada sofrer inseres, remoes, ou buscas apenas pelo seu topo. uma estrutura extremamente til, especialmente quando uma determinada seqncia de eventos deve ser tratada na ordem inversa das suas ocorrncias. As pilhas so conhecidas como estruturas LIFO - Last In First Out, ou seja, o ltimo item que entra o primeiro que sai. Considerando-se as observaes acima resolva os exerccios a seguir. 1. Implemente o TDA pilha atravs de alocao esttica, dinmica de encadeamento simples e dinmica de encadeamento duplo e uma aplicao cuja funo testar todas as operaes dos TDAs. Lembre-se que suas pilhas devem funcionar para qualquer tipo de informao (inteiro, double, char, aluno, livro, etc.) bastando para tal, apenas alterar a classe TipoInfo dada em sala de aula. Considere que o descritor de uma pilha esttica tem como atributos, uma referncia ao topo da pilha e um arranjo (pool) de N elementos do tipo de informao e que o descritor de uma pilha dinmica tem o topo como seu nico atributo. Considere tambm que o TDA deve prover as seguintes operaes vlidas: Pilha(); ou Pilha(int tamanho=10); criar uma pilha vazia (no caso de alocao esttica deve ser informado o tamanho da pilha, caso no informado, o padro 10 elmentos do tipo de informao) ~Pilha(); destruir a pilha void reinicia(); reiniciar a pliha void empilha(const TipoInfo &elemento); inserir um n no topo da pilha bool desempilha(TipoInfo &valor); excluir o n do topo de pilha bool buscaTopo(TipoInfo &valor); consultar n do topo da pilha bool alteraTopo(const TipoInfo &valor); alterar n do topo da pilha bool testaVazia(); testar se a pilha est vazia bool testaCheia(); testar se a pilha est cheia (apenas para alocao esttica)

Centro de Cincias Exatas Departamento de Computao Curso: Bacharelado em Cincia da Computao Disciplina: 3COP069 - Estrutura de Dados A Professor: Roberto Vedoato

Resolva os prximos exerccios utilizando um ou mais de seus TDAs de pilha. 2. Implemente uma operao do TDA que retorne o nmero de elementos empilhados. Implemente uma APLICAO que faa o mesmo. Lembre-se que a APLICAO tem acesso s operaes da interface do TDA e no s estruturas internas privativas. 3. Escreve um programa que utilizando uma pilha determina se uma string um palndromo ou no, isto , se pode ser lida da mesma maneira para frente ou para trs. Em cada ponto, voc s poder ler o prximo caractere da string. 4. Implemente uma APLICAO que utilize uma pilha para ordenao de elementos do tipo inteiro. 5. Torres de Hani um quebra-cabea muito antigo e conhecido. Ele constitudo de um conjunto de N discos de tamanhos diferentes e trs pinos verticais, nos quais os discos podem ser encaixados.

Cada pino pode conter uma pilha com qualquer nmero de discos, desde que cada disco no seja colocado acima de outro disco de menor tamanho. A configurao inicial consiste de todos os discos no pino 1. O objetivo mover todos os discos para um dos outros pinos, sempre obedecendo restrio de no colocar um disco sobre outro menor. Escreva uma aplicao que implemente este jogo utilizando pilhas. Esta aplicao deve: a) Inicializar os pinos (o primeiro deve conter 3 discos, os demais ficam vazios); b) Fornecer o mtodo void realizeJogada(pPilha pOrig, pPilha pDest) que faz o movimento de um disco de uma pilha para outra, caso a jogada seja legal. Se a jogada for ilegal, o movimento no realizado, e impressa a mensagem Jogada ilegal na tela; 6. Implemente uma APLICAO que utilize uma pilha para avaliar o aninhamento de expresses delimitadas por { }, ( ) e [ ] est correto. Exemplos: a = b + (c d ) * (e f); s = t[5] + u / (v * (w + y)); Eis o algoritmo para tal: l o caracter ch da expresso exp; enquanto no o fim da expresso se ch '(', '[', ou '{' empilha(ch); seno se ch ')', ']', ou '}' desempilha(); se ch e o caractere extrado no se casam falha; seno ignore os outros caracteres; l o prximo caractere ch a partir de exp; se a pilha est vazia sucesso; seno fracasso; 7. Implemente uma APLICAO que utilize uma pilha para converso de expresses da notao tradicional (infixa), completamente parentizadas, para a e notao polonesa reversa (ps-fixada).

Centro de Cincias Exatas Departamento de Computao Curso: Bacharelado em Cincia da Computao Disciplina: 3COP069 - Estrutura de Dados A Professor: Roberto Vedoato

Notao tradicional parentizada A+B A +B - C ( A + B) * (C D)

Notao polonesa (pr-fixada) + AB - + ABC * + AB - CD

Notao polonesa reversa (ps-fixada) AB + AB + C AB + CD - *

8. Implemente uma APLICAO que utilize uma pilha para calcular expresses ps-fixadas.