Buscar

Estrutura de Dados PROVA ESAB

Prévia do material em texto

Estrutura de Dados 
 
Questão 7 : 
Assinale a alternativa que afirma corretamente a alocação que possui como característica a alocação 
de memória contígua em bloco único. 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito: A 
Comentário: A alocação estática se caracteriza por alocar um bloco único de memória contígua, o 
que facilita o acesso à informação para gravação e leitura dos dados da estrutura. Na alocação 
dinâmica, durante a execução do programa, são requisitados blocos de memória aleatoriamente, à 
medida que surge a necessidade de uso, por isso os blocos são alocados dispersadamente, porém, 
exigem que cada bloco tenha a informação do próximo bloco que os une (unidade 5). 
 
A 
Estática 
B 
Local 
C 
Dinâmica 
D 
Global 
 
Questão 1 : 
Com relação ao processo de inserção no início da lista duplamente encadeada, marque a única 
opção que descreve corretamente as regras a serem implementadas para esse tipo de inserção. 
Resposta Errada! A resposta correta é a opção B 
Justificativa: 
Gabarito: B 
Comentário: A inserção do início da lista duplamente encadeada deve garantir que o elemento 
inserido seja sempre referenciado como o primeiro da lista. Caso esse novo elemento a ser inserido 
não esteja em uma lista vazia, o novo elemento deverá apontar como próximo para o primeiro 
elemento da lista. O primeiro elemento da lista deverá apontar como anterior para o novo elemento. 
Assim, novo e primeiro estarão ligados corretamente. Após essas ligações, o novo elemento será 
atualizado como primeiro da lista. Se a lista estiver vazia, o novo elemento apontará como próximo 
para ele mesmo (unidade 22). 
 
A 
A inserção do início da lista tem como finalidade garantir que o elemento inserido seja 
definido como o primeiro da lista. Na inserção do novo elemento na lista, o primeiro 
elemento deverá apontar como próximo para o novo elemento inserido e o novo elemento 
deverá apontar como próximo para o primeiro elemento. Por fim, o novo elemento deve ser 
definido como primeiro da lista. 
B 
A inserção do início da lista tem como finalidade garantir que o elemento inserido seja 
definido como o primeiro da lista. Na inserção do novo elemento na lista, o primeiro 
elemento deverá apontar como anterior para o novo elemento inserido e o novo elemento 
deverá apontar como próximo para o primeiro elemento. Por fim, o novo elemento deve ser 
definido como primeiro da lista. 
C 
A inserção do início da lista tem como finalidade garantir que o elemento inserido seja 
definido como o primeiro da lista. Na inserção do novo elemento na lista, o último elemento 
deverá apontar como anterior para o novo elemento inserido e o novo elemento deverá 
apontar como próximo para o último. Por fim, o novo elemento deve ser definido como 
primeiro da lista. 
D 
A inserção do início da lista tem como finalidade garantir que o elemento inserido seja 
definido como o primeiro da lista. Na inserção do novo elemento na lista, o primeiro 
elemento deverá apontar como anterior para o primeiro elemento inserido e o novo elemento 
deverá apontar como próximo para o novo elemento. Por fim, o novo elemento deve ser 
definido como primeiro da lista. 
Questão 2 : 
Com relação à estrutura de dados fila e seu funcionamento, muito semelhante a uma fila de banco e 
a uma fila de arquivos para impressão, analise as sentenças a seguir: 
I A fila é conhecida como LIFO – last in, first out. 
II A fila é uma estrutura na qual as operações de inserção e retirada ocorrem apenas no início da 
lista. 
III A fila é conhecia como FIFO (first in, first out), em que os elementos que foram inseridos no 
início são os primeiros a serem removidos. Logo, a ordem de saída corresponde à ordem de 
entrada dos elementos. 
IV Os elementos são inseridos em um extremo da fila e removidos pelo outro extremo. 
Assinale a alternativa que mostra apenas as afirmativas corretas: 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito: A 
Comentário: A estrutura de dados fila possui como característica o fato de que a inserção ocorre em 
uma extremidade e a remoção em outra. Isso lhe garante a identificação como uma estrutura de 
dados FIFO (first in, first out), em que o primeiro a entrar é o primeiro a sair, logo, a ordem de saída 
corresponde à ordem de entrada dos elementos. Assim, em termos de operação, a fila realiza a 
inserção no seu final e a remoção no seu início (unidade 29). 
 
A 
III e IV 
B 
I e II 
C 
I, II, III e IV 
D 
Apenas a III 
Questão 3 : 
As figuras a seguir representam algumas características fundamentais da lista circular e as 
operações de inserção possíveis: no início, fim e entre elementos da lista. Analise as figuras e depois 
assinale a única alternativa correta: 
 
Resposta Errada! A resposta correta é a opção D 
Justificativa: 
Gabarito: D. 
Comentário: A figura (a) representa a lista circular com um elemento, e este deverá apontar como 
próximo para ele mesmo, garantindo a estrutura circular na qual o elemento que seria o último 
sempre aponta como próximo para o primeiro. A Figura (b) representa a remoção do último 
elemento, assim, o penúltimo elemento, caso exista, deverá apontar como próximo para o primeiro 
elemento da lista. A Figura (c) representa a remoção no iníco da lista, assim, caso exista um 
segundo elemento, o último da lista deverá apontar como próximo para o segundo elemento da lista, 
que será referenciado como início após a remoção do antigo primeiro elemento (unidade 19). 
 
A 
A Figura (a) representa uma lista circular com um elemento, portanto, o primeiro elemento 
deve ter o campo próximo valendo NULL. 
B 
A Figura (b) representa a remoção do último elemento da lista cricular com três elementos, 
portanto, o penúltimo elemento deverá ter o campo próximo valendo NULL após a remoção 
do último elemento. 
C 
A Figura (c) representa a remoção do primeiro elemento da lista cricular com três elementos, 
portanto, o campo próximo do segundo elemento da lista deverá valer NULL após a remoção 
do primeiro elemento. 
D 
A Figura (b) representa a remoção do último elemento da lista circular com três elementos, 
portanto, o penúltimo elemento deverá ter como próximo o endereço do primeiro elemento da 
lista. 
 
Questão 7 : 
Assinale corretamente o comando usado para alocar espaço de memória dinamicamente em C: 
Resposta Errada! A resposta correta é a opção D 
Justificativa: 
Gabarito: D 
Comentário: A linguagem C disponibiliza por meio da biblioteca “stdlib” o comando malloc 
(memory allocation) para alocação de um bloco contíguo de memória do computador, retornando o 
endereço desse bloco. A função básica para alocar memória é malloc. Ela recebe como parâmetro o 
número de bytes que se deseja alocar e retorna o endereço inicial da área de memória alocada 
(unidade 6). 
 
A 
sizeof 
B 
free 
C 
dispose 
D 
malloc 
Questão 8 : 
O algoritmo a seguir apresenta a rotina de inserção no início da lista circular simplesmente 
encadeada implementada em C: 
 
1 void inserirInicio(ListaCircular* lista, int valor){ 
2 No *novo; 
3 novo = (No*)malloc(sizeof(No)); 
4 novo->dado = valor; 
5 if(lista->primeiro == NULL){ 
6 novo->proximo = novo; 
7 }else{ 
8 novo->proximo = lista->primeiro; 
9 No* aux = lista->primeiro; 
10 while(aux->proximo != lista->primeiro){ 
11 aux = aux -> proximo; 
12 } 
13 aux->proximo = novo; 
14 } 
15 lista->primeiro = novo; 
16 } 
Assinale a sentença correta em relação a esse algoritmo. 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C. 
Comentário: A instrução da linha 3 é obrigatória, pois se tratando de uma alocação dinâmica, antes 
da manipulação da variável “novo” é preciso que seja alocado um espaço de memória 
correspondente ao tamanho em bytes do tipoNo. A instrução da linha 6 será executada quando a 
lista estiver vazia. Portanto, a operação está inserindo o primeiro elemento que, por definição, 
apontará para ele mesmo. As linhas 9 a 12 possuem as instruções para localizar o último elemento 
da lista, aquele cujo ponteiro próximo vale o endereço do primeiro elemento e, ao sair do comando 
de laço da linha 10, a variável aux sempre estará valendo o endereço do último elemento da lista, 
que deverá apontar para o primeiro da lista. A instrução da linha 15 será executada sempre, pois em 
uma inserção no início sempre o valor inserido deve ser referenciado como primeiro (unidade 20). 
 
A 
A instrução da linha 3 é opcional, pois a alocação dinâmica de memória para o novo elemento 
será realizada pelo sistema operacional, independentemente de ser ou não solicitada 
explicitamente no programa. 
B 
A instrução da linha 6 só será realizada quando a lista não estiver vazia, pois o primeiro 
elemento da lista circular só aponta para ele mesmo quando a lista tiver mais de um elemento. 
C 
As instruções das linhas 9 a 12 representam a rotina de percorrer todos os elementos da lista, 
começando do primeiro elemento até que se localize o que seria o último elemento da lista, 
portanto, na linha 13, a variável aux terá como valor o endereço do último elemento da 
lista. 
D 
A instrução da linha 15 só será executada quando a lista estiver vazia. 
 
Questão 10 : 
O Algoritmo de Merge Sort divide a estrutura de dados em várias partes (divisão), sendo cada parte 
ordenada em separado (conquista) e, ao final, os segmentos previamente ordenados são 
combinados (combinação), resultando na estrutura de dados ordenada. Considere o vetor X com os 
seguintes elementos: 38, 16,27, 39,12 e 27. 
Ao aplicar a primeira divisão do vetor, usando o algoritmo de merge sort, assinale a alternativa que 
mostra como os elementos serão divididos. 
 
