You are on page 1of 5

1 Questo: O que faz a funo a seguir?

int misterio(int n, int v[], int i, int f) {


int p = ((f i)/ 2);
if (n == v[p+i]) {
return p+i;
} else if (n > v[p+i]) {
return misterio(n, v, p+i, f);
} else if (n < v[p+i]) {
return misterio(n, v, i, p);
}
}
R.: Busca binaria de um numero dentro do vetor
2 Questo: Determine as sadas apresentadas pelo programa abaixo:
#include <stdio.h>
int menor(int i, int v[], int tamanho) {
int j, m = i;
for (j = i; j < tamanho; j++) {
if (v[j] < v[m]) {
m = j;
}
}
return m;
}
main() {
int v[] = {10, 14, 9, 3, 21, 27};
int tamanho = sizeof(v) / sizeof(int);
int i, m, a;
for (i = 0; i < tamanho; i++) {
m = menor(i, v, tamanho);
a = v[i];
v[i] = v[m];
v[m] = a;
}

for (i = 0; i < tamanho; i++) {


printf("%d ", v[i]);
}
}
R.: 3 9 10 14 21 27
3 Questo: Dada a estrutura de um n, escreva uma funo que adicione
valores no fim de uma lista ligada.
struct Node {
int valor;
struct Node *proximo;
};
R.: Void insereFim (int n, node *lista){
node *novo = (node *) malloc (sizeof (node));
novo -> valor = n;
novo -> proximo = NULL;
node *temp = lista;
while (temp -> proximo != NULL){
temp = temp -> proximo;
}
Temp -> proximo = novo;
}

4 Questo: Utilize a mesma estrutura de n apresentada acima e escreva


uma funo que adicione valores no incio de uma lista ligada.
R.: Void insereInicio (int n, node *lista){
node *novo = (node *) malloc (sizeof (node));
novo -> valor = n;
node *temp = lista -> proximo;
lista -> proximo = novo;
novo -> proximo= temp;
}

5 Questo: Explique as principais diferenas entre uma lista ligada e uma


rvore, bem como seus propsitos de utilizao.
R.:

Lista fcil de inserir, porem a busca ruim.


Arvore fcil de buscar, porem a insero ruim.

6 Questo: Defina alocao esttica e alocao dinmica.


R.: Ordenao esttica alocao previa de um conjunto de endereos
de memoria.
R.: Ordenao dinmica vai alocando em tempo de execuo.
7 Questo: Dada a estrutura de um n, escreva uma funo que adicione
valores em uma rvore binria. Considere que os valores sero inseridos na
ordem digitada pelo usurio. Escreva apenas a funo de profundidade.
struct Node {
int valor;
struct Node *esq;
struct Node *dir;
};
void inserirNoPorProfundidade(node *arvore, node *novo){
if(novo -> valor < arvore -> valor){
if(arvore -> esq == NULL){
arvore -> esq = novo;
}else {
inserirNoPorProfundidade(arvore -> esq, novo);
}else{
if(arvore -> dir == null){
arvore -> dir = novo;
}else{
inserirNoPorProfundidade(arvore -> dir, novo);
}
}

8 Questo: Utilize a mesma estrutura de n apresentada acima e escreva


uma funo de busca em rvore binria.
node* buscar (int n, node *arvore){
node *no = NULL;
if (arvore != NULL){
if (n == arvore -> valor)
no = arvore;
else {
if (n < arvore -> valor)
no = buscar (n, arvore -> esq);
else
no = buscar (n, arvore -> dir);
}
}
return no;
}
9 Questo: Resolva os itens a seguir e justifique suas respostas.
a) Qual o custo computacional de ordenar um vetor de tamanho N com o
algoritmo Quick Sort?
R.: O (n*(n+1))/2
b) Qual o custo computacional de adicionar um valor em uma lista ligada
de tamanho N?
R.: o (n+1)
c) Qual o custo computacional de buscar um valor em uma rvore binria
perfeitamente balanceada (AVL)?
R.: Log2 n
d) O que uma rvore AVL?
R.: uma arvore balanceada pela altura e uma rvore de busca
binria auto balanceada. Em tal rvore, a altura de dois ns folha
difere no mximo em uma unidade, ou seja (-1 <= h <= 1).
e) Qual premissa deve ser atendida para realizar uma busca binria em um
vetor?
R.: O vetor deve estar ordenado.
10 Questo: Classifique as rvores abaixo com suas respectivas regras de
balanceamento. Justifique:
LL

RR

LR

RL

Resposta:
LL

RR

LR

RL

You might also like