texto - Decom - Ufop
texto - Decom - Ufop
texto - Decom - Ufop
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 de Ouro Preto – UFOP<br />
Instituto de Ciências Exatas e Biológicas – ICEB<br />
Departamento de Computação – DECOM<br />
Disciplina: Algoritmos e Estruturas de Dados I – CIC102<br />
Professor: David Menotti (menottid@gmail.com)<br />
Aluno: ______________________________________________________________ No. ______<br />
• A prova é individual e sem consulta, exceto o contido em sua mente;<br />
• A interpretação das questões faz parte da avaliação;<br />
• Faça as observações que acredita ser necessário, por escrito, na folha de resposta.<br />
• Nas questões que requerem implementação escreva os algoritmos em C ou C++.<br />
• Dica: primeiro, leia todas as questões e só, então, comece a resolver as questões a partir<br />
das que você acredita serem as mais fáceis.<br />
2ª. Avaliação – 2,4 pontos<br />
(24% da nota total, onde 0,4 pontos extra)<br />
1. (0,6 pontos) Considere uma pilha P vazia e uma fila F não vazia. Utilizando apenas os testes<br />
de fila e pilha vazias (FilaVazia, PilhaVazia e FazPilhaVazia), as operações<br />
Enfileira, Desenfileira, Empilha, Desempilha, e uma variável aux do tipo<br />
TItem, escreva uma função em C/C++ que inverta a ordem dos elementos da fila (a função<br />
recebe somente a fila como parâmetro). Uma sugestão para a definição (protótipo) da função<br />
é:<br />
void InverteFila(TFila* pFila);<br />
2. (0,6 pontos) Escreva uma função em C/C++<br />
int Troca(TLista* pLista, TCelula* p, TCelula* q)<br />
que, dado dois apontadores quaisquer para células (p e q), troca de posição essas células na<br />
lista simplesmente encadeada, como mostrado na figura abaixo. (Obs. Não vale trocar<br />
apenas o campo item! Você deverá fazer a manipulação dos apontadores para trocar as duas<br />
células de posição). Considere que p e q não são adjacentes (um do lado do outro).<br />
Antes: X Y<br />
λ<br />
Primeiro p<br />
q<br />
Ultimo<br />
Depois: Y X<br />
λ<br />
Primeiro q<br />
p<br />
Ultimo<br />
q<br />
p
Universidade Federal de Ouro Preto – UFOP<br />
Instituto de Ciências Exatas e Biológicas – ICEB<br />
Departamento de Computação – DECOM<br />
Disciplina: Algoritmos e Estruturas de Dados I – CIC102<br />
Professor: David Menotti (menottid@gmail.com)<br />
3. (0,6 pontos) Considere uma árvore estritamente binária e quase completa, composta por<br />
um ponteiro para o nó raiz, onde cada nó é composto por um valor inteiro e ponteiros para<br />
os nós direito e esquerdo, como os TADs apresentados abaixo:<br />
typedef struct Tarvore<br />
{<br />
TNo *pRaiz;<br />
} TArvore;<br />
typedef struct TNo<br />
{<br />
int valor;<br />
TNo *pEsq;<br />
TNo *pDir;<br />
} TNo;<br />
Construa uma função em C/C++ que receba dois valores inteiros e um ponteiro para árvore<br />
estritamente binária e quase completa, e então insira os dois novos nós (representados pelos<br />
valores inteiros recebidos) na árvore de forma que ela continue sendo uma árvore<br />
estritamente binária e quase completa. Obs: caso a árvore esteja vazia somente um dos<br />
valores deverá ser inserido na árvore, de forma que ela continue sendo estritamente binária e<br />
quase completa. Caso seja necessário usar outras estruturas de dados como pilhas, filas e<br />
listas, considere que elas já estão implementadas.<br />
4. (0,6 pontos) Considere uma matriz composta por valores 1 e 0 representando uma imagem<br />
binária (ponto branco valor 0, ponto preto valor 1) como ilustrado na figura abaixo.<br />
unsigned char img[10][10] = {<br />
{0,0,1,1,0,0,0,0,0,0},<br />
{0,1,0,0,0,1,0,0,0,0},<br />
{0,1,0,1,1,0,0,0,1,0},<br />
{0,1,0,0,1,0,1,0,0,0},<br />
{0,1,1,0,1,0,1,1,0,0},<br />
{0,0,0,0,1,0,0,1,0,0},<br />
{0,0,1,0,1,0,1,1,1,0},<br />
{0,0,1,1,1,0,0,1,0,1},<br />
{0,0,0,0,0,0,1,1,0,0},<br />
{0,0,0,0,0,0,1,0,0,0} };<br />
A matriz/imagem apresentada acima/esquerda contém quatro regiões (uma com 7 pontos,<br />
duas com 11 pontos e uma última com um único ponto). Construa uma função em C/C++,<br />
que determine (e retorne) o número de regiões existentes em uma matriz/imagem. Uma<br />
sugestão para a definição (protótipo) da função é:<br />
Considere os TADs definidos abaixo,<br />
typedef struct TPonto<br />
{<br />
int x,y;<br />
struct TPonto* pstProx;<br />
} TPonto;<br />
int Regiao(TMatriz* pImagem);<br />
typedef struct TMatriz<br />
{<br />
int m,n;<br />
unsigned char** Matriz;<br />
} TMatriz;<br />
Também considere que funções de pilhas e filas já estão implementados para o TAD<br />
TPonto. Ainda considere que existem funções para criar, liberar e «zerar» o TAD TMatriz.