1 - Giuliano Prado Page

Propaganda
UNIVERSIDADE SALGADO DE OLIVEIRA
CURSO DE ANÁLISE DE SISTEMAS
DISCIPLINA: LINGUAGEM DE PROGRAMAÇÃO II
PROF: GIULIANO PRADO DE MORAIS GIGLIO
Lista de Exercícios
LISTAS ENCADEADAS
(com Pilhas e Filas Encadeadas)
1. Escreva um algoritmo comprimento (L) do tipo função, que retorne um valor inteiro igual ao número de
nós da lista encadeada L.
2. Escreva um algoritmo do tipo função iguais (L1, L2) que retorne um valor lógico: Verdadeiro, se L1 = L2
e Falso, se L1 <> L2. L1 e L2 são listas encadeadas.
3. Escreva um algoritmo copia (L1, L2) para montar uma cópia L2 da lista encadeada L1.
4. Escreva um algoritmo diferença (L, L1, L2) para construir a lista encadeada L igual à diferença L1-L2.
5. Escreva um algoritmo comuns (L1,L2) do tipo função, o qual deve retornar um valor inteiro igual ao
número de valores comuns em duas listas encadeadas ordenadas L1 e L2.
6. Escreva um algoritmo localizaV (L, v, P) para localizar, na lista encadeada L, o endereço do nó que possui
valor v no campo de informação. Este endereço deve ser retornado no parâmetro P.
7. Escreva um algoritmo insereOrd (L,i) para inserir um nó com a informação i na lista encadeada ordenada
L, preservando a ordem crescente dos valores na lista.
8. Escreva um algoritmo removeK (L, k) para remover o k-ésimo nó da lista encadeada L.
9. Escreva um algoritmo destrói (L) para remover todos os nós da lista encadeada L.
10. Construa um procedimento que recebe uma lista encadeada (endereço inicial no apontador lista) e monta
uma nova lista a partir dos dados desta, com os elementos em ordem inversa. Somente a lista final deve estar
alocada ao final da execução do procedimento. Ex:
11. Escreva um procedimento que recebe duas filas, que contém valores numéricos ordenados. O
procedimento deverá formar uma terceira fila, também ordenada, na qual estarão os valores armazenados nas
filas originais.
12. Os dados relativos a um grupo de atletas foram organizados em uma lista linear encadeada. O campo de
informação de cada nodo desta lista apresenta o nome e a altura de um atleta. O endereço do primeiro nodo
está no descritor atletas.
Escreva algoritmos para:
a) fornecer o número total de atletas desta lista;
b) imprimir o nome de todos os atletas que apresentam altura superior a 1,90m;
c) dividir esta lista em duas outras, uma com os dados dos atletas com altura inferior a 1,70m, e a outra
com os atletas com altura igual ou superior a este valor. Nesta operação não deverão ser alocadas
novas áreas de memória - deverão ser utilizadas as mesmas da lista original.
13. Os dados relativos aos resultados de uma votação foram organizados em uma lista linear. Inicialmente
estes dados foram organizados na ordem alfabética dos nomes dos candidatos. Escreva algoritmos para, a
partir desta lista inicial, ordenar a lista a partir do campo que indica o número de votos recebido pelo
candidato. Considere:
a) a lista implementada sobre um arranjo;
b) a lista implementada sob forma de uma lista encadeada;
c) a lista implementada sob forma de uma lista duplamente encadeada (nos dois sentidos).
14. Escreva uma função que converta um vetor de caracteres (char) numa lista encadeada cujos elementos
contém os caracteres do vetor antes referido. A função deve ter como argumento de entrada o ponteiro para a
string e devolver um ponteiro para lista recém criada.
15. Escreva uma função idêntica à anterior considerando que o vetor é do tipo:
type aluno = record
numero: integer;
nome: string[50];
morada: string[100];
telefone: string[9];
cod_postal: string[7];
end;
16.Escreva uma função que aceitando como argumentos: dois ponteiros para listas encadeadas (resultantes
de 15), ordenadas pelo número de aluno, as una (mantendo a ordenação).
17. Escreva uma função que recebendo como argumentos: um ponteiro para lista encadeada
(cuja informação no elemento é um inteiro) e dois ponteiros nulos, do tipo dos elementos da lista, divida a
lista em duas listas; uma com os números pares e a outra com impares. Para implementar esta função deve só
manipular os ponteiros:
18. Vários métodos são utilizados para diminuir o tempo gasto em localizar um determinado nodo em uma
lista. Um dos mais utilizados é o seguinte: a cada vez que é feito um acesso a um nodo (para consulta ou
alteração de um dos seus campos de informação), este nodo é movido para o início da lista. Deste modo, os
nodos acessados com maior freqüência ficarão localizados no início da lista.
Pede-se:
Escrever o Algoritmo moveFrente1 que faz a movimentação do nodo localizado para o início da lista, quando
esta lista for implementada como uma lista encadeada através de ponteiros. O endereço do primeiro nodo da
lista estará na variável-ponteiro plista, e o nodo localizado tem seu endereço armazenado na variávelponteiro pnodo. Lembrar que o procedimento deve receber todas as informações necessárias à sua atuação
através de parâmetros;
19. Fazer os exercícios 10.1 a 10.6 sobre listas ordenadas do livro texto, páginas 117 e 118.
20. Refazer os exercícios das listas de exercícios passadas (Alocação Seqüencial Fixa) de Pilha (exerc. 06) e
Fila (exerc. 02).
Download