Prévia do material em texto
Universidade Tecnológica Federal do Paraná (UTFPR) Departamento Acadêmico de Informática (DAINF) Estrutura de dados I Professor: Rodrigo Minetto (rminetto@dainf.ct.utfpr.edu.br) Lista de exerćıcios - TAD Fila 1) Perito Criminal - Informática - NUCEPE - 2018 - Acerca da estrutura de dados do tipo filas, considere as operações de inserção e remoção de uma fila F abaixo: 1. enfileira (‘amarelo’, F) 2. enfileira (‘branco’, F) 3. enfileira (‘verde’, F) 4. enfileira (‘vermelho’, F) 5. desenfileira (F) 6. desenfileira (F) 7. enfileira (‘azul’, F) 8. enfileira (desenfileira (F), F). O resultado final das operações resulta em: • (A) [verde, azul, vermelho]. • (B) [branco, azul, amarelo]. • (C) [verde, azul]. • (D) [amarelo, branco]. • (E) [vermelho, azul, verde]. 2) Supondo uma fila circular implementada com o aux́ılio de um vetor, escreva uma função verifica fila, que dado um certo elemento é desejado retornar a posição no vetor que o armazena. Por exemplo, suponha que em uma fila de tamanho 6, são adicionados os seguintes elementos: 2, 4, 6, 8, 10 e são retirados três elementos e então adicionados os elementos 12, 14 e 16. Logo, a posição do elemento 16 nessa fila é 1. Se um elemento não existir sua posição é -1. int busca_posicao (Queue *q, int elem) { /*Nesta funcao voce pode usar os atributos de fila como ini, fim, vetor, e o simbolo ->!*/ ... } 1 int main () { int tam = 5; Fila *f = criar_fila (tam + 1); inserir (f, 2); inserir (f, 4); inserir (f, 6); inserir (f, 8); inserir (f, 10); remover (f); remover (f); remover (f); inserir (f, 12); inserir (f, 14); inserir (f, 16); int elem = 16; printf("O elemento %d esta na posicao %d\n", elem, busca_posicao (f, elem)); elem = 20; printf("O elemento %d esta na posicao %d\n", elem, busca_posicao (f, elem)); destruir_fila (f); return 0; } 3) O Merge-Sort é um algoritmo muito importante para ordenar elemen- tos. Um de seus passos consiste em unir dois conjuntos já classificados em apenas um. Escreva uma função que recebe como entrada duas filas f1 e f2 com os elementos ordenados crescentemente, retira os elementos dessas filas para produzir como sáıda uma terceira fila f3 com todos os elementos de f1 e f2 e também ordenada crescentemente. Por exemplo, suponha as entradas: f1 = [1 3 5 7] e f2 = [2 4 5 6 8 9 10]. Sáıda : f3 = [1 2 3 4 5 5 6 7 8 9 10]. (Dica: crie um função que mostra o primeiro elemento da fila mas não o retira). As filas F1 e F2 devem ficar vazias e serem deletadas no final da função. Utilize o seguinte protótipo para a sua função: Fila* concatena (Fila *f1, Fila *f2) { 2 /*Nao use "->", nem os atributos ini, fim e vetor aqui dentro dessa funcao apenas operacoes de fila como inserir, remover, vazia, etc. */ ... return *f3; } Sua função deve utilizar somente operações enfileirar (enqueue), desenfi- leirar (dequeue) e vazio (empty) (ou seja, não acesse diretamente os atributos internos do TAD Fila, como por exemplo fila→tam, fila→ini, fila→fim ou fila→vetor). No entanto, se achar necessário, você pode trabalhar com os atributos internos para criar uma nova função para o TAD Fila que mostra o primeiro elemento da fila mas não o retira e para retornar o tamanho da fila. 4) Seja uma variante da brincadeira de criança “batata-quente”. Suponha que um conjunto de n crianças formam um ćırculo, a brincadeira consiste em passar a batata por m−1 crianças, sendo que a m-ésima criança que recebe a batata é eliminada da brincadeira. A criança eliminada então deixa a batata para a próxima criança no ćırculo, e isso acontece até que não sobre nenhuma criança. Sendo que a última criança é a vencedora. Descreva um algoritmo que imprime a sequência de crianças eliminadas. Por exemplo se n = 5, suponha que a brincadeira começa em n = 1, e m = 3, então a sequência de eliminações é dado por: 3, 1, 5, 2, 4, pois 1 2 3 4 5 1 2 *3 4 5 (1 iteraç~ao - elimina o 3) *1 2 *3 4 5 (2 iteraç~ao - elimina o 1) *1 2 *3 4 *5 (3 iteraç~ao - elimina o 5) *1 *2 *3 4 *5 (4 iteraç~ao - elimina o 2) *1 *2 *3 *4 *5 (5 iteraç~ao - elimina o 4) Importante: é obrigatório o uso de operações de alto ńıvel de uma Fila. Não use ”→”, nem os atributos ini, fim e vetor para resolver essa questão. Use apenas as funções inserir, remover, vazia, etc. 3