• Nenhum resultado encontrado

lista av2

N/A
N/A
Protected

Academic year: 2021

Share "lista av2"

Copied!
6
0
0

Texto

(1)

UFJF - DCC - Estrutura de Dados e Laborat´orio de Programa¸c˜ao II

Listas Cont´ıguas

1. Considerando o TAD ListaCont que representa uma lista cont´ıgua, fa¸ca uma fun¸c˜ao para trocar de posi¸c˜ao dois elementos na lista. A fun¸c˜ao deve retornar se a opera¸c˜ao foi poss´ıvel ou n˜ao.

b o o l L i s t a C o n t :: t r o c a ( int p o s i c a o 1 , int p o s i c a o 2 ) ;

2. Considerando o TAD ListaCont que representa uma lista cont´ıgua, fa¸ca uma fun¸c˜ao para aumentar a capacidade m´axima (definida por max) do vetor que representa a lista sem que nenhum dado atualmente representado na lista seja perdido. Se a nova capacidade definida pelo parˆametro novoMax for menor que a capacidade atual, a opera¸c˜ao n˜ao deve fazer nada. Ao final retornar se a opera¸c˜ao foi ou n˜ao realizada.

b o o l L i s t a C o n t :: a u m e n t a C a p a c i d a d e ( int n o v o M a x ) ;

Listas Encadeadas

3. Considerando o TAD ListaEncad (lista simplesmente encadeada), implementar uma opera¸c˜ao do TAD que tenha como valor de retorno o comprimento da lista, isto ´e, que calcule o n´umero de n´os de uma lista.

int L i s t a E n c a d :: g e t C o m p r i m e n t o () ;

4. Considerando o TAD ListaEncad que representa uma lista simplesmente encadeada de valores inteiros, implementar uma fun¸c˜ao para retornar o n´umeros de n´os da lista que possuem o campo info maior que o valor inteiro val.

int L i s t a E n c a d :: c o n t a M a i o r e s ( int val ) ;

5. Criar um TAD ListaEncad como sendo uma lista simplesmente encadeada de n´umeros inteiros de forma que todos os n´os da lista estejam em ordem crescente pelo valor do n´o. Basta aproveitar o TAD para lista encadeada estudado em aula e alterar a fun¸c˜ao de inser¸c˜ao de forma que esta sempre percorra os elementos da lista a fim de encontrar a posi¸c˜ao correta do novo n´o.

v o i d L i s t a E n c a d :: i n s e r e O r d e n a d o ( int val ) ;

6. Uma lista circular ´e uma lista cujo ´ultimo elemento tem o primeiro elemento da lista como pr´oximo, formando assim um ciclo. N˜ao existe conceitualmente o primeiro e o ´ultimo n´o. Para percorrer todos os elementos da lista circular, come¸camos de um n´o e visitamos todos os elementos at´e alcan¸car novamente o primeiro elemento. A Figura 1 ilustra uma lista circular. Desenvolver todo o TAD ListaCirc com suas opera¸c˜oes usuais.

7. O TAD para lista simplesmente encadeada possui algumas limita¸c˜oes, como por exemplo, a impossibilidade de percorrer eficientemente os n´os do ´ultimo para o primeiro, assim como a dificuldade de remover um n´o, dado um ponteiro para este, j´a que para isso ´e necess´ario percorrer a lista at´e encontrar o n´o desejado para descobrir o seu anterior a fim de acertar

(2)

Figura 1: Exemplo de lista circular.

o encadeamento na remo¸c˜ao. Outra implementa¸c˜ao de lista ´e aquela na qual o n´o guarda a informa¸c˜ao, um ponteiro para o pr´oximo e um ponteiro para o anterior. Um exemplo pode ser visto na Figura 2. A seguir apresentamos a estrutura que deve ser utilizada e os prot´otipos das

Figura 2: Exemplo de lista duplamente encadeada. opera¸c˜oes a serem implementadas.

