Buscar

Prova Online Estrutura dados ESAB

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

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: 
data-cke-saved-src=/media/images/sdfasdasfa.PNG
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 tipo No. 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 todos esses 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. 
data-cke-saved-src=/media/images/Capturarabt4wt4bt4bt4bt4bt4tb4b4b4b4b4b4.PNG
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ção na 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:
data-cke-saved-src=/media/images/wefewfefefefefefefefe.PNG
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:
data-cke-saved-src=/media/images/cacafkajfnwgilaerghargrgrgrgrgr.PNG
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:
data-cke-saved-src=/media/images/159159159159159159159.PNG
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 diversas aplicaçõ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
	
		 
	21
	NULL;
	 
	22
	NULL;
	 
	24
	lista->primeiro=novo;
	 
	26
	novo->anterior = lista->ultimo;
	 
	27
	lista->ultimo->proximo=novo;
 
	C
	
		 
	21
	NULL;
	 
	22
	NULL;
	 
	24
	lista->ultimo=novo;
	 
	26
	novo->proximo= lista->ultimo;
	 
	27
	lista->ultimo->proximo=novo;
 
	D
	
		 
	21
	NULL;
	 
	22
	NULL;
	 
	24
	lista=novo;
	 
	26
	novo = lista->ultimo;
	 
	27
	ultimo->proximo=novo;
 
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 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:
data-cke-saved-src=/media/images/ngngngngngngngn.PNG
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 recebe como 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.
data-cke-saved-src=/media/images/Capturarfaeeeeeeeeeeeerrrrrrrrrrrrreeeeeeeeeeee.PNG
Considere que a lista possui os seguintes valores:
data-cke-saved-src=/media/images/Capturarhthththhhhhhhhhhhhhhhhhhh.PNG
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:
data-cke-saved-src=/media/images/pratutotototototototottoo.PNG
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 é NULL e 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 uma funçã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

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando