Sunteți pe pagina 1din 3
Algoritmos e Estruturas de Dados I Departamento de Computação e Matemática Prof. Dr. José Augusto

Algoritmos e Estruturas de Dados I Departamento de Computação e Matemática

Prof. Dr. José Augusto Baranauskas

5955026

1º Semestre/2019

4ª Lista de Exercícios

1. Suponha que L é uma lista contendo caracteres x, y e z são variáveis do tipo caractere. Mostre o conteúdo da lista L em cada passo dos seguintes fragmentos de código bem como o valor das variáveis x, y e z:

a)

L.insert(1,´a´);

b)

L.insert(1,´a´);

c)

L.insert(1,´a´);

d)

L.insert(1,´a´);

L.insert(1,´b´);

L.insert(2,´b´);

L.insert(1,´b´);

L.insert(2,´b´);

L.insert(1,´c´);

L.insert(3,´c´);

L.clear();

L.insert(3,´c´);

L.remove(1,x);

L.remove(2,x);

L.insert(2,´c´);

while (! L.empty())

L.remove(1,y);

L.remove(1,y);

L.remove(1,x);

L.remove(1,x);

L.remove(1,z);

L.insert(2,x);

L.insert(2,´a´);

 

L.insert(1,y);

L.remove(1,y);

L.remove(3,z);

L.insert(2,´b´);

 

L.remove(1,z);

2. Reimplemente o ADT Lista considerando o uso de sentinelas, tanto para alocação contígua como dinâmica encadeada.

3. Implemente pilhas e filas fazendo uso exclusivo dos métodos de listas. Comparece a complexidade dessa implementação com aquelas específicas para pilhas e filas vistas em aula.

4. Obtenha uma representação mapeando uma pilha P e uma fila F em um único vetor V[1:n]. Escreva os métodos para inserir e remover elementos destes dois objetos de dados. Qual a complexidade de sua representação, no pior caso?

5. Altere a representação anterior para um vetor V[0:n-1]. Qual a complexidade de sua representação, no pior caso?

6. Uma fila de 2 pontas, conhecida como Deque (Double-Ended Queue), é uma lista linear em que inserções e eliminações podem ser feitas em qualquer extremidade. Obtenha uma representação usando classes em C++ mapeando uma fila de 2 pontas em um vetor. Escreva os métodos construtor, empty, full, clear, front, rear e size que têm a mesma semântica daqueles de mesmo nome para filas convencionais (Queues); também escreva os métodos para inserir (appendAtFront e appendAtRear) e eliminar elementos (serveAtFront e serveAtRear) de qualquer uma das extremidades da fila. Os métodos appendAtRear e serveAtFront de um Deque têm o mesmo comportamento que os métodos append e serve de uma fila (Queue), respectivamente. Assim, o método appendAtRear insere o elemento passado como parâmetro no final do Deque. Por outro lado, o método appendAtFront insere o elemento passado como parâmetro no início do Deque. Analogamente, o método serveAtFront remove o elemento que se encontra no início do Deque, retornando-o no parâmetro fornecido. Já o método serveAtRear remove o elemento que se encontra no final do Deque, retornando-o no parâmetro fornecido.

7. Implemente a classe Deque do enunciado do exercício anterior, trocando a implementação para alocação dinâmica usando encadeamento dos elementos. Não se esqueça de definir o finalizador da classe neste caso.

8. Uma lista linear circular e mantida em um vetor C[0:n-l] com H e T com as mesmas funções de head e tail em filas circulares.

a) Obtenha uma fórmula em termos de H,T e n para o número de elementos na lista;

b) Escreva um algoritmo para eliminar o k-ésimo elemento da lista;

c) Escreva um algoritmo para inserir um elemento Y imediatamente após o k-ésimo elemento.

9. Seja A=(a 1 ,a 2 ,

n ) uma lista linear representada em um vetor V[1:n] usando o mapeamento: o i-ésimo

elemento de A, ou seja a i , é armazenado em V[i]. Escreva um método para inverter a ordem dos

,a

1

elementos em V, isto é, o algoritmo deve transformar V tal que V[i] contenha o elemento n-i+l de A. O único espaço adicional disponível para seu algoritmo é aquele para variáveis simples. A entrada para seu algoritmo é V e n.

10. Seja A=(a 1 ,a 2 ,

n ) uma lista linear representada em um vetor V[0:n-1] usando o mapeamento: o i-

,a

ésimo elemento de A, ou seja a i , é armazenado em V[i-1], escreva os métodos de manipulação de listas.