Resposta Errada! A resposta correta é a opção D 
Justificativa: 
Gabarito: D 
Comentário: O funcionamento do algoritmo visa garantir os três passos para a ordenação da 
estrutura de dados: dividir, conquistar e combinar, e, para isso, o vetor é dividido, inicialmente, em 
duas partes, se possível com a mesma quantidade de elementos (unidade 43). 
 
A 
 
B 
 
C 
 
D 
 
 
Questão 4 : 
A figura a seguir apresenta a lógica de impressão dos valores em uma árvore binária com sete 
elementos, que ao final lista a seguinte sequência: 1, 3, 2, 5, 7, 6, 4. 
 
Figura – Percorrendo os elementos da árvore binária. 
Fonte: Elaborada pelo autor (2013). 
Assinale a alternativa que apresenta o tipo de percurso utilizado para a listagem dos elementos: 
Resposta Errada! A resposta correta é a opção B 
Justificativa: 
Gabarito: B 
Comentário: A listagem começa pelo elemento mais à esquerda, depois o elemento mais à direita e, 
por fim, a raiz ou nó pai. Logo, a regra do percurso é E, D, R. Assim, trata-se do percurso pós-
fixado, que possui como regra que se busque o elemento mais à esquerda, depois o elemento mais à 
direita e por último o nó pai (unidade 35). 
 
A 
central 
B 
pós-fixado 
C 
pré-fixado 
D 
fixado 
 