c l a s s N o D u p l o { p u b l i c : N o D u p l o () ; ~ N o D u p l o () ; v o i d s e t A n t ( N o D u p l o * p ) ; v o i d s e t P r o x ( N o D u p l o * p ) ; v o i d s e t I n f o ( int val ) ; N o D u p l o * g e t A n t () ; N o D u p l o * g e t P r o x () ; int g e t I n f o () ; p r i v a t e : int i n f o ; // i n f o r m a c a o N o D u p l o * ant ; // p o n t e i r o p a r a a n t e r i o r N o D u p l o * p r o x ; // p o n t e i r o p a r a p r o x i m o }; c l a s s L i s t a D u p l a { p u b l i c : L i s t a D u p l a () ; ~ L i s t a D u p l a () ; b o o l b u s c a ( int val ) ; v o i d i n s e r e I n i c i o ( int val ) ; v o i d r e m o v e I n i c i o () ; v o i d i n s e r e F i n a l ( int val ) ; v o i d r e m o v e F i n a l () ;

(3)

p r i v a t e : int n ;

N o D u p l o * p r i m e i r o ; N o D u p l o * u l t i m o ; };

8. Implemente uma opera¸c˜ao do TAD ListaEncad que verifica se duas listas encadeadas s˜ao iguais e que retorna true, caso sejam, e false, caso contr´ario. Duas listas s˜ao consideradas iguais se tˆem a mesma sequˆencia de elementos.

b o o l L i s t a E n c a d :: i g u a l ( L i s t a E n c a d * l2 ) ;

9. Um pol´ıgono geom´etrico pode ser considerado como uma lista de v´ertices. Para desenhar tal pol´ıgono, basta tra¸car uma reta ligando v´ertices adjacentes. Projete um TAD para armazenar esse pol´ıgono (defina as opera¸c˜oes necess´arias). Considere a necessidade de desenhar o pol´ıgono, eliminar v´ertices e incluir novos v´ertices.

Figura 3: Exemplo de pol´ıgono.

10. Considere o TAD ListaEncad que representa uma lista simplesmente encadeada com elementos repetidos. Implemente uma opera¸c˜ao para eliminar todas as ocorrˆencias do valor val da lista.

v o i d L i s t a E n c a d :: r e m o v e V a l o r ( int val ) ;

11. Implementar uma lista encadeada para manipula¸c˜ao de polinˆomios do tipo: anxn+ an−1xn−1+

... + a1x1 + a0, onde cada elemento i da lista deve armazenar o i-´esimo termo do polinˆomio

(diferente de 0). Cada item da lista deve conter o valor da potˆencia (inteiro) e o coeficiente correspondente (real). c l a s s P o l i n o m i o { p u b l i c : P o l i n o m i o ( int tam ) ; ~ P o l i n o m i o () ; v o i d i n s e r e T e r m o ( f l o a t c , int p ) ; v o i d i m p r i m e () ; v o i d r e m o v e T e r m o ( int i ) ; p r i v a t e : No * p r i m e i r o ; }

(4)

Pilhas e Filas

12. Pilha com Vetor (cont´ıgua). Implementar um TAD Pilha utilizando a representa¸c˜ao vetorial, criando as opera¸c˜oes especificadas nos prot´otipos a seguir:

c l a s s P i l h a C o n t {

p r i v a t e :

int max ; // c a p a c i d a d e m a x i m a .

int t o p o ; // p o s i c a o do t o p o da p i l h a .

int * vet ; // v e t o r que a r m a z e n a os d a d o s da p i l h a .

p u b l i c : P i l h a C o n t ( int tam ) ; ~ P i l h a C o n t () ; v o i d e m p i l h a ( int val ) ; // i n s e r e No no t o p o . int d e s e m p i l h a () ; // r e m o v e No do t o p o . int g e t T o p o () ; // c o n s u l t a o t o p o . b o o l v a z i a () ; };

13. Fila com Vetor (cont´ıgua). Implementar um TAD Fila utilizando a representa¸c˜ao vetorial, criando as opera¸c˜oes especificadas nos prot´otipos a seguir:

c l a s s F i l a C o n t { p r i v a t e : int max ; // q u a n t i d a d e m a x i m a de e l e m e n t o do v e t o r int i n i c i o ; // i n d i c e do No que e s t a no i n c i o int f i n a l ; // i n d i c e do No que e s t a no f i n a l int * vet ; // v e t o r que a r m a z e n a a f i l a

p u b l i c :

F i l a C o n t ( int tam ) ; ~ F i l a C o n t () ;

int g e t I n i c i o () ; // c o n s u l t a No do i n i c i o v o i d e n f i l e i r a ( int val ) ; // i n s e r e No no fim v o i d d e s e n f i l e i r a () ; // r e m o v e No do i n i c i o b o o l v a z i a () ; // v e r i f i c a se e s t a v a z i a };

14. Na representa¸c˜ao de Fila e Pilha cont´ıgua (com vetor) pode acontecer da pilha ou da fila estar cheia no momento de inserir novos valores (n´os). Fazer um procedimento, no bloco private, para realocar o vetor que suporta a pilha ou a fila com o dobro da capacidade que havia anteriormente. Refazer as opera¸c˜oes para levar em conta essa nova capacidade de realocamento. Aten¸c˜ao: ser´a preciso alocar o novo vetor e em seguida copiar todos os dados do antigo vetor para o novo e, somente, ap´os essa c´opia desalocar o antigo.

15. Desenvolva uma fun¸c˜ao para comparar se uma Fila f1 tem mais elementos do que uma fila f2. Deve retornar -1 se f1 < f2, 0 se f1 = f2 e 1 se f1 > f2. Considere que a FilaEncad possui um descritor com a informa¸c˜ao de quantos n´os a fila possui e uma fun¸c˜ao de acesso a esse descritor. Caso n˜ao esteja dispon´ıvel, implemente o descritor e a fun¸c˜ao de acesso.

(5)

c l a s s F i l a E n c a d { p u b l i c : // ... int g e t N u m N o s () ; p r i v a t e : // ... int n u m N o s ; };

Em seguida implemente a fun¸c˜ao:

int c o m p a r a ( F i l a E n c a d * f1 , F i l a E n c a d * f2 ) ;

16. Considere a existˆencia de um TAD PilhaEncad de n´umeros inteiros, cujas opera¸c˜oes s˜ao:

c l a s s P i l h a E n c a d { P i l h a E n c a d () ; ~ P i l h a E n c a d () ; int g e t T o p o () ; v o i d e m p i l h a ( int val ) ; int d e s e m p i l h a () ; b o o l v a z i a () ; }

Sem conhecer a representa¸c˜ao interna desse tipo abstrato:

a) Implemente uma fun¸c˜ao que receba uma pilha como parˆametro e retorne o valor armaze-nado em seu topo, restaurando o conte´udo da pilha.

b) Implemente uma fun¸c˜ao que receba duas pilhas, p1 e p2, e passe todos os elementos da pilha p2 para o topo da pilha p1. A figura abaixo ilustra essa concatena¸c˜ao de pilha.

Figura 4: Concatena¸c˜ao de pilhas.

c) Implemente uma fun¸c˜ao que receba uma pilha p como parˆametro e retorne como resultado uma c´opia dessa pilha. Ao final, a pilha p recebida como parˆametro deve ter seu conte´udo original inalterado.

(6)

17. Escreva opera¸c˜oes do TAD ListaEncad para (i) copiar um vetor com n itens para uma lista encadeada e para (ii) copia a lista encadeada para um vetor.

L i s t a E n c a d * L i s t a E n c a d :: v e t o r 2 L i s t a ( int n , int * vet ) ; int * L i s t a E n c a d :: l i s t a 2 V e t o r ( L i s t a E n c a d * l ) ;