11. Admitindo que uma lista encadeada possua um campo chave do tipo inteiro, escreva os seguintes métodos usando diretamente ponteiros:

a) sort, para ordenar a lista em ordem crescente dos valores das chaves;

b) reverse, para inverter a lista;

c) minimum, para encontrar o elemento de menor valor da lista;

d) maximum, para encontrar o elemento de maior valor da lista;

e) copy, para copiar todos os elementos da lista em uma outra lista.

12. , para intercalar A e B, ou seja, formar a lista C=(a 1 , b 1 , a 2 , b 2 , inalteradas. Trate os casos em que n=m, n>m e n<m.

,

Sejam as listas A=(a l ,

a n ) e B=(b l ,

b m ) representadas de forma encadeada. Elabore um algoritmo

As listas A e B devem permanecer

).

13. Sejam X={x 1 , x 2 , …, x n } e Y={y 1 , y 2 , …, y m } duas listas encadeadas ordenadas. Defina o método merge que intercala as duas listas ordenadas em uma lista Z final também ordenada. As listas X e Y devem permanecer inalteradas. O método deve fazer uso diretamente de ponteiros e apenas os métodos de status de listas ordenadas podem ser utilizados.

14. , para 1 ≤ i n e n < m. Escreva um método que retorna -1, 0 ou +1 dependendo se A < B, A = B ou A > B, respectivamente. Assuma que e possível comparar átomos a i e b j .

b m ) são listas ordenadas então A < B se a i = b i para 1 ≤ i < j e a j < b j ou a i =b i

Se A=(a l ,

a n ) e B=(b l ,

,

a) Assuma que as listas A e B estão implementadas em um vetor;

b) Assuma que as listas A e B estão implementadas de forma encadeada.

15. Dada uma lista circular encadeada:

head head
head
head

Implemente as operações de manipulação de listas lineares usando a implementação circular encadeada.

16. Uma lista bidirecional ou duplamente encadeada é uma lista cujos elementos são ligados em ambos os lados, conforme a figura seguinte. Defina uma class em C++ para efetuar buscas, inserções e remoções de elementos em listas duplamente encadeadas.

headhead tailtail
headhead
tailtail

17. Escreva um método para concatenar duas listas duplamente encadeadas utilizando diretamente ponteiros.

2

18. Para cada uma das seguintes listas {não ordenada simplesmente encadeada, ordenada simplesmente encadeada, não ordenada duplamente encadeada, ordenada duplamente encadeada}, indique o tempo assintótico no pior caso para cada uma das seguintes operações: insert, remove, search, minimum, maximum.

19. Uma maneira de se representar um conjunto é pela lista de seus elementos. Supondo esta representação, defina os métodos para as operações usuais de conjunto: união, intersecção, diferença e pertinência.

20. Polinômios podem ser representados por meio de listas encadeadas, nas quais cada nó contém o coeficiente e o expoente associado. Por exemplo, o polinômio P(x) = 3x 14 + 2x 8 +1 seria representado como:

3 3 14 14   2 2 8 8   1 1 0 0

3 3

14

14

3 3 14 14   2 2 8 8   1 1 0 0
 

2

2

8 8

3 3 14 14   2 2 8 8   1 1 0 0
 

1 1

0 0

3 3 14 14   2 2 8 8   1 1 0 0

head

head

 

enquanto o polinômio Q(x) = 8x 14 – 3x 10 + 10x 6 apareceria como:

 
8 8 14 14   -3 -3 10 10   10 10 6 6

8 8

14

14

8 8 14 14   -3 -3 10 10   10 10 6 6
 

-3

-3

10

10

8 8 14 14   -3 -3 10 10   10 10 6 6
 

10

10

6 6

8 8 14 14   -3 -3 10 10   10 10 6 6

head

head

 

Note que as listas possuem os nós em ordem decrescente do expoente. Defina um Tipo Abstrato de Dados Polynom com as operações elementares de manipulação de polinômios utilizando listas encadeadas: criação, finalização, número de termos, grau do polinômio, inserção e remoção de termos em um polinômio; dados dois polinômios A e B obter o polinômio soma C=A+B, o polinômio produto C=A*B. Os métodos devem deixar A e B sem alteração e criar C como uma nova lista encadeada. Demonstre que sendo n e m as quantidades de termos de A e B, respectivamente, a multiplicação pode ser efetuada em tempo O(nm 2 ) ou O(mn 2 ). Se A e B forem densos, demonstre que a multiplicação toma O(nm).

3