Questão 5 : 
Na implementação da pilha usando a lista simplesmente encadeada, a função pop() tem como 
finalidade remover o elemento que está no topo e atualizar o descritor topo da pilha para o elemento 
abaixo do topo removido, apontado pelo descritor anterior do nó. O algoritmo a seguir apresenta a 
remoção na pilha: 
Algoritmo – Exercício 
01 void pop(Pilha *pilha){ 
02 if(pilha->topo != NULL){ 
03 No* aux = pilha->topo; 
04 pilha->topo = pilha->topo->anterior; 
05 free(aux); 
06 } 
07 } 
Fonte: Elaborado pelo autor (2013). 
Com base no algoritmo, analise as seguintes sentenças: 
I – A instrução da linha 4 é opcional, pois a remoção do elemento do topo já ocorre na instrução da 
linha 3, quando o topo passa a ser o anterior do topo. 
II – A instrução “if” da linha 2 verifica se a pilha está vazia e evita que a operação remover seja 
executada com a pilha vazia, pois as linhas 3 a 5 só serão executadas se a pilha tiver pelo menos um 
elemento. 
III – Se a pilha possuir um elemento apenas, como seu anterior vale NULL, ao executar a instrução 
da linha 3, pilha->topo = pilha->topo->anterior, o topo terá seu valor alterado para NULL. 
IV – A instrução free(aux), da linha 05, é que remove fisicamente o elemento da memória, liberando 
o espaço que havia sido alocado. 
Assinale a alternativa que apresenta apenas as afirmativas corretas: 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: A instrução da linha 3, pilha->topo = pilha->topo->anterior, faz com que o endereço 
do topo seja atualizado com o endereço do elemento anterior, porém, a remoção física do elemento 
que era topo não foi realizada, e ele continua alocando um espaço de memória que não será liberado 
até que o programa termine. Sendo assim, será um espaço de memória alocado e sem uso. A 
remoção realmente acontecerá quando a função free() for executada para esse endereço, liberando o 
espaço de memória alocado. Caso a pilha tenha um elemento, seu anterior valerá NULL, logo, 
quando a instrução da linha 3 for executada, o topo será atualizado com o anterior do único 
elemento (topo) que vale NULL. Portanto, o topo também valerá NULL, o que está correto, pois 
esse único elemento será removido. Porém, caso a pilha esteja vazia, o topo vale NULL e, ao tentar 
recuperar o seu anterior, um erro fatal será gerado e a execução do programa será encerrada. Por 
isso, verificar se lista está vazia pode solucionar esse problema (unidade 28). 
01 void pop(Pilha *pilha){ 
02 if(pilha->topo != NULL{ 
04 No* aux = pilha->topo; 
04 pilha->topo = pilha->topo->anterior; 
05 free(aux); 
06 } 
07 } 
 
 
A 
I, II e III 
B 
I, II e IV 
C 
II, III e IV 
D 
I e II 
 
Questão 6 : 
Com relação à árvore genérica, analise as seguintes sentenças: 
I- As árvores genéricas, assim como as árvores binárias, são ordenadas de forma que os valores 
menores ficam à esquerda do nó pai e os valores maiores à direita do nó pai. 
II- O menor grau de uma árvore genérica é 3. 
III- A árvore genérica com grau 4 é chamada de quaternária. 
IV- Uma árvore genérica não pode conter elementos do tipo folha, ou seja, que não possuem filhos. 
Assinale a alternativa que apresenta apenas as sentenças verdadeiras: 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: Como o número de nós filhos em uma árvore genérica é variável, esse tipo de árvore 
não possui nenhuma regra de ordenação como na árvore binária, em que os elementos menores 
ficam à esquerda do nó pai e os maiores à direita do nó pai. Diferentemente da árvore binária, as 
árvores genéricas podem ter mais de dois nós filhos, podendo ser ternárias (três filhos), quaternárias 
(quatro filhos) e assim sucessivamente. A árvore genérica de grau quatro é quaternária, de grau três 
é chamada de ternária, grau cinco, quintenária e assim por diante. A árvore genérica só se diferencia 
da árvore binária pelo grau da árvore, as demais características são as mesmas, como ter raiz, folha, 
nós internos, trajetória e grau da árvore e grau do nó (unidade 36). 
 
A 
I, II, III e IV 
B 
I e II 
C 
II e III 
D 
II, III e IV 
Questão 7 : 
Analise o código em C a seguir: 
 
Figura – Exemplo de código em linguagem C. 
Fonte: Elaborada pelo autor (2013). 
Na execução do programa, a instrução da linha 21 imprime na tela o valor da variável x. Assinale a 
alternativa que corresponde ao valor da variável que será apresentado. 
Acertou! A resposta correta é a opção D 
Justificativa: 
Gabarito: D 
Comentário: A matriz será preenchida com os valores 1, 2, 3 e 4. A rotina da função main() 
percorrerá todos os elementos da matriz e seguirá guardando, na variável x, a soma de todosesses 
valores visitados. No final da rotina, na linha 21, o valor apresentado será 10. Esse conteúdo foi 
estudado na unidade 10. 
X<-0 
X<-0 +1;(1) 
X<-1 +2;(3) 
X<-3 +3;(6) 
X<-6 +4;(10) 
 
A 
0 
B 
20 
C 
24 
D 
10 
 
Questão 8 : 
As variáveis estáticas servem para que o valor da variável seja mantido mesmo após o encerramento 
da execução do método ou função. Assinale a alternativa que mostra por que isso é possível. 
 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: A cláusula static define uma variável como estática. Estas não perdem os dados após o 
encerramento da função porque as variáveis estáticas são armazenadas na memória principal em 
blocos de memória diferentes do espaço utilizado pelas funções. No encerramento da função todas 
as variáveis são desalocadas com o método, o que não acontece com as variáveis estáticas, pois 
estão em outro endereçamento de memória (unidade 3). 
 
A 
Variáveis estáticas são armazenadas em arquivos separados do programa de computador. 
B 
Variáveis estáticas são vetores, e vetores mantêm os dados acessíveis durante a execução do 
programa de computador. 
C 
Variáveis estáticas são armazenadas na memória principal em blocos de memória diferentes do 
espaço utilizado pelas funções, estão em outro endereçamento de memória. 
D 
Variáveis estáticas são ponteiros e por isso nunca perdem os dados. 
Questão 9 : 
O método de bolha, ou bubble sort, caracteriza-se por empurrar os maiores valores da estrutura de 
dados para o final, quando a ordenação é crescente, e os maiores valores para o início da estrutura, 
quando da ordenação decrescente. Para isso, o algoritmo deve gerenciar o número de processo de 
ordenação e para cada um deles, o número de comparações a serem executadas. Estando os 
elementos que compõem cada par comparado fora de ordem, eles devem ser trocados de posição. 
Para um vetor com cinco elementos, por exemplo, serão realizados quatro processos de ordenação 
(número de elementos -1), sendo que no primeiro processo são executadas quatro comparações, no 
segundo processo três comparações, no terceiro processo duas comparações e no quarto e último 
processo, uma comparação. A figura a seguir representa um vetor com cinco elementos: 
 
Ao final do primeiro processo de ordenação deste vetor, em que serão comparadas as posições do 
vetor: 0 com 1, 1 com 2, 2 com 3 e 3 com 4, a única sentença que representa corretamente como os 
elementos estarão distribuídos no vetor ao final desse processo, e que tem como finalidade ordenar 
decrescentemente o vetor, é: 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: No primeiro processo serão comparados os valores dos pares: 0 e 1, 1 e 2, 2 e 3, e por 
fim, 3 e 4. Como se trata de uma ordenação decrescente, sempre que o elemento da esquerda do par 
for menor que o elemento da direita do par, os valores precisam ser trocados: o valor menor vai para 
esquerda e o maior para direita. Assim, a ordenação do vetor no primeiro processo terá a seguinte 
sequência: 
Vetor Elementos Comparados 
Elementos 
Trocados 
[10,15,2,21,44] Posição 0 com 1. (10 com 15) 
Trocar 10 com 
15. 
[15,10,2,21,44] Posição 1 com 2. (10 com 2) Não troca. 
[15,10,2,21,44] Posição 2 com 3. (2 com 21) 
Trocar 21 com 
2. 
[15,10,21,2,44] Posição 3 com 4. (2 com 44) 
Trocar 44 com 
2. 
[15, 10, 21, 
44,2] 
Fim do processo 1, o valor 2 está na posição correta, já que se 
deseja uma ordenação decrescente. 
 
 
 
A 
 
B 
 
C 
 
D 
 
 
Questão 8 : 
Considerando a lista do código a seguir como uma lista de inteiros, preencha as lacunas com as 
instruções que possibilitem a listagem dos valores pares da lista. 
 
Assinale a alternativa que mostra a sequência de instruções que completam corretamente as lacunas 
do código. 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito: A 
Comentário: Para listar os elementos pares da lista, é necessário pesquisar todos os elementos 
(desde o primeiro até o último), passando por cada elemento fazendo com que o ponteiro a cada 
laço vá para o próximo elemento da lista. Para saber se o elemento é par, é preciso dividir o valor 
armazenado no campo dado por 2: se o resto for 0, o valor do elemento é par (unidade 17). 
A instrução com as regras ficará assim: 
void listarPares(Lista* lista){ 
 No* ponteiro = lista->primeiro; 
 while(ponteiro != NULL){ 
 if(ponteiro->dado%2==0){ 
 printf("%d",ponteiro->dado); 
 } 
 ponteiro = ponteiro->proximo; 
 } 
 } 
 
A 
lista->primeiro, NULL, ponteiro->dado%2==0,proximo. 
B 
lista->ultimo, NULL, ponteiro->dado%2==0,primeiro. 
C 
lista->primeiro, NULL, ponteiro->dado%2!=0,proximo. 
D 
lista->primeiro, lista->ultimo, ponteiro->dado%2==0,proximo. 
 
Questão 1 : 
O algoritmo a seguir apresenta as regras de ordenação do método de bolha para um vetor de 
inteiros, que recebe como parâmetro o vetor que será manipulado e o tamanho do vetor. A variável 
ht representa a situação se houve troca ou não, a variável p, o número do processo de ordenação e a 
variável c, o número de comparações. 
 
Para que o algoritmo funcione corretamente, é preciso completar as lacunas do algoritmo prévio. 
Assinale a única alternativa que preenche corretamente estas lacunas, na ordem em que são 
apresentadas: 
Resposta Errada! A resposta correta é a opção D 
Justificativa: 
Gabarito: D 
Comentário: A variável ht representa a condição se houve troca ou não no processo de ordenação, 
portanto deve começar valendo 1 para que o primeiro processo de ordenação seja iniciado. O 
comando de laço while representa a condição para que cada processo de ordenação seja executado, 
sendo as condições que o número do processo (p) seja menor que a quantidade de elementos do 
vetor, variando de 1 a tamanho-1, e que tenha havido uma troca no processo anterior (ht==1). O 
comando de laço for representa o número de comparações, que muda de acordo com o processo de 
ordenação em execução. Se for o primeiro processo, a quantidade de comparações é tamanho -1, no 
segundo processo a quantidade é tamanho -2, e assim sucessivamente, e como a variável p 
representa o número do processo, a condição fica for (c=0; c<tamanho-p; c++). Por fim, toda vez 
que há uma troca de valores a variável ht (houve troca) é alterada para 1 (verdadeiro) (unidade 40). 
 
A 
0, tamanho, p, 0 
B 
1, p, tamanho, 1 
C 
0, tamanho, p, 1 
D 
1, tamanho, p, 1 
 
Questão 7 : 
A função de combinação é utilizada na função de segmentação do vetor, uma vez que, após a 
divisão dos elementos do vetor (segmentação), os dados dos segmentos devem ser ordenados por 
meio da combinação. O algoritmo a seguir apresenta a função de segmentação do vetor: 
Algoritmo – Função de segmentação 
01 
void segmentacao(int v[],int aux[],int esq, int 
dir){ 
02 int meio,i; 
03 if(esq<dir){ 
04 meio=(esq+dir)/2; 
05 segmentacao(v,aux,esq,meio); 
06 segmentacao(v,aux,meio+1,dir); 
07 combinacao(v,aux,esq,meio+1,dir); 
08 } 
09 } 
Fonte: Elaborado pelo autor (2013). 
 
Analisando o código, assinale a alternativa correta. 
 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito A 
Comentário: Na linha 7 do algoritmo, a função de combinação é chamada para que os segmentos 
criados nas rotinas recursivas das linha 5 e 6 sejam ordenados. A instrução da linha 5 é responsável 
por segmentar o vetor da posição inicial até o meio do vetor, e a instrução da linha 6 segmenta o 
vetor a partir da posição do meio do vetor até o final do vetor. Portanto, é uma função recursiva que 
será chamada sempre que o valor do parâmetro esq for menor que o valor do parâmetro dir (unidade 
44). 
 
A 
A chamada da função segmentaçãona linha 5 tem como finalidade ordenar os elementos do 
primeiro segmento do vetor. 
B 
A chamada da função segmentação na linha 6 tem como finalidade ordenar os elementos do 
primeiro segmento do vetor. 
C 
A função será chamada, recursivamente, sempre que o valor do parâmetro esq for igual ao 
valor do parâmetro dir. 
D 
Não se trata de uma função recursiva. 
 
Questão 8 : 
Analise com atenção os algoritmos a seguir. Qual o algoritmo em C que implementa corretamente a 
lógica para atualizar o maior e o menor valor de uma lista circular, a partir do valor que é inserido 
na lista? 
Assinale a alternativa correta: 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito: A. 
Comentário: A condição para atualizar o maior e o menor valor é verificar se o valor inserido é 
maior do que o maior valor da lista até então e, caso essa condição seja verdadeira, o maior valor da 
lista deve ser atualizado com o valor inserido. Caso o valor inserido não seja maior do que o maior 
valor da lista, não significa que ele seja o menor, por isso a condição de senão (else) deve conter um 
se (if) para verificar se o valor é menor do que o menor da lista. Por exemplo, se o maior valor da 
lista é 10 e o menor é 5, a inserção do valor 7 não atende à condição de maior do que o maior, nem 
de menor do que o menor da lista (unidade 21). 
 
A 
 
B 
 
C 
 
D 
 
 
Questão 9 : 
O algoritmo a seguir apresenta a ordenação por quick sort: 
 
A variável i representa a posição do vetor com o valor maior ou igual ao valor do pivô. Já a variável 
j representa a posição do valor menor ou igual ao valor do pivô à sua direta. O comando de laço da 
linha 7 procura pela posição do valor maior ou igual ao valor da variável pivô, e as rotinas do 
comando de laço while da linha 8 percorrem o vetor para localizar o valor menor ou igual ao pivô. 
A ordenação do vetor utiliza a recursividade, conforme as chamadas recursivas das linhas 15 e 16 
do código. Assinale a alternativa que completa as lacunas do código com as instruções corretas: 
Resposta Errada! A resposta correta é a opção B 
Justificativa: 
Gabarito: B 
Comentário: O método de ordenação quick sort caracteriza-se pela segmentação do vetor e pela 
recursividade da ordenação. Logo, cada nova chamada da função de ordenação deve começar pela 
posição inicial e terminar na posição final do vetor, e esses valores são passados como parâmetros 
na chamada da função. Como a variável i representa a busca pelo valor igual ou maior que o valor 
do pivô, ela deve ser inicializada com o valor do parâmetro inicial, assim, na linha 3 do algoritmo, i 
deve começar valendo inicial, e na linha 7, essa variável deve ser incrementada de um em um (i++) 
para percorrer cada posição e localizar o valor fora de ordem na parte à esquerda do vetor. Já a 
variável j representa a posição do valor igual ou menor que o pivô à sua direita, portanto, deve ser 
inicializada com o valor final do vetor e no comando de laço da linha 8, decrementado de um em 
um (j--). Por fim, as chamadas recursivas são realizadas para a parte à esquerda do pivô, desde que 
a posição da variável j seja maior que a posição inicial (j > inicial) e para a parte à direita do pivô, 
desde que a variável i seja menor que a posição final do vetor (i 
 
A 
0,final,i++,j--,i==inicial,j==final 
B 
inicial,final,i++,j--,j>inicial,i<final 
C 
final,inicial,i++,j--,j>final, i<inicial 
D 
inicial, final, i--, j++, j>inicial, i<final 
 
Questão 8 : 
Considere uma lista na qual foram executadas as operações na seguinte ordem: 
inserirInicio(10); 
inserirInicio(20); 
inserirFinal(100); 
removerInicio(); 
removerFinal(); 
inserirInicio(44); 
A sentença que representa corretamente os elementos da lista simplesmente encadeada após as 
operações é: 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: A inserção no final insere o novo elemento à direita da lista e a inserção no início 
insere o novo elemento à esquerda da lista, assim como a remoção do início remove o elemento 
mais à esquerda e a remoção no final o elemento mais à direita. Assim, na primeira inserção do 
valor 10, a lista terá um único elemento (10). Ao inserir no início o elemento 20, este passará a ser o 
primeiro, deslocando o valor 10 para a direita, resultando em (20,10). A inserção no final do valor 
100 fará com que este seja colocado na posição mais à direita, resultando em (20,10,100). A 
operação de remoção no início removerá o elemento mais à esquerda, o 20, assim a lista ficará 
(10,100). Com a remoção no final, o elemento mais à direita será removido, o 100, resultando na 
lista com um único elemento (10). A inserção no início colocará um novo elemento (44) mais à 
esquerda da lista, resultando em (44,10). Assim, o resultado será 44,10 (unidade 18). 
 
Teste de mesa: 
Operação Resultado na Lista 
inserirInicio(10); 10, 
inserirInicio(20); 20,10 
inserirFinal(100); 20,10,100 
removerInicio(); 10,100 
removerFinal(); 10 
inserirInicio(44); 44,10 
 
 
 
A 
20,10,100 
B 
20,10 
C 
44,10 
D 
10 
 
Questão 6 : 
Com relação à busca sequencial e à busca binária, analise as seguintes sentenças: 
 
I – Quanto maior a quantidade de elementos de um vetor, mais rápida será a busca sequencial. 
II – A forma mais simples de busca em um vetor consiste em percorrer o vetor, elemento a 
elemento, para verificar se o elemento de interesse existe no vetor, ou seja, se algum dos elementos 
do vetor é igual ao elemento desejado. 
III – A busca binária pode ser realizada em qualquer tipo de vetor, estando ele ordenado ou não. 
IV – A busca sequência não poder ser realizada em vetores ordenados. 
 
Assinale a alternativa que aponta apenas as sentenças verdadeiras. 
Resposta Errada! A resposta correta é a opção B 
Justificativa: 
Gabarito: B 
Comentário: A forma mais simples de busca em um vetor consiste em percorrer o vetor, elemento a 
elemento, para verificar se o elemento de interesse existe no vetor, ou seja, se algum dos elementos 
do vetor é igual ao elemento desejado. A busca sequencial é um algoritmo bastante simples, porém, 
a sua eficiência é baixa, já que é preciso percorrer todos os elementos do vetor, desde a primeira 
posição, até que seja localizado o valor desejado ou que o vetor se encerre. Logo, quando maior o 
vetor, mais demorada será a pesquisa sequencial. Uma estratégia para tornar o algoritmo de busca 
sequencial mais eficiente é considerar que a estrutura de dados já está ordenada. A busca binária 
destina-se à busca em vetores ordenados, caso contrário, não poderá ser aplicada. A ideia do 
algoritmo é buscar o elemento desejado, comparando-o com o elemento do meio do vetor. Se o 
valor do meio do vetor for igual ao elemento desejado, podemos parar a busca (unidade 45). 
 
A 
I, II, III e IV. 
B 
II e IV. 
C 
I e III. 
D 
I e II. 
 
 
Questão 3 : 
O algoritmo a seguir apresenta a rotina para impressão dos valores de uma árvore binária: 
Algoritmo – Função de listagem de elementos da árvore 
01 void exibirNos(ArvoreBinaria arvore){ 
02 if (arvore != NULL){ 
03 printf((%d)\n, arvore->valor); 
04 if (arvore->esq != NULL) exibirNos(arvore->esq); 
05 if (arvore->dir != NULL) exibirNos(arvore->dir); 
06 } 
07 } 
Fonte: Elaborado pelo autor (2013). 
Analisando o código do algoritmo, assinale a alternativa correta. 
Resposta Errada! A resposta correta é a opção B 
Justificativa: 
Gabarito: B 
Comentário: A função listará os elementos da árvore desde que a referência do nó visitado (árvore) 
seja diferente de NULL. Caso contrário, a função é encerrada sem que nenhuma mensagem seja 
mostrada ao usuário. Se a referência não é nula, será mostrado o valor armazenado no nó pai e, em 
seguida, se a referência da esquerda do nó pai for diferente de NULL, uma chamada recursiva da 
função exibirNos() será executada, com o endereço do nóda esquerda. O mesmo ocorrerá caso a 
referência do nó da direita seja diferente de NULL, com uma chamada recursiva da função 
exibirNos() com o endereço do nó da direita (unidade 34). 
 
A Caso a árvore binária esteja vazia, a função resultará em um erro ao tentar imprimir na tela o 
valor da raiz de uma árvore vazia. 
B 
As instruções das linhas 4 e 5 representam chamadas recursivas da função exibirNos(), caso as 
referências da esquerda e da direita sejam diferentes de NULL. 
C 
Se a referência do nó da esquerda for NULL, ao chamar a função exibirNos(arvore->esquerda), 
será mostrada na tela a palavra NULL. 
D 
Se a referência do nó da direita for NULL, ao chamar a função exibirNos(arvore->direita), será 
mostrada na tela a palavra NULL. 
 
 
Questão 10 : 
O algoritmo a seguir apresenta a rotina para remoção na fila implementada por meio de uma lista 
simplesmente encadeada: 
Algoritmo – Função de remoção na fila simplesmente encadeada 
01 void remover(Fila* fila){ 
02 if(fila->inicio!=NULL){ 
03 No* aux = fila->inicio; 
04 
 printf(“O valor %d foi removido da fila.\n”,aux-
>valor); 
05 fila->inicio = fila->inicio->proximo; 
06 if(fila->inicio == NULL){final->final = NULL}; 
07 free(aux); 
08 } 
09 } 
Fonte: Elaborado pelo autor (2013). 
Com base neste algoritmo é correto afirmar que: 
Resposta Errada! A resposta correta é a opção D 
Justificativa: 
Gabarito: D 
Comentário: A rotina implementa a remoção no início da fila, que só será realizada se a fila não 
estiver vazia (fila->inicio != NULL), por isso, não haverá erro em tempo de execução tentando 
remover um elemento que não existe na memória. Após a remoção, o início da fila será o segundo 
elemento (fila->inicio = fila->inicio->proximo), ou será NULL, pois se a fila possui um único 
elemento, o próximo dele é NULL. Dessa forma, a instrução fila->inicio = fila->inicio->proximo 
mudará o valor do inicio para NULL, que é verificado na instrução da linha 05; caso o início da fila 
seja NULL, o final da fila também será NULL (final->final = NULL). A remoção ocorre por meio 
da instrução free(aux) que remove o bloco de memória alocado para o primeiro elemento da fila, 
desalocando o espaço de memória que havia sido requisitado e alocado na inserção do elemento na 
fila (unidade 31). 
 
A 
a remoção na fila acontecerá independentemente de a fila estar vazia, por isso haverá um erro 
de execução ao se tentar remover o elemento do início de uma lista vazia. 
B 
se a fila possuir apenas um elemento, após a remoção desse elemento, o descritor final da fila 
estará valendo o endereço do segundo elemento da fila. 
C 
a operação free(aux) aloca um espaço de memória para o elemento que está sendo removido, 
ou seja, o primeiro elemento da fila. 
D 
após a remoção, o início da fila será o segundo elemento da fila ou o valor NULL. 
 
Questão 8 : 
O algoritmo a seguir apresenta a rotina para remoção do elemento do início da fila duplamente 
encadeada, ou seja, cada item da fila utiliza dois descritores para referência ao elemento anterior e 
para referência ao elemento posterior. 
Algoritmo – Função de remoção na fila duplamente encadeada 
01 void remover(Fila* fila){ 
02 if(fila->inicio!=NULL){ 
03 No* aux fila->inicio; 
04 
 printf(“O valor %d foi removido da fila\n”,aux-
>valor); 
05 fila->inicio = fila->inicio->proximo; 
06 if(fila->inicio == NULL){ fila->final = NULL}; 
07 else {fila->inicio->anterior = NULL}; 
08 free(aux); 
09 } 
10 } 
Fonte: Elaborado pelo autor (2013). 
Com relação ao algoritmo, é correto afirmar que: 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito: A 
Comentário: A remoção só ocorrerá se a fila não estiver vazia e a remoção sempre excluirá da fila 
o elemento do início da fila, pois seu endereço foi armazenado na variável aux que é passada como 
parâmetro para função free() na linha 07, fazendo a desalocação para este endereço de memória. O 
novo início da fila passará a ser o segundo elemento, o próximo do início, sendo que, se a fila 
possui um único elemento, o início valerá o próximo do primeiro que é NULL e, consequentemente, 
o início da fila também valerá NULL. Se isto ocorrer, na instrução da linha 05, que verifica se o 
descritor inicio vale NULL e a condição é verdadeira, o descritor final da fila também valerá 
NULL, portanto o descritor inicio e final valem NULL somente quando a fila estiver vazia e, 
obrigatoriamente, se inicio vale NULL, o final também valerá NULL (unidade 32). 
 
A 
com a remoção do primeiro elemento da fila, o novo primeiro elemento, que era o segundo 
elemento da fila, deverá apontar como anterior para NULL, pois antes ele apontava como 
anterior para o elemento que foi removido, desde que a fila não fique vazia após a remoção do 
primeiro elemento. 
B 
com a remoção, independentemente de a fila estar vazia ou não, sempre o descritor final da fila 
estará valendo NULL, pois o primeiro elemento foi removido. 
C 
de acordo com a lógica do algoritmo, é possível que após a remoção o descritor inicio esteja 
valendo NULL e o descritor final não esteja valendo NULL. 
D 
a instrução free(aux) remove o elemento referenciado como final da fila 
 
Questão 9 : 
A estrutura de dados Pilha, conhecida como LIFO (last in first out), do inglês, o último a entrar é o 
primeiro a sair, possui duas operações básicas: push e pop. Supondo que as seguintes operações 
foram realizadas em uma pilha vazia: push(A), push(B), push(C), pop(), pop(), push(D), assinale a 
figura que representa corretamente a pilha ao final dessas operações. , 
 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: As operações de push são inseridas no topo da pilha, assim, a pilha, com as três 
primeiras operações, que são de inserção, ficou: A, B, C. Como a operação de pop remove do topo, 
com as duas operações de pop, a pilha ficou: A. Como a última operação é de push(D), a pilha 
ficará: A, D (unidade 26). 
 
A 
 
B 
C 
 
D 
 
Questão 7 : 
Para referenciar e usar uma biblioteca em C de forma que a interface de um Tipo Abstrato de Dados 
possa ser utilizada em várias aplicações, deve-se usar qual instrução ou diretiva entre as mostradas a 
seguir? Assinale a alternativa correta. 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito: A 
Comentário: As bibliotecas em C são importadas por meio da instrução ou diretivas #include, de 
forma que o programa possa acessar os comandos da biblioteca. O arquivo que cria a biblioteca 
deve estar no mesmo diretório do programa que o chama. A diretiva #include é seguida pelo nome 
do arquivo e o pré-processador da linguagem C a substitui pelo corpo do arquivo especificado. É 
como se o texto do arquivo incluído fizesse parte do código-fonte (unidade 14). 
 
A 
#include 
B 
uses 
C 
import 
D 
link 
 
Questão 9 : 
A árvore binária possui no máximo dois filhos para cada nó, ou seja, as árvores binárias possuem 
nós com grau menor ou igual a 2, isto é, nenhum nó possui mais que dois descendentes diretos, dois 
filhos. A figura a seguir apresenta uma árvore binária: 
 
Figura – Árvore binária com cinco elementos. 
Fonte: Elaborada pelo autor (2013). 
Com base na análise da árvore apresentada, é correto afirmar que: 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Gabarito: A árvore apresentada é binaria, pois todos os nós pais possuem no máximo dois filhos, o 
nó 10 é a raiz da árvore, o nó 08 é pai dos nós 04 e 09, que são folhas, assim como o nó 55. O pai 
do nó 55 é o nó 21, que, por sua vez, tem como pai o nó 10. Nenhum nó é maior que seus filhos e a 
altura da árvore é 2, que é o maior nível da árvore (unidade 33). 
 
A 
a árvore não possui raiz. 
B 
a árvore possui todos os nós pais maiores que seus filhos.C 
a árvore possui como raiz o nó 10, a altura da árvore é 2 e o nó 08 é pai do nó 04. 
D 
não se trata de uma árvore binária, pois o nó 21 tem apenas um filho, o nó 55. 
 
Questão 5 : 
Analise o código a seguir: 
 
Figura – Exemplo de código em linguagem C. 
Fonte: Elaborada pelo autor (2013). 
Qual o valor inteiro que representa o estado civil VIUVO? Assinale a alternativa correta. 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: Como vimos na unidade 9, um tipo enumeração em C pode ser representado por um 
termo (palavra) ou por um valor inteiro. Por definição, o primeiro valor do conjunto de enumeração 
é identificado pelo valor inteiro 0; o segundo pelo valor 1; e assim sucessivamente. Assim o valor 
CASADO valerá 0, o valor SOLTEIRO 1, VIUVO 2, DIVORCIADO 3 e OUTROS valerá 4. 
 
A 
0 
B 
1 
C 
2 
D 
3 
 
Questão 6 : 
Na árvore binária não balanceada, a busca por um determinado elemento pode ser realizada por 
qualquer um dos tipos de ordem de percurso, pré-fixada, central ou pós-fixada, pois, em todos os 
casos, será preciso percorrer toda a árvore binária para verificar se o valor desejado existe ou não na 
árvore, o que muda é a ordem de verificação dos nós. A figura a seguir representa uma árvore 
binária não balanceada: 
 
Para buscar o elemento K nessa árvore, utilizando a ordem de percurso central (E, R, D), assinale a 
alternativa que apresenta os elementos que serão visitados até localizar o elemento K: 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: Como o percurso central visita, primeiramente, o elemento da esquerda, depois o 
elemento da raiz e, por último, o elemento da direita, a ordem de visitação na árvore será: A, Z, M, 
K, P e L. Assim, para localizar o valor K, os elementos visitados serão: A, Z, M e K (unidade 46). 
 
A 
K. 
B 
Z, M, A, P, L e K. 
C 
A,Z,M e K. 
D 
Z, M, A e K. 
 
Questão 4 : 
Analise as sentenças a seguir sobre a lista encadeada. 
I – As listas encadeadas podem ser classificadas de acordo com o número de encadeamentos em 
simplesmente encadeadas ou duplamente encadeadas. 
II – As operações mais frequentes em listas são a busca, a inclusão e a remoção de um determinado 
elemento. 
III – A lista simplesmente encadeada possui dois ponteiros, um para o próximo elemento da lista e o 
outro para o elemento anterior da lista. 
IV – A lista duplamente encadeada possui apenas um ponteiro para o próximo da lista. 
Assinale a alternativa que apresenta as sentenças corretas. 
Resposta Errada! A resposta correta é a opção D 
Justificativa: 
Gabarito: D 
Comentário: As listas encadeadas podem ser simplesmente ou duplamente encadeadas: as listas 
simplesmente encadeadas possuem um único ponteiro para o próximo elemento da lista; já as listas 
duplamente encadeadas possuem dois ponteiros para o próximo e elemento anterior. As operações 
mais comuns na lista são a inserção (início, meio e final), remoção (início, meio e final) e a busca 
por um elemento. É possível, também, listar e alterar os dados de uma lista simplesmente encadeada 
(unidade 15). 
 
A 
I, III e IV 
B 
I, II e IV 
C 
I, II e III 
D 
I e II 
 
Questão 7 : 
Para remoção dos elementos de uma fila implementada na forma de um vetor, é preciso que todos 
os elementos, a partir da primeira posição, sejam trazidos uma posição para a esquerda, ou seja, sua 
posição atual será decrementada em 1. O algoritmo a seguir apresenta a lógica de remoção na fila 
como vetor: 
 
Algoritmo – Exercício 
 
Fonte: Elaborado pelo autor (2013). 
Observe que nas linhas 3, 4 e 6 estão faltando as instruções para que o algoritmo funcione 
corretamente. Assinale a sentença que preenche as lacunas na ordem correta e completa o 
algoritmo: 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: O laço puxa os elementos para a esquerda da fila, como se houvesse uma caminhada 
no sentido da saída da fila por parte dos seus integrantes, portanto, como a variável pi representa a 
posição para a próxima inserção, a variável deve percorrer desde a posição 0 até a posição de 
inserção -2, por isso < pi-1. Por exemplo, se a fila preencheu as posições 0, 1 e 2, a posição de 
inserção valerá 3, porém, as posições visitadas como comando de laço que puxa os elementos serão 
de 0 a (3-2), portanto: 0 e 1. Durante a execução do laço, a posição i receberá o valor da posição i+1 
da fila. Assim, a fila que preencheu as posições 0, 1 e 2, no laço que vai de 0 a 1, fará: posição 0 
recebe valor da posição 1, e posição 1 recebe valor da posição 2. Depois a posição pi é 
decrementada em 1, pois um elemento da fila saiu. A figura a seguir apresenta essa lógica (unidade 
30). 
 
Figura – Exercício 
Fonte: Elaborado pelo autor (2013). 
 
A 
 
B 
 
C 
 
D 
 
Questão 10 : 
Com base nos estudos, marque a única opção que preenche corretamente as lacunas com os termos 
que melhor definem a estrutura de dados. 
A estrutura de dados pode ser entendida como o ___________ de identificação e desenvolvimento 
de procedimentos, métodos e ________ que permitam a solução do problema de forma a utilizar o 
espaço de armazenamento de forma _______, com o tempo de processamento mais _______ e 
garantia de ________ das informações. 
Acertou! A resposta correta é a opção B 
Justificativa: 
Gabarito: B 
Comentário: A estrutura de dados pode ser entendida como o processo de identificação e 
desenvolvimento de procedimentos, métodos e técnicas que permitam a solução do problema de 
forma a utilizar o espaço de armazenamento de forma otimizada, com o tempo de processamento 
mais eficiente e garantia de integridade das informações. Esse processo está associado à abstração 
de dados, que é a análise do mundo real de forma a identificar quais as estruturas de dados que 
melhor se adaptam à solução do problema que será solucionado no computador. É a transferência do 
mundo real e suas regras de negócio para o mundo virtual (unidade 1) 
 
A 
Algoritmo, funções, automática, lento, processamento. 
B 
Processo, técnicas, otimizada, eficiente, integridade. 
C 
Algoritmo, técnicas, otimizada, eficiente, integridade. 
D 
Processo, funções, otimizada, eficiente, cópia. 
 
Questão 1 : 
Assinale a alternativa que corresponde à sintaxe correta usada para definir uma variável ponteiro em 
C. 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito: A 
Comentário: A definição, ou declaração de um ponteiro, tem como finalidade informar para a 
linguagem de programação que aquela variável guardará o endereço de uma variável e não o seu 
valor. Porém, sabendo o endereço da variável é possível “apontar” para ela e efetuar operações de 
gravação, alteração e consulta aos dados. Para declaração de uma variável do tipo ponteiro em C, é 
utilizado o símbolo de asterisco (*) antes do nome da variável e depois do tipo da variável (unidade 
6). 
 
A 
Tipo de dado, seguido de um asterisco e o nome da variável. 
B 
Tipo de dado, seguido da palavra pointer e o nome da variável. 
C 
Tipo de dado, seguido da palavra static e o nome da variável. 
D 
Tipo de dado, seguido da palavra dinamic e o nome da variável. 
 
Questão 1 : 
Com relação ao estudo sobre os Tipos Abstratos de Dados, analise as sentenças a seguir. 
I – Os tipos de dados básicos de uma linguagem são conhecidos como tipos primitivos e podem ser 
utilizados na definição dos TADs. 
II – Os Tipos Abstratos de Dados são estruturas de dados que representam dados que não foram 
previstos pela linguagem de programação. 
III – O TAD é composto pela definição da estrutura de dados e pela especificação das operações 
aplicáveis sobre eles. Essa representação é chamada de interface TAD, de forma que a utilização do 
tipo fica limitada ao acesso às operações, ocultando-se como foram implementadas. 
IV – O TAD não pode ser utilizado em diversasaplicações. 
Assinale a alternativa que apresenta as sentenças corretas: 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: Os Tipos Abstratos de Dados são estruturas de dados que representam dados que não 
foram previstos pela linguagem de programação e são divididas em duas partes (os dados e as 
operações). Já o conceito de abstrato no TAD se refere à forma pela qual o tipo foi implementado, o 
que deve ser esquecido, já que um TAD é descrito pela finalidade do tipo e de suas operações, e não 
pela forma que foi implementado, chamado de Interface do TAD. Um TAD pode ser formado por 
tipos primitivos ou outros TADs, e sua principal finalidade é a utilização em diversas aplicações, 
evitando a recodificação (unidade 13). 
 
A 
I, II e IV 
B 
I, III e IV 
C 
I, II e III 
D 
Todas 
Questão 2 : 
O algoritmo a seguir implementa as regras de inserção no final da lista duplamente encadeada. 
Preencha as lacunas das linhas 21, 22, 24, 26 e 27 com as instruções para que a operação seja 
executada corretamente: 
 
Marque a única opção correta: 
Resposta Errada! A resposta correta é a opção B 
Justificativa: 
Gabarito: B 
Comentário: Na inserção de um novo elemento, os ponteiros proximo e anterior devem ser 
inicializados com NULL (linhas 21 e 22). Se a lista estiver vazia (lista->primeiro == NULL), o 
descritor primeiro é inicializado com endereço do novo elemento (linha 24). Essa operação será 
realizada somente na primeira inserção na lista. Se a lista não estiver vazia, o novo elemento 
apontará como anterior para o último da lista (novo->anterior = lista->ultimo, linha 26) e o último 
da lista terá como próximo o novo elemento (lista->ultimo->proximo=novo, linha 27) (unidade 23). 
 
A 
 21 NULL; 
 22 NULL; 
 24 novo=lista->primeiro; 
 26 novo->anterior = lista->ultimo; 
 27 lista->ultimo->proximo=novo; 
 
 
B 
 
C 
 
D 
 
Questão 3 : 
Entre os esquemas a seguir, assinale a alternativa que representa corretamente uma lista 
simplesmente encadeada circular com um único elemento. 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: A lista simplesmente encadeada se caracteriza, primeiramente, por possuir elementos 
com um único ponteiro próximo e o que a determina como circular é o fato do último elemento 
 21 NULL; 
 22 NULL; 
 24 lista->ultimo=novo; 
 26 novo->proximo= lista->ultimo; 
 27 lista->ultimo->proximo=novo; 
 
 21 NULL; 
 22 NULL; 
 24 lista=novo; 
 26 novo = lista->ultimo; 
 27 ultimo->proximo=novo; 
 
 21 NULL; 
 22 NULL; 
 24 lista->primeiro=novo; 
 26 novo->anterior = lista->ultimo; 
 27 lista->ultimo->proximo=novo; 
 
apontar para o primeiro elemento da lista, porém não há um descritor último e apenas um descritor 
primeiro (unidade 18). 
 
A 
 
B 
 
C 
 
D 
 
 
Questão 3 : 
Suponha que o vetor x seja um vetor de inteiro, com seis posições e com os seguintes valores: 20, 
15, 21, 7, 9 e 2. A Figura a seguir apresenta um passo de ordenação crescente, ou seja, pega o maior 
valor e move este valor para a última posição do: 
 
Analisando a distribuição dos valores no vetor durante a ordenação, podemos concluir que se trata 
de que tipo de algoritmo? 
Assinale a alternativa correta: 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito: A 
Comentário: A cada processo de ordenação, os valores são comparados em pares, formados pelas 
posições i e i+1 do vetor, e caso os valores do par estejam fora de ordem os valores são invertidos e 
o maior valor é deslocado para o final do vetor. A cada processo pelo menos um valor do vetor 
estará ordenado, neste caso o valor 20. Essas características de ordenação representam o algoritmo 
de ordenação bubble sort (unidade 39). 
 
A 
Bubble Sort 
B 
Quick Sort 
C 
Linear 
D 
Recursividade 
 
Questão 6 : 
 Assinale a alternativa que representa corretamente o fluxo de execução de uma função, desde a sua 
chamada até o seu encerramento: 
Resposta Errada! A resposta correta é a opção B 
Justificativa: 
Gabarito: B 
Comentário: Uma função é executada quando no algoritmo que a chama é encontrada o nome da 
função, fazendo um desvio na execução para o bloco de instruções da função, executando-as até que 
a função se encerre e retornando para a próxima linha após a chamada da função, para que ela não 
seja chamada novamente (unidade 2). 
 
A 
A função é chamada pelo nome utilizado na sua declaração, fazendo um desvio para o bloco de 
dados com suas instruções, executando-as até o final, e após o encerramento da função retorna 
para a mesma linha no algoritmo principal que a chamou. 
B 
A função é chamada pelo nome utilizado na sua declaração, fazendo um desvio para o bloco de 
dados com suas instruções, executando-as até o final, e após o encerramento da função retorna 
para a próxima linha do algoritmo que a chamou. 
C 
A função é chamada pelo nome utilizado na sua declaração, fazendo um desvio para o bloco de 
dados com suas instruções, executando-as até o final, e após o encerramento da função retorna 
para o final do algoritmo que a chamou. 
D 
A função é chamada pelo nome utilizado na sua declaração, fazendo um desvio para o bloco de 
dados com suas instruções, executando-as até o final, e após o encerramento da função retorna 
para a o início da função, até que aconteça um overflow. 
 
Questão 7 : 
A implementação da fila na forma de um vetor se dá pelo uso de uma variável que representa a 
posição de inserção da fila, que a cada inserção é incrementada em 1, desde que a quantidade 
máxima de elementos na fila não tenha sido alcançada. Na remoção do elemento, a variável de 
controle da posição de inserção deve ser decrementada até chegar à posição 0, que é o início da fila. 
Com relação ao uso da variável de controle da posição de inserção na pilha como vetor, assinale a 
alternativa correta. 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: A posição de inserção deve começar valendo 0, que é a primeira posição do vetor e 
representa o início da fila. Se a fila for implementada em um vetor de cinco posições, o maior valor 
que a variável de posição de inserção armazenará será cinco, pois, quando a variável vale quatro, o 
novo elemento será inserido nessa posição e a posição de inserção será incrementada, valendo 
cinco. Como a quantidade máxima de elementos é cinco, não serão realizadas novas inserções até 
que uma remoção seja realizada. Caso isso aconteça, decrementará a variável de controle da posição 
de inserção para quatro. Toda remoção na fila sempre ocorre na posição 0 (unidade 30). 
 
A 
A variável deve ser inicializada com 1, para que a primeira inserção ocorra na posição 1 do 
vetor, o início da fila. 
B 
Se a fila for implementada em um vetor com cinco posições, o maior valor para a variável que 
controla a posição de inserção, quando toda a fila estiver preenchida, será quatro. 
C 
Para listar os elementos da fila, devem-se percorrer todas as posições do vetor, exceto a 
posição representada pela variável de posição de inserção, pois o valor da variável representa 
uma posição que ainda será utilizada. 
D 
A remoção na fila sempre retira o elemento que está na posição representada pela variável da 
posição de inserção. 
 
Questão 1 : 
Analise o código a seguir, em linguagem de programação C:. 
 
Figura – Exemplo de código em linguagem C. 
Fonte: Elaborada pelo autor (2013). 
Na execução desse programa, marque a opção que mostra o valor das variáveis v1 e v2, 
respectivamente, ao chamar a função main(). 
Resposta Errada! A resposta correta é a opção D 
Justificativa: 
Gabarito: D 
Comentário: A função implementa uma passagem de parâmetro por referência, conteúdo estudado 
na unidade 7, e seu objetivo é inverter os valores das variáveis de entrada. Ao ser executada, a 
função recebecomo parâmetros de entrada num1 valendo 10 e num2 valendo 20, vindo dos 
argumentos v1 e v2, respectivamente. A variável aux armazenará o valor de num1 (10), que, na 
linha 9 do código, receberá valor da variável num2 (20) – assim num1 valerá 20. Na linha 10, o 
valor da variável aux (10) é armazenado na variável num2. Dessa forma, teremos num1 valendo 20 
e num2 valendo 10. Após o encerramento da função, os argumentos v1 e v2 estarão atualizados com 
os valores dos parâmetros num1 e num2, respectivamente. 
 
A 
10 e 20 
B 
10 e 10 
C 
20 e 20 
D 
20 e 10 
 
Questão 7 : 
Analise com atenção o código a seguir. 
 
Considere que a lista possui os seguintes valores: 
 
Quanto estará valendo a variável x no final da execução da função xpto()? 
Assinale a alternativa correta. 
 
Resposta Errada! A resposta correta é a opção D 
Justificativa: 
Gabarito: D 
Comentário: A função xpto() implementa o algoritmo para localizar o maior valor da lista. A 
variável x começa valendo o valor do primeiro elemento da lista (20) e, posteriormente, é realizado 
um laço que começa do segundo elemento da lista e compara o valor de cada elemento com o valor 
da variável x. Se o valor da lista for maior do que o valor de s, a variável x é atualizada com o valor 
da lista (unidade 18). 
Teste de mesa: 
X P Próximo de P Valor de P 
20 E1 E2 20 
 E2 E3 19 
 E3 E4 18 
 E4 E5 44 
44 E5 E6 70 
70 E6 NULL 85 
85 NULL 
 
 
A 
20 
B 
70 
C 
44 
D 
85 
 
Questão 4 : 
Considere o vetor X, um vetor de inteiros com seis posições e preenchido com os valores 10, 18, 15, 
21, 4, 17. O método de ordenação quick sort possui como principal característica a ordenação do 
vetor em partes, tendo como referência um elemento chamado de pivô, que pode ser qualquer 
elemento já existente no vetor. O processo de ordenação consiste em procurar um elemento que 
esteja à esquerda do pivô e que seja maior ou igual ao valor do pivô, e achar à direita um valor 
menor ou igual ao valor do pivô, e depois efetuar a troca desses valores. Considerando que o pivô é 
o elemento da posição 2, isto é, o valor 15, assinale a alternativa que apresenta a primeira troca dos 
elementos do vetor: 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: Como o elemento pivô é o valor 15 na posição 2, à direita será pesquisado o primeiro 
valor menor que o 15, que é o valor 4, e à esquerda será pesquisado o primeiro valor maior que 15, 
que é o 18, logo, os valores 18 e 4 serão trocados, e o vetor ficará assim distribuído: 10, 4, 15, 21,18 
e 17 (unidade 41). 
 
A 
10 por 4 
B 
18 por 17 
C 
18 por 4 
D 
15 por 17 
 
Questão 5 : 
Marque a alternativa que aponta corretamente como é conhecida a alocação de memória que ocorre 
durante a execução de um programa. 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: O processo de alocação de memória antes da execução do programa é chamado de 
alocação estática. Na alocação dinâmica as variáveis são declaradas, porém, o espaço de memória 
será alocado durante a execução do programa por meio de instruções específicas por parte do 
programador, garantindo que ele possa alocar e liberar espaço de memória a qualquer momento 
(unidade 5). 
 
A 
Estática 
B 
Local 
C 
Dinâmica 
D 
Global 
 
Questão 5 : 
A figura a seguir representa uma árvore binária balanceada: 
 
Para buscar o elemento 12, assinale a alternativa que aponta quais elementos serão visitado na 
árvore: 
 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito: A 
Comentário: A busca em árvore binária balanceada começa a pesquisa pelo elemento da raiz, e, 
caso o valor seja o desejado, a busca se encerra. Nesse caso, como o valor da raiz, 15, não é igual a 
12, a busca continuará a partir do nó à esquerda da raiz, já que 12 é menor que 15. Na sequência da 
busca, será comparado o valor 8 com o valor 12, e, como não são iguais, a busca continua para 
direita, pois 12 é maior que 8. Na próxima comparação, o valor será localizado, pois o elemento à 
direita do 8 é o 12 (unidade 47). 
 
A 
15, 8 e 12. 
B 
12. 
C 
33, 55, 21,15, 8 e 12. 
D 
15 e 12. 
 
Questão 4 : 
Na inserção no final da lista circular duplamente encadeada, o primeiro elemento da lista e o último 
elemento da lista precisam ser ligados de forma a garantir a característica de processo cíclico da 
lista circular. Assinale a alternativa que apresenta corretamente as regras que representam a inserção 
no final da lista circular duplamente encadeada. 
Resposta Errada! A resposta correta é a opção D 
Justificativa: 
Gabarito: D 
Comentário: Para que o processo cíclico seja mantido, o último deve apontar para o primeiro da 
lista, o que caracteriza a lista circular como uma lista sem “último”. Mas como se trata de uma lista 
duplamente encadeada, a cada inserção é preciso gerenciar os dois descritores de cada nó, o anterior 
e o próximo. Assim, o novo elemento da lista deve ter como anterior o nó que era o último da lista, 
e o último deve apontar como próximo para o novo elemento. Isso garante que o último e o novo 
estejam duplamente ligados, porém o processo cíclico não foi garantido. Para tanto, o novo deve 
apontar como próximo para o primeiro e o primeiro apontar como anterior para o último. Por fim, 
como se trata de uma inserção no final, o novo elemento deve ser setado como último da lista 
(unidade 25). 
 
A 
Apenas o novo elemento deve apontar como próximo para o primeiro. Depois, o novo 
elemento passa a ser o último da lista. 
B 
Apenas o primeiro deve apontar como anterior para o novo elemento. Depois, o novo elemento 
passa a ser o último da lista. 
C 
O novo elemento deve apontar como anterior para o último e o último deve apontar como 
próximo para o novo. Depois, o novo elemento passa a ser o último da lista. 
D 
O novo elemento deve apontar como anterior para o último e o último deve apontar como 
próximo para o novo. O novo deve apontar como próximo para o primeiro e o primeiro apontar 
como anterior para o novo elemento. Depois, o novo elemento passa a ser o último da lista. 
 
Questão 6 : 
. O algoritmo a seguir apresenta a função para listagem dos valores de uma fila que recebe como 
parâmetro a referência para a fila que será manipulada e o código do pedido a ser pesquisado: 
Algoritmo – Exercício 
01 void listar(FilaPedidos* pedidos, int codigo){ 
02 No* item = pedidos->inicio; 
03 while((item != NULL) && (item->numeropedido != codigo)){ 
04 printf("Pedido Numero:%d \n",item->numeropedido); 
05 item = item->proximo; 
06 } 
07 system("PAUSE"); 
08 } 
Fonte: Elaborado pelo autor (2013). 
Supondo que a referência da fila de pedidos aponte para a fila com os seguintes números de 
pedidos: 
 
E seja informado o pedido com o código 2 como valor a ser pesquisado nesta fila, assinale a 
alternativa que aponta os dados mostrados na tela: 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito: A 
Comentário: A fila começará a pesquisa a partir do primeiro elemento, que é 8. Como o endereço 
deste elemento, armazenado na variável item, é diferente de NULL e o número de pedido 8 é 
diferente de 2 (código pesquisado), o valor 8 será mostrado na tela e o item será atualizado para seu 
próximo, portanto apontando para o próximo elemento que é 1. Como este item (1) não é NULL e o 
número do pedido armazenado em item é diferente de 2, o valor 1 será mostrado na tela; em 
seguida, item valerá o endereço do próximo, o endereço do valor 7, que não é NULL e tem o 
número do pedido diferente de 2. Logo, o valor 7 será mostrado na tela. Após mostrar o valor 7, o 
item valerá o endereço do próximo, o endereço do valor 3, que não é NULL e tem o número do 
pedido diferente de 2, portanto o valor 3 será mostrado na tela, e em seguida item valerá o endereço 
do valor 4, que não é NULLe seu número de pedido não vale 2. Então, o valor 4 é mostrado na tela 
e em seguida item valerá o endereço do valor 9, que não é NULL e não possui número de pedido 
que vale 2, portanto o valor 9 será mostrado na tela e item valerá o próximo de 9, que é NULL. 
Assim, no retorno do laço while a condição (item != NULL) será falsa e o laço será encerrado, 
terminando a execução da função, mas como o valor 2 não existe na fila, todos os elementos serão 
listados. 
 
A 
8, 1, 7, 3, 4 e 9 
B 
8, 1, 7, 3 
C 
Nenhum valor será mostrado na tela. 
D 
8, 7, 4 e 9 
 
Questão 8 : 
Analise o código a seguir: 
 
Figura – Exemplo de código em linguagem C. 
Fonte: Elaborada pela autora (2013). 
Qual a instrução que deve ser inserida na linha 18 do código para que sejam listados os elementos 
C, E e G da diagonal secundária da matriz? Marque a opção correta. 
Resposta Errada! A resposta correta é a opção D 
Justificativa: 
Gabarito: D 
Comentário: Os elementos da diagonal secundária da matriz são os elementos das posições: [0,2], 
[1,1], [2,0]. Assim, os elementos são gerados pelas posições [i][3-i-1], em que 3 representa o 
número de colunas da matriz. Esse conteúdo foi estudado na unidade 12. 
 
A 
printf("%c ", matriz[3-i-1][3-i-1]); 
B 
printf("%c ", matriz[i][i]); 
C 
printf("%c ", matriz[3-1-i][i]); 
D 
printf("%c ", matriz[i][3-i-1]); 
 
Questão 9 : 
Com base nos estudos da estrutura de dados vetor, marque com V (para verdadeiro) e F (para 
falso): 
I – O vetor permite criar uma variável dividida em inúmeras posições, todas do mesmo tipo de 
dados. 
II – O vetor em C sempre começa da posição 1 e termina na posição tamanho -1. 
III – Um vetor de 10 posições terá 10 endereços de memória. 
IV – O vetor é um típico exemplo de alocação de memória dinâmica. 
Assinale a única opção correta. 
Resposta Errada! A resposta correta é a opção B 
Justificativa: 
Gabarito: B 
Comentário: O vetor permite criar uma variável dividida em inúmeras posições, todas do mesmo 
tipo de dados. O vetor em C sempre começa na posição 0 e se encerra na posição do tamanho -1. 
Um vetor é uma estrutura de dados com várias posições, indexadas, mas com um único endereço de 
memória. O vetor é o típico exemplo de alocação estática, pois uma vez alocada, o bloco de 
memória não poder ser gerenciado (unidade 4). 
 
A 
V – V – F – F 
B 
V – F – F – F 
C 
F – F – F – F 
D 
V – V – V – V 
 
Questão 5 : 
A árvore binária possui como características a existência de no máximo dois nós filhos para cada nó 
da árvore e o armazenamento dos valores maiores sempre à direita do nó pai e dos valores menores, 
à esquerda do nó pai. Assim, para localizar o maior valor da árvore, devem-se percorrer todos os 
nós da árvore a partir do nó raiz até que se chegue ao nó mais à direita na árvore. Assinale a 
alternativa que mostra o algoritmo que representa corretamente a busca pelo maior valor na árvore 
binária: 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito: A 
Comentário: Para localizar o maior valor da árvore binária é preciso verificar se o nó visitado 
(árvore) possui elemento à direita. Caso não exista um elemento à direita, o valor do nó visitado 
corresponde ao maior valor da árvore, portanto deve ser retornado (return arvore->valor;). Caso 
contrário, recursivamente, deve-se descer à direita na árvore, por isso a chamada recursiva é 
acharMaior(arvore->dir). Dessa forma, a cada interação da função acharMaior(), é possível 
caminhar na árvore até que se chegue ao elemento mais à direita, consequentemente, o maior valor 
da árvore (unidade 37). 
 
A 
 
B 
 
C 
 
D 
 
Questão 6 : 
A busca na lista duplamente encadeada pode ser realizada em dois sentidos, do primeiro para o 
último e do último para o primeiro, sem a necessidade de mudanças na estrutura da lista. Com base 
nessa definição, avalie as afirmativas a seguir e marque a única sentença correta com relação às 
regras para a pesquisa no sentido do primeiro para o último elemento da lista. 
Resposta Errada! A resposta correta é a opção C 
Justificativa: 
Gabarito: C 
Comentário: Para percorrer a lista duplamente encadeada no sentido do primeiro para o último 
elemento, o ponteiro que percorrerá a lista deve começar do endereço do primeiro elemento e, por 
meio do ponteiro próximo de cada elemento, passar para o elemento próximo, até que esse ponteiro 
tenha como valor NULL. Pois quando o ponteiro estiver no último elemento, ele será mudado para 
o posterior do último que vale NULL, indicando que a lista terminou e a busca pode ser encerrada 
(unidade 22). 
 
 
A 
Para uma busca no sentido primeiro à último, o ponteiro que percorrerá todos os elementos 
da lista deve iniciar com o endereço do descritor primeiro e, por meio do ponteiro anterior 
de cada elemento visitado, chegar até NULL (próximo do último). 
B 
Para uma busca no sentido primeiro à último, o ponteiro que percorrerá todos os elementos 
da lista deve iniciar com o endereço do descritor último e, por meio do ponteiro anterior de 
cada elemento visitado, chegar até NULL (anterior do primeiro). 
C 
Para uma busca no sentido primeiro à último, o ponteiro que percorrerá todos os elementos 
da lista deve iniciar com o endereço do descritor primeiro e, por meio do ponteiro próximo 
de cada elemento visitado, chegar até NULL (próximo do último). 
D 
Para uma busca no sentido primeiro à último, o ponteiro que percorrerá todos os elementos 
da lista deve iniciar com o endereço do descritor último e, por meio do ponteiro próximo de 
cada elemento visitado, chegar até NULL (próximo do último). 
Questão 7 : 
A estrutura de dados fila é conhecida como estrutura FIFO – first in, first out, do inglês, primeiro a 
entrar, primeiro a sair. Para que essa característica seja mantida, assinale a alternativa que apresenta 
corretamente as operações possíveis em uma fila. 
Resposta Errada! A resposta correta é a opção D 
Justificativa: 
Gabarito: D 
Comentário: Independentemente do tipo de fila que será utilizado, lista ou vetor, a estrutura de 
dados fila visa garantir a prioridade de chegada, ou seja: quem chega mais cedo é atendido primeiro. 
Portanto, não é permitida a inserção de elementos que não no final da fila e muito menos a remoção 
que não no início da fila (unidade 29). 
 
A 
Inserir em qualquer posição e remover de qualquer posição. 
B 
Inserir no topo e remover da base. 
C 
Inserir no início da fila e remover do final da fila. 
D 
Inserir no final da fila e remover do início da fila. 
Questão 8 : 
Com base nos estudos da estrutura de dados vetor, marque com V (para verdadeiro) e F (para 
falso): 
I – O vetor permite criar uma variável dividida em inúmeras posições, todas do mesmo tipo de 
dados. 
II – O vetor em C sempre começa da posição 1 e termina na posição tamanho -1. 
III – Um vetor de 10 posições terá 10 endereços de memória. 
IV – O vetor é um típico exemplo de alocação de memória dinâmica. 
Assinale a única opção correta. 
Resposta Errada! A resposta correta é a opção B 
Justificativa: 
Gabarito: B 
Comentário: O vetor permite criar uma variável dividida em inúmeras posições, todas do mesmo 
tipo de dados. O vetor em C sempre começa na posição 0 e se encerra na posição do tamanho -1. 
Um vetor é uma estrutura de dados com várias posições, indexadas, mas com um único endereço de 
memória. O vetor é o típico exemplo de alocação estática, pois uma vez alocada, o bloco de 
memória não poder ser gerenciado (unidade 4). 
 
A 
V – V – F – F 
B 
V – F – F – F 
C 
F – F – F – F 
D 
V – V – V – V 
Questão 9 : 
Há três formas de se percorrer os nós das árvores binárias e listar os elementos armazenados em 
cada nó: pré-fixado, central e pós-fixado. Cada uma dessas formas possui uma sequência da ordem 
de visita dos elementos raiz (R), esquerda (E) e direita (D), e que são visitados recursivamente. O 
algoritmo a seguir apresenta umafunção para percorrer os elementos da árvore binária: 
Algoritmo – Exercício 
01 void percorrer(ArvoreBinaria no){ 
02 if (no != NULL){ 
03 if (no->esq != NULL) percorrer (no->esq); 
04 if (no->dir != NULL) percorrer (no->dir); 
05 printf(%d\n,no->valor); 
06 } 
07 } 
Fonte: Elaborado pelo autor (2013). 
Este algoritmo corresponde ao percurso do tipo: 
Resposta Errada! A resposta correta é a opção B 
Justificativa: 
Gabarito: B 
Comentário: A forma de percurso pré-fixado é R(raiz), E (esquerda) e D (direita). Já o percurso 
central tem como ordem de visita dos nós E (esquerda), R (raiz) e D (direita). Por fim, o percurso 
pós-fixado tem como sequência E (esquerda), D (direita) e R (raiz). Como no algoritmo a ordem de 
visita do nó é percorrer (no->esq), depois percorrer (no->dir) e por fim printf("%d\n",no->valor), se 
trata portanto do percurso pós-fixado (unidade 35). 
 
A 
pós-central 
B 
pós-fixado 
C 
pré-fixado 
D 
central 
Questão 10 : 
O código a seguir apresenta a implementação da busca binária em C, que possui, como regra, 
verificar se a posição do meio do segmento tem o valor desejado. Em caso negativo e se o valor do 
meio for maior que o valor pesquisado, a busca continua nos elementos anteriores ao meio; caso 
contrário, a busca continua dos elementos posteriores ao meio. Com base nessa regra, complete as 
lacunas do algoritmo a seguir: 
 
Algoritmo – Implementação da busca binária em C 
01 int pesquisa_binaria(int vetor[],int pi,int pf,int chave){ 
02 if (pi > pf) return 0; 
03 int meio = (pi+pf) / 2; 
04 if (vetor[meio] == chave){ 
05 return 1; //achou 
06 } 
07 else{ 
08 if(vetor[meio] > chave){ 
09 return pesquisa_binaria(vetor,0,______, chave); 
10 }else{ 
11 return pesquisa_binaria(vetor,______,pf,chave); 
12 } 
13 } 
14 } 
Fonte: Elaborado pelo autor (2013). 
 
Assinale a alternativa correta. 
 
Resposta Errada! A resposta correta é a opção B 
Justificativa: 
Gabarito: B 
Comentário: O algoritmo verifica se o valor da posição do meio do vetor é igual ao valor 
pesquisado (chave); se sim, a função retornará 1 (verdadeiro); caso contrário, se o valor do meio do 
vetor for maior que o valor procurado recursivamente, a função pesquisa_binária será chamada na 
linha 9 para pesquisar os elementos anteriores ao meio do vetor – por isso, meio-1, caso contrário, 
se o valor do meio do vetor é menor que o valor procurado, a função pesquisa_binária será 
chamada, recursivamente, na linha 11, para pesquisar os elementos posteriores ao meio do vetor, 
por isso, meio +1 (unidade 45). 
 
A 
meio+1, meio-1. 
B 
meio-1, meio+1. 
C 
meio, meio. 
D 
pf,pi. 
 
Questão 2 : 
A Figura a seguir representa uma árvore binária balanceada: 
 
Assinale a alternativa que apresenta como a árvore ficará organizada após a inserção do valor 1: 
 
Acertou! A resposta correta é a opção A 
Justificativa: 
Gabarito: A 
Comentário: Para inserção do valor 1, a primeira verificação será com relação ao valor da raiz, que 
é 10. Como 1 é menor que 10, o valor 1 deve ser inserido à esquerda do valor 10. Como a posição à 
esquerda já possui o valor 5, é preciso comparar o valor 5 com 1, e, como o valor 1 é menor, ele 
será inserido à esquerda do valor 5. Como a posição à esquerda do 5 possui o valor 4, esse valor 
será comparado ao valor 1. Como o valor 1 é menor e a posição à esquerda do 4 está livre, o valor 1 
será inserido à esquerda do valor 4 (unidade 46). 
 
A 
 
B 
 
C 
 
D

Continue navegando

Outros materiais