Você está na página 1de 5

Universidade Lusíada de São Tomé e Príncipe

Licenciatura em Engenharia Informática – 2.º Ano

UC: Algoritmos e Estruturas de Dados


1.º Semestre de 2022/23

Universidade Lusíada STP


Trabalho

Licenciatura em Eng. Informatica


Ano: 1ª
Disciplina: Introdução aos algoritmos e estruturas de dados
Professor: Nujoma Quaresma

Dicente:
Licinio Filipe
Otniela da Silva
José loureiro

São Tomé, 18 de 01 de 2023


Parte I
1. Considere a aplicação do algoritmo bubblesort ao vector <20, 11, 16, 9, 12, 14,
17, 19, 13, 15>. Supondo que o algoritmo percorre o vector da esquerda para a direita
em cada iteração, qual o conteúdo do vector após as duas primeiras iterações do
algoritmo bubblesort?
R: 11, 9, 12, 14, 16, 17, 13, 15, 19, 20

2. Considere uma tabela de dispersão com resolução por dispersão dupla (double
hashing), com dimensão M = 10, em que as funções de dispersão são dadas por:
hashone(k) = k mod M hashtwo(k)
= (1 + 3k)
Qual o índice da posição na tabela em que é colocado o último valor da sequência <10,
12, 7, 9, 3, 11, 2>, assumindo que a tabela se encontra inicialmente vazia?
R: Na posição 6 da tabela

3. Qual a sequência de inserção numa árvore de pesquisa binária (binary search


tree) inicialmente vazia que resulta numa árvore equilibrada?
a. < 23, 19, 21, 15, 18, 16, 12, 25 >
b. < 23, 25, 19, 15, 21, 18, 16, 12 >
c. < 12, 15, 16, 18, 19, 21, 23, 25 >
d. < 25, 23, 21, 19, 18, 16, 15, 12 >
e. < 18, 21, 23, 25, 15, 19, 16, 12 >
f. < 18, 23, 16, 21, 15, 19, 12, 25 >
g. < 23, 18, 21, 16, 15, 12, 19, 25 >

R: A escolha certo é a opção E

Parte II Lista simplesmente ligada


Considere uma lista simplesmente ligada de strings que obedece à seguinte definição:
typedef struct node *link;
typedef char* Item; struct
node {
Item item;
link next;
};
1 - Implemente as seguintes funções para manipulação de items: a)
Item newItem (char* s);
A função newItem devolve um novo Item (neste caso uma string) contendo a
informação passada como argumento.

b) Crie uma função responsável por criar um novo nodo de uma lista ligada, contendo o
Item i e devolvendo o endereço do tipo link. link newNode (Item i);
c) int itemCompare (Item i1, Item i2);
A função itemCompare devolve 0 se os items são iguais. Devolve um valor positivo se
i1 > i2 ou um valor negativo caso contrário.

d) void deleteItem (Item i); Liberta a


memória associada ao item.

2 - Implemente a função link insertSorted(link head, Item i) que insere o Item i de


forma ordenada na lista cujo primeiro elemento é apontado por head. A função deverá
devolver o primeiro elemento da lista. A ordenação deverá ser crescente. Use as funções
do exercício anterior.
3 - Implemente a função int search(link head, Item i) que devolve 1 se o item i
estiver na lista ou 0 caso contrário.
4 - Implemente a função link remove(link head, Item i) que remove da lista a
primeira ocorrência do Item i.
Parte III Fila
Considere a definição de Item do exercício anterior e as seguintes funções:
typedef char* Item; Item newItem
(Item i); int itemCompare (Item i1,
Item i2); void showItem (Item i);
void deleteItem (Item i);

Considere ainda uma fila de espera (ou queue), implementada através de uma lista
ligada que obedece às seguintes definições: typedef struct node { Item item;
struct node* next;
}*link; /* link é um ponteiro para a struct node */ typedef
struct queue{
link head; /* ponteiro para o primeiro "node" da lista */
link tail; /* ponteiro para o ultimo "node" da lista */ int
size; /* numero de elementos da lista */ } *Q; /* Q é um
ponteiro para esta struct queue */

1. Implemente a função Q create() que cria uma nova queue.


2. Implemente a função void insertBegin(Q q, Item i) que insere o Item i no início da
lista.
3. Implemente a função void insertEnd(Q q, Item i) que insere o Item i no fim da lista.
4. Implemente a função void insertSorted(Q q, Item i) que insere o Item i de forma
ordenada na lista l. A ordenação da lista deverá ser crescente.

Parte IV Algoritmo Heapsort


1. Qual o conteúdo do seguinte vector <25, 19, 23, 15, 18, 16, 21, 12> depois de os
dois primeiros elementos (i.e. os dois maiores) terem sido ordenados, utilizando
o algoritmo de ordenação heapsort?
R: 21, 19, 16, 15, 18, 12, 23, 25
2. Considere o vetor de heap = (95,60,78,39,28,66,70,33). Mostre passo a passo
quais seriam as modificações que o vetor sofre quando:
a. é retirado o elemento do topo;
b. é inserido o um elemento com a prioridade 50 (no vetor original).
c. é aplicado o algoritmo de heapsort.

3. Implemente as cinco funções de uma classe de Heap de mínimo, cuja interface é:

1. class Heap /* Min-Heap */


2. {
3. public:
4. //Construtor vazio
5. Heap(); 6.
7. //Constroi o heap a partir de um vetor de prioridades
8. Heap(int n, float* prioridade);
9.
10. //Destroi o heap 11.
~Heap();
12.
13. //Insere um novo elemento 14.
void insere(float prioridade);
15.
16. //Remove o elemento do topo e retorna sua prioridade 17.
float remove();
18.
19. private:
20. int _n; // numero de elementos
21. float* _prioridades; //Contem os elementos do heap
22. };
__

____________________________________________________________________
Professor: Eng.º Nujoma Quaresma Bom Trabalho!

Você também pode gostar