Exercícios sobre listas, filas, pilhas e dequesprofessor.unisinos.br/mraeder/exercicios.pdf ·...

4
Exercícios sobre listas, filas, pilhas e deques 1. No método main de uma classe qualquer crie um objeto SequentialList representando uma lista lista seqüencial geral de números inteiros. Faça também as seguintes operações: a) inserir os números 10, 20, 30, 40, 50 b) imprimir todos os números da lista; c) inserir o número 14 no fim da lista; d) ler um número e inseri-lo no início da lista. e) ler um número e procurá-lo na lista, imprimindo a posição de sua primeira ocorrência a partir do início; se não estiver na lista, imprimir uma mensagem adequada. f) o que mudaria na implementação da classe SequentialList anterior se a lista estivesse em ordem alfabética? 2. Modifique o método void insert (int o) da classe SequentialList para não adicionar elementos iguais a algum elemento já existente na lista. 3. Uma lista linear seqüencial qualquer tem seus elementos dispostos em ordem crescente. Ler um valor X e inseri-lo na lista na posição correta. Para isso implemente uma classe ListaOrdenada que seja filha da classe SequentialList e faça a sobreposição do método insert(int o) para ele inserir o número na posição adequada da lista. 4. Como representaria uma lista de alunos cujo nó tem os seguintes campos? Crie uma classe em Java, chamada Aluno, que represente esse nó, onde matrícula é a chave. 5. No método main(...) de uma classe chamada TestaLista, crie uma lista de 40 alunos, onde os nós são do tipo Aluno (definido no exercício 4). Ler matrícula, nome e idade dos alunos e, para cada um, verificar se o aluno já está na lista: se estiver, retirá-lo da lista e imprimir seus dados; se não estiver, inseri-lo. Não há dois alunos com a mesma matrícula. 6. Na classe TestaLista, crie um método static que recebe uma lista de alunos (do exercício 4) e um valor inteiro N, e retira todos os alunos da lista que possuem idade menor que N. 7. Na classe SequentialList, adicione o método “public void concat (SequentialLIst l)”. Esse método recebe uma lista como parâmetro e a concatena com a lista (objeto) corrente. 8. Seja a classe SequentialList, crie um novo método chamado tranferirMaior() que transfere o nó de maior valor para o início da lista, mantendo os demais na mesma ordem original. Se não for possível fazer a movimentação, imprimir mensagem com o motivo específico, ou seja: Lista vazia, Lista com um só nó,/ Maior valor já está no início da lista.

Transcript of Exercícios sobre listas, filas, pilhas e dequesprofessor.unisinos.br/mraeder/exercicios.pdf ·...

Page 1: Exercícios sobre listas, filas, pilhas e dequesprofessor.unisinos.br/mraeder/exercicios.pdf · lista de forma que, após cada inserção, a lista continue ordenada. Para tanto, você

Exercícios sobre listas, filas, pilhas e deques

1. No método main de uma classe qualquer crie um objeto SequentialList representando uma lista lista seqüencial geral de números inteiros. Faça também as seguintes operações:

a) inserir os números 10, 20, 30, 40, 50

b) imprimir todos os números da lista;

c) inserir o número 14 no fim da lista;

d) ler um número e inseri-lo no início da lista.

e) ler um número e procurá-lo na lista, imprimindo a posição de sua primeira ocorrência a partir do início; se não estiver na lista, imprimir uma mensagem adequada.

f) o que mudaria na implementação da classe SequentialList anterior se a lista estivesse em ordem alfabética?

2. Modifique o método void insert (int o) da classe SequentialList para não adicionar elementos iguais a algum elemento já existente na lista.

3. Uma lista linear seqüencial qualquer tem seus elementos dispostos em ordem crescente. Ler um valor X e inseri-lo na lista na posição correta. Para isso implemente uma classe ListaOrdenada que seja filha da classe SequentialList e faça a sobreposição do método insert(int o) para ele inserir o número na posição adequada da lista.

4. Como representaria uma lista de alunos cujo nó tem os seguintes campos?

Crie uma classe em Java, chamada Aluno, que represente esse nó, onde matrícula é a chave.

5. No método main(...) de uma classe chamada TestaLista, crie uma lista de 40 alunos, onde os nós são do tipo Aluno (definido no exercício 4). Ler matrícula, nome e idade dos alunos e, para cada um, verificar se o aluno já está na lista: se estiver, retirá-lo da lista e imprimir seus dados; se não estiver, inseri-lo. Não há dois alunos com a mesma matrícula.

6. Na classe TestaLista, crie um método static que recebe uma lista de alunos (do exercício 4) e um valor inteiro N, e retira todos os alunos da lista que possuem idade menor que N.

7. Na classe SequentialList, adicione o método “public void concat (SequentialLIst l)”. Esse método recebe uma lista como parâmetro e a concatena com a lista (objeto) corrente.

8. Seja a classe SequentialList, crie um novo método chamado tranferirMaior() que transfere o nó de maior valor para o início da lista, mantendo os demais na mesma ordem original. Se não for possível fazer a movimentação, imprimir mensagem com o motivo específico, ou seja: Lista vazia, Lista com um só nó,/ Maior valor já está no início da lista.

Page 2: Exercícios sobre listas, filas, pilhas e dequesprofessor.unisinos.br/mraeder/exercicios.pdf · lista de forma que, após cada inserção, a lista continue ordenada. Para tanto, você

