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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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!