Você está na página 1de 3

Algoritmos e Estruturas de Dados I 5955026

Departamento de Computação e Matemática 1º Semestre/2019


Prof. Dr. José Augusto Baranauskas 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=(a1,a2, ...,an) uma lista linear representada em um vetor V[1:n] usando o mapeamento: o i-ésimo
elemento de A, ou seja ai, é armazenado em V[i]. Escreva um método para inverter a ordem dos

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=(a1,a2, ...,an) uma lista linear representada em um vetor V[0:n-1] usando o mapeamento: o i-
ésimo elemento de A, ou seja ai, é 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. Sejam as listas A=(al, ..., an) e B=(bl, ..., bm) representadas de forma encadeada. Elabore um algoritmo
para intercalar A e B, ou seja, formar a lista C=(a1, b1, a2, b2, ...). As listas A e B devem permanecer
inalteradas. Trate os casos em que n=m, n>m e n<m.

13. Sejam X={x1, x2, …, xn} e Y={y1, y2, …, ym} 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. Se A=(al, ..., an) e B=(bl, ..., bm) são listas ordenadas então A < B se ai = bi para 1 ≤ i < j e aj < bj ou ai=bi
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 ai e bj.
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

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.
head tail

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) = 3x14 + 2x8 +1 seria representado
como:

3 14 2 8 1 0
head

enquanto o polinômio Q(x) = 8x14 – 3x10 + 10x6 apareceria como:

8 14 -3 10 10 6
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(nm2) ou
O(mn2). Se A e B forem densos, demonstre que a multiplicação toma O(nm).

Você também pode gostar