9. No método main de uma classe qualquer, crie uma lista (objeto do tipo SequentialList: lista com alocação sequencial) e insira os valores inteiros 5, 8, 20, e 30. Além disso, leia 5 valores fornecidos pelo usuário e os insira na lista de forma que, após cada inserção, a lista continue ordenada. Para tanto, você pode usar o método “insert (int o, int pos)” dado em aula, que insere o número o na posição pos da lista.

10. Qual a diferença entre as listas seqüenciais gerais e as listas seqüenciais especiais?

11. Qual a diferença entre Pilhas, Filas e Deques em relação à inserção e remoção de elementos?

12. Uma pilha implementa o mecanismo de inserção/remoção:

a) FIFO b) FIFA c) LIFO d) FFLL e) N.D.A.

13. Uma fila implementa o mecanismo de inserção/remoção:

a) FIFO b) FIFA c) LIFO d) FFLL e) N.D.A.

14. Implemente no método main(...) de uma classe chamada TestaPilha, um programa que leia 15 números e proceda, para cada um deles, como segue:

− se o número for par, insira-o na pilha; − se o número lido for ímpar, retire um número da pilha; − Ao final, esvazie a pilha imprimindo os elementos.

15. No método main(...) de uma classe chamada TestaPilha2, dadas duas pilhas (objetos N e P) respectivamente, ler diversos números e, para cada um:

− se positivo, inserir na pilha P; − se negativo, inserir na pilha N; − se zero, retirar um elemento de cada pilha.

16. Duas pilhas seqüenciais numéricas estão ordenadas crescentemente a partir do topo. Transferir os elementos dessas pilhas para uma terceira pilha, inicialmente vazia, de modo que ela fique ordenada decrescentemente com o maior valor no topo.

17. Dada uma fila seqüencial apontada por First e Last, inicialmente vazia, desenhe a fila após as seguintes operações de inserção e retirada: I3 (insere 3), I8, R (remove), I3, R.

18. Prossiga o exercício anterior com as seguintes operações: I7, R, I6, I5.

19. Observe o código abaixo e responda as questões que o seguem, sabendo que a classe Queue do código é a classe dada em aula de Fila com alocação

Estática:

20. Acontece overflow e/ou underflow? Em que linhas? E por quê?

Page 3: Exercícios sobre listas, filas, pilhas e dequesprofessor.unisinos.br/mraeder/exercicios.pdf · lista de forma que, após cada inserção, a lista continue ordenada. Para tanto, você

21. Desenhe o array q interno da classe Queue após as operações do código abaixo. Não se esqueça de representar o (1) tamanho da array, (2) os seus elementos e as (3) posições em que se encontram estes elementos. Caso não seja possível realizar alguma operação, ignore-a.

public static void main(String args[]) {

Queue q = new Queue(8); System.out.println(q.dequeue()); q.enqueue(1); q.enqueue(2); q.enqueue(3); q.enqueue(4); q.enqueue(5); System.out.println(q.dequeue()); System.out.println(q.dequeue()); System.out.println(q.dequeue()); System.out.println(q.dequeue()); q.enqueue(6); q.enqueue(7); q.enqueue(8); q.enqueue(9); q.print(); }

22. Dado o estado inicial das pilhas p1, p2 e p3 na figura abaixo, mostre (desenhe as pilhas) o estado final dessas mesmas pilhas após as operações descritas no código abaixo. Considere que p1, p2 e p3 sejam instâncias da classe Stack (pilha com alocação seqüencial) Caso não seja possível realizar alguma operação, escreva que não foi possível e ignore-a:

int temp = p1.pop(); p2.push(temp); p3.push(p1.pop()); p2.push(p1.pop()); temp = p1.pop(); p3.push(temp); p1.push(p2.pop()); p3.push(p2.pop()); p3.push(p1.pop());

Page 4: Exercícios sobre listas, filas, pilhas e dequesprofessor.unisinos.br/mraeder/exercicios.pdf · lista de forma que, após cada inserção, a lista continue ordenada. Para tanto, você

23. No método main de uma classe qualquer, usando a classe Stack fornecida em aula (alocação estática), transfira os elementos da pilha s1 para a pilha s2 de modo que os elementos de s2 estejam na mesma ordem que em s1. Use uma pilha adicional.

24. Suponha a existência de uma pilha de inteiros s e uma fila de inteiros q. Desenhe a ilustração de s e q depois das seguintes operações:

Stack s = new Stack (6); Queue q = new Queue (5); s.push (3); s.push(12); q.enqueue (5); q.enqueue (8); int x = s.pop(); s.push(2); q.enqueue (x); s.push(x);

25. Escreva um método para inverter a ordem dos elementos de uma fila, usando uma pilha como estrutura auxiliar.

26. Desenhe o resultado do que é pedido, de acordo com o estado inicial das estruturas definidas no código abaixo:

a) s.push(q.dequeue());

b) s.push(q.getFirst());

c) q.enqueue(q.dequeue());

d) s.push(s.pop());

e) q.enqueue(s.pop());

Stack s = new Stack (7); Queue q = new Queue (7); s.push(2); s.push(3); q.enqueue(1); q.enqueue(2); q.enqueue(4);

27. Como é implementado o deque?

a) Um deque “extends” FilaCircular b) Um deque “extends” Fila c) Um deque “extends” Pilha d) Um deque “extends” ListaSequencial e) N.D.A.

28. O que diferencia um deque das estruturas Pilha e Fila? E o que o diferencia de uma Lista geral?