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).