A fun¸c˜ao que cria uma lista a partir de um vetor deve alocar dinamicamente uma lista, preenchˆ e-la com os dados do vetor e retornar o ponteiro para a lista crida. Por outro e-lado, a fun¸c˜ao que cria um vetor a partir de uma lista deve alocar dinamicamente um vetor (com capacidade igual ao n´umero de n´os da lista), copiar a lista para o vetor e retornar o endere¸co deste.

18. Desenvolver uma fun¸c˜ao para ler 300 valores inteiros e montar uma pilha representada por encadeamento, atendendo `as seguintes caracter´ısticas:

• O primeiro valor lido ser´a inclu´ıdo como n´o da pilha;

• A partir do segundo valor lido, ele s´o ser´a inclu´ıdo se for maior do que o n´o que est´a no topo da pilha;

Dica: use o TAD PilhaEncad usado em sala de aula e que est´a dispon´ıvel na p´agina do curso. 19. Dada uma fila cujos valores de seus n´os s˜ao inteiros quaisquer, desenvolver uma fun¸c˜ao para

esvaziar esta fila, gerando uma nova fila que contenha somente os n´os positivos da anterior. 20. Usando obrigatoriamente o TAD PilhaCont, implementar uma fun¸c˜ao para verificar se a pilha

de inteiros passada como parˆametro ´e pal´ındromo, ou seja, ´e a mesma quando lida da esquerda para a direita ou da direita para a esquerda. Caso isso aconte¸ca, retornar true e, caso contr´ario, retornar false. Exemplo: 1,2,3,4,5,4,3,2,1 ´e pal´ındromo, e 1,2,3,6,7,8 n˜ao ´e pal´ındromo.

b o o l e h P a l i n d r o m o ( int n , P i l h a C o n t * p ) ;

21. Escreva um algoritmo, usando uma pilha, que inverte as letras de cada palavra de um texto terminado por “.”, preservando a ordem das palavras. Por exemplo, dado o texto:

ESTE EXERC´ICIO ´E MUITO F´ACIL. A sa´ıda deve ser:

ETSE OIC´ICREXE ´E OTIUM LIC´AF

22. A convers˜ao de n´umeros inteiros, na base 10, para outras bases num´ericas se d´a atrav´es de sucessivas divis˜oes de um n´umero n pelo valor da base para a qual se queira converter. Fa¸ca um programa para obter a convers˜ao num´erica, de acordo com a op¸c˜ao do usu´ario. Utilize uma estrutura de dados do tipo pilha.

(a) Decimal para Bin´ario (base 2); (b) Decimal para Octal (base 8);

Referências

Documentos relacionados

Quanto à atividade de produção legislativa, Rezende (2016) delimita ser exercida pelo que define como elites do poder, por ser exercida predominantemente por homens,

• O Parque das Águas de Caxambu recebeu reforço na segurança oferecida pela Polícia Militar no município, conforme convênio celebrado com a Codemge. • A ação preventiva

A partir do entendimento da importância dos espaços públicos nas cidades como um dos meios para se alcançar qualidade de vida, este artigo propõe uma análise da me- mória

publicação dos resultados 7.2 Os candidatos aprovados que tenham efetivamente concluído o Ensino Médio ou equivalente podem matricular-se, tornando-se nula, de pleno direito, a

Constitui objeto do presente Edital a seleção e contratação de sociedade empresária especializada na execução de serviços de engenharia elétrica, visando a

Para ter um controle sobre o valor da carga que está sendo aplicada no disco, um sistema de contrapeso deve ser implementado na haste para que o peso do conjunto (pino

A precisão e acidez sem fi ltros da “prosa bárbara” de Arantes, assim defi nida pelo próprio, poderá ser apreciada em sua inteireza, para além das torres de marfi m, por

442 da Consolidação das Leis do Trabalho, aprovada pelo Decreto-lei nº 5.452, de 1º de maio de 1943, para dispor sobre a não existência de vínculo