19.04.2013 Views

Lista 4 - Do.ufgd.edu.br

Lista 4 - Do.ufgd.edu.br

Lista 4 - Do.ufgd.edu.br

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!