You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Universidade Federal da Grande <strong>Do</strong>urados<<strong>br</strong> />
Faculdade de Ciências Exatas e Tecnologia<<strong>br</strong> />
Bacharelado em Sistemas de Informação<<strong>br</strong> />
Estruturas de Dados I<<strong>br</strong> />
<strong>Lista</strong> IV<<strong>br</strong> />
Professor: MSc. Rodrigo Porfírio da Silva Sacchi<<strong>br</strong> />
27 de outu<strong>br</strong>o de 2010<<strong>br</strong> />
1. Escreva um algoritmo que leia dois vetores A e B com n números inteiros, e crie um vetor C<<strong>br</strong> />
resultado da soma de A e B.<<strong>br</strong> />
2. Escreva um algoritmo que leia um vetor A de n números inteiros e ordene esse vetor.<<strong>br</strong> />
3. Escreva uma função que recebe como parâmetros dois vetores de inteiros A e B e retorne um terceiro<<strong>br</strong> />
vetor C tal que:<<strong>br</strong> />
(a) C é a diferença entre A e B;<<strong>br</strong> />
(b) C é o produto entre A e B;<<strong>br</strong> />
(c) C é a intersecção entre A e B;<<strong>br</strong> />
(d) C é a união de A com B.<<strong>br</strong> />
4. Escreva um algoritmo que, dados como parâmetros uma lista alocada seqüencialmente L, o seu<<strong>br</strong> />
tamanho n e um valor x, devolva o número de elementos da lista cuja chave possui valor maior ou<<strong>br</strong> />
igual a x.<<strong>br</strong> />
5. Escreva um algoritmo que, dados como parâmetros uma lista ordenada alocada seqüencialmente<<strong>br</strong> />
L, o seu tamanho n e um elemento novo cujo valor da chave é x, insira novo dentro da lista<<strong>br</strong> />
(logicamente, a lista deve permanecer ordenada após a inserção).<<strong>br</strong> />
6. Escreva um algoritmo que, dados como parâmetros uma lista ordenada alocada seqüencialmente L,<<strong>br</strong> />
o seu tamanho n e o valor x, remova o elemento cujo valor da chave é x (logicamente, a lista deve<<strong>br</strong> />
permanecer ordenada após a remoção).<<strong>br</strong> />
7. Escreva um algoritmo que, dados como parâmetros uma lista alocada seqüencialmente L e o seu<<strong>br</strong> />
tamanho n, inverta a ordem dos elementos dessa lista.<<strong>br</strong> />
8. Escreva um algoritmo que, dados como parâmetros duas listas alocadas seqüencialmente L1 e L2<<strong>br</strong> />
e o tamanho de cada lista, (m e n, respectivamente), devolva uma terceira lista L3 resultado da<<strong>br</strong> />
combinação das listas L1 e L2.<<strong>br</strong> />
9. Escreva um algoritmo que, dados como parâmetros duas listas ordenadas alocadas seqüencialmente<<strong>br</strong> />
L1 e L2 e o tamanho de cada lista, (m e n, respectivamente), devolva uma terceira lista L3, também<<strong>br</strong> />
ordenada, resultado da combinação das listas L1 e L2.<<strong>br</strong> />
10. Utilizando uma pilha (e as funções Empilha e Desempilha), escreva um algoritmo que leia uma<<strong>br</strong> />
seqüência de caracteres e imprima essa seqüência de forma invertida. Escreva os algoritmos Empilha<<strong>br</strong> />
e Desempilha também.
11. Uma palavra construída sob o alfabeto Σ = a, b é dita bacana se ela contém o mesmo número de<<strong>br</strong> />
a ′ s e b ′ s. A palavra abab, por exemplo, é bacana, enquanto que a palavra abb não é. Escreva um<<strong>br</strong> />
algoritmo que leia uma palavra e determine se ela é bacana ou não (Utilize pilha).<<strong>br</strong> />
12. Na notação usual de expressões aritméticas, os operadores são escritos entre os operandos; por isso,<<strong>br</strong> />
a notação é chamada infixa. Na notação polonesa, ou posfixa, os operadores são escritos depois<<strong>br</strong> />
dos operandos. Exemplo:<<strong>br</strong> />
A + B * C → ABC * +<<strong>br</strong> />
(A * (B + C) / D - E) → ABC + * D / E -<<strong>br</strong> />
Escreva um programa que leia uma expressão em notação infixa e a traduza para a expressão posfixa.<<strong>br</strong> />
Para simplificar, suponha que a expressão infixa está correta e consiste apenas de letras, a<strong>br</strong>eparêntese,<<strong>br</strong> />
fecha-parêntese e símbolos para as quatro operações aritméticas. Além disso, suponha<<strong>br</strong> />
que a expressão toda está “em<strong>br</strong>ulhada” em um par de parênteses.<<strong>br</strong> />
13. Utilizando listas, escreva um programa eficiente para reconhecer se uma palavra é um palíndromo.<<strong>br</strong> />
Uma palavra é palíndromo se a seqüência de letras que a forma é a mesma, quer seja lida da<<strong>br</strong> />
esquerda para a direita ou da direita para a esquerda. Exemplo: “Socorram-me subi no onibus em<<strong>br</strong> />
Marrocos”.<<strong>br</strong> />
14. Seja o seguinte algoritmo de busca em uma lista ordenada L de tamanho n em alocação seqüencial:<<strong>br</strong> />
funç~ao inteiro buscaOrd1(L[]: vetor de inteiros, x: inteiro)<<strong>br</strong> />
início<<strong>br</strong> />
se x
(a) Incluir novos processos na fila de processo;<<strong>br</strong> />
(b) Retirar da fila o processo com o maior tempo de espera;<<strong>br</strong> />
(c) Imprimir o conteúdo da lista de processo em determinado momento.<<strong>br</strong> />
Assuma que cada processo é representado por um registro composto por um número identificador<<strong>br</strong> />
de processo.<<strong>br</strong> />
19. Os sistemas operacionais e outros aplicativos normalmente registram em arquivo as atividade relevantes<<strong>br</strong> />
dos usuários. Esta relevância é especificada pelo administrador. Por exemplo, um arquivo<<strong>br</strong> />
do tipo log, em formato texto, pode ter registrado todos os nomes de usuários que efetuaram login<<strong>br</strong> />
em um período, a data do login, o horário do login e o horário do logout. Este arquivo pode ser<<strong>br</strong> />
examinado em busca de atividade suspeitas. Escreva um programa para auxiliar o administrados<<strong>br</strong> />
nesta tarefa.<<strong>br</strong> />
(a) Considere a existência de um arquivo fictício login.log, onde estão armazenados, em cada linha,<<strong>br</strong> />
nome (login) do usuário, data de login, horário de login e horário de logout;<<strong>br</strong> />
(b) Construir as estruturas de dados apropriadas para conter os dados;<<strong>br</strong> />
(c) Ler o arquivo e preencher uma lista estática;<<strong>br</strong> />
(d) Implementar as seguintes funções para o usuário, que serão mostradas em um menu:<<strong>br</strong> />
i. mostraUsuarios: visualizar na tela todos os nomes que aparecem no arquivo, desprezando<<strong>br</strong> />
repetições de nomes de login;<<strong>br</strong> />
ii. mostraAposHora: visualizar na tela todos os nomes que efetuaram login após um horário<<strong>br</strong> />
indicado pelo administrados;<<strong>br</strong> />
iii. mostraAcessoUsuario: visualiza todos os acesso feitos por um determinado nome indicado<<strong>br</strong> />
pelo administrador.<<strong>br</strong> />
20. Escreva um algoritmo que retira um elemento da posição pos1 e coloca na pos2. A idéia é inserir<<strong>br</strong> />
o elemento ímpar no lugar do elemento par utilizandl algoritmos de inserção e remoção. Primeiro<<strong>br</strong> />
remova, para depois inserir. Dada uma lista, haverá troca de posições.<<strong>br</strong> />
Obs: Para todos os algoritmos feitos desta lista de exercícios, apresente calcule a função de complexidade.<<strong>br</strong> />
3