Prévia do material em texto
Prova Impressa
GABARITO | Avaliação I - Individual (Cod.:983361)
Peso da Avaliação 2,00
Prova 91620616
Qtd. de Questões 10
Acertos/Erros 10/0
Nota 10,00
Pode-se imaginar uma pilha ou fila nas quais seus elementos contivessem, além do dado armazenado,
o endereço de referência para o próximo elemento. Para a estrutura de dados que se organiza dessa
maneira, dá-se o nome de lista encadeada.
Fonte: adaptado de: DROZDEK, A. Estrutura de dados e algoritmos em C++. 2. ed. São Paulo:
Cengage Learning, 2016.
Sobre a implementação de listas, avalie as asserções a seguir e a relação proposta entre elas:
I. A utilização de estruturas de dados que podem utilizar alocação dinâmica de memória, como as
listas duplamente encadeadas, mostra-se vantajosa, principalmente por evitar desperdício de memória.
PORQUE
II. A memória física de um computador é como um grande vetor estático, que pode ser vasculhado à
procura de posições livres para se realizar alocação de memória em tempo de compilação.
A respeito dessas asserções, assinale a opção correta:
A A asserção I é uma proposição falsa e a II é uma proposição verdadeira.
B As asserções I e II são verdadeiras, mas a II não é uma justificativa correta da I.
C As asserções I e II são verdadeiras, e a II é uma justificativa correta da I.
D As asserções I e II são falsas.
E A asserção I é uma proposição verdadeira e a II é uma proposição falsa.
Os ponteiros estão entre as estruturas de dados mais importantes das linguagens de programação, pois
graças a eles é possível fazer alocação dinâmica de memória e utilizar estruturas de dados mais
complexas.
VOLTAR
A+ Alterar modo de visualização
1
2
Fonte: adaptado de: DROZDEK, A. Estrutura de dados e algoritmos em C++. 2. ed. São Paulo:
Cengage Learning, 2016.
Sobre ponteiros, assinale a alternativa correta:
A Permite apenas alocação dinâmica de memória.
B Armazena o endereço de uma posição de memória.
C Não pode ser utilizado como parâmetro de uma função.
D Armazena o valor de uma variável e sua posição no vetor.
E É o recurso mais utilizado por programadores iniciantes.
Considere o seguinte cenário:
Você está visitando um médico para um check-up. Há muitas pessoas na clínica. Uma senhora está
digitando os nomes de todas as pessoas em um arquivo. A pessoa que chegar mais cedo será atendida
primeiro. Quando o médico está livre, ele chama o próximo paciente na sequência de chegada.
Sobre o exposto, avalie as asserções a seguir e a relação proposta entre elas:
I. O cenário representa a estrutura Fila porque segue o método primeiro que entra é o primeiro que
sai.
PORQUE
II. Em uma fila, adicionamos elementos na parte de trás e os removemos na frente.
A respeito dessas asserções, assinale a opção correta:
A As asserções I e II são falsas.
B As asserções I e II são verdadeiras, mas a II não é uma justificativa correta da I.
3
C A asserção I é uma proposição falsa e a II é uma proposição verdadeira.
D A asserção I é uma proposição verdadeira e a II é uma proposição falsa.
E As asserções I e II são verdadeiras, e a II é uma justificativa correta da I.
Tanto a fila como a pilha são conjuntos ordenados de itens, porém ambas se diferenciam pelas regras
de entrada e saída. Na pilha, a entrada e a saída de dados se dão pela mesma extremidade, chamada de
topo da pilha. Na fila, a entrada e a saída ocorrem em lugares opostos: a entrada acontece no final da
fila e a saída no seu início. No caso de uma variável simples, a princípio, armazena-se apenas uma
informação de um determinado tipo. Para armazenar mais de um elemento em uma variável, podemos
usar estruturas homogêneas ou heterogêneas.
Fonte: adaptado de: DROZDEK, A. Estrutura de dados e algoritmos em C++. 2. ed. São Paulo:
Cengage Learning, 2016.
A respeito das estruturas de dados mencionadas, assinale a alternativa correta:
A As filas e pilhas podem armazenar elementos de um mesmo tipo, mudando apenas as funções de
inclusão e remoção das filas para as pilhas.
B A função de desempilhar retira da pilha sempre o último elemento, a não ser que um índice seja
indicado por parâmetro.
C A função de desempilhar retira da pilha sempre o primeiro elemento, a não ser que um índice
seja indicado por parâmetro.
D Os registros são estruturas de dados para armazenamento heterogêneo, que possuem os dados a
serem armazenados e um ponteiro para o próximo elemento.
E As pilhas são estruturas homogêneas, de acesso direto, onde podemos armazenar apenas
elementos de tipos diferentes, sem uma ordem predeterminada.
A Pilha é uma das estruturas mais simples e mais versáteis dentre as utilizadas na computação. Pode-
se imaginar uma pilha de tijolos, uma pilha de roupas, de pratos. Todavia, suas aplicações
computacionais variam desde as chamadas recursivas até a manipulação de dados em memória
principal.
4
5
Considere o código a seguir, cujo propósito seria o de remover um elemento na posição que demarca
o topo da pilha:
01 - void pilha_remover(struct str_no pilha){
02 - struct str_no atual;
03 - atual = (struct str_no*) malloc(sizeof(struct str_no));
04 - while(pilha->proximo != NULL){
05 - atual = pilha;
06 - pilha = pilha->proximo;
07 - }
08 - atual->proximo = NULL;
09 - }
Com base no código-fonte apresentado, analise as afirmativas a seguir:
I. Os comandos compreendidos entre as linhas 4, 5, 6 e 7 são para percorrer a lista do início ao fim.
II. A função tenta realizar a remoção de um elemento sem a preocupação de liberar memória.
III. O funcionamento desse algoritmo permaneceria inalterado caso o comando da linha 3 fosse
removido.
É correto o que se afirma em:
A III, apenas.
B II, apenas.
C I, II e III.
D I e III, apenas.
E II e III, apenas.
Lista ligada, ou lista encadeada, é uma estrutura de dados linear e dinâmica. Ela é composta por uma
sequência de nós que contém seus dados e também uma ou duas referências, ponteiros, que apontam
para o nó anterior ou posterior. Há diversos modelos de lista ligadas como lista encadeada, listas
duplamente encadeada e listas encadeadas circulares.
Com base no texto exposto, analise as afirmativas a seguir:
I. O processo de remoção de uma lista encadeada é simples, basta acessar a posição do vetor e inserir
um valor vazio.
6
II. A lista duplamente encadeada é uma estrutura de dados na qual cada nó possui pelo menos três
campos: um de dados e dois de endereço, sendo um dos endereços usado para apontar ao nó anterior e
o outro aponta para o nó posterior (próximo nó).
III. O vetor estático, caso seja necessário aumentar o seu tamanho, basta alocar (adicionar) espaço no
vetor.
IV. Os itens na lista são chamados de nó e contêm pelo menos dois elementos: um de dados e um de
endereço. O campo de endereço contém o conteúdo do elemento armazenado na lista, já o campo de
dados é um ponteiro para o próximo nó.
É correto o que se afirma em:
A II e IV, apenas.
B I, II e III, apenas.
C II, apenas.
D II, III e IV, apenas.
E I e III, apenas.
Ao trabalhar com ponteiros, o desenvolvedor tem a possibilidade de realizar acessos a endereços de
memória arbitrários. Além disso, ela permite, ainda, que você monitore endereços na memória,
atribua e recupere valores de variáveis sem ao menos invocá-las diretamente.
Dessa forma, analise o trecho de código a seguir:
int xi;
int xy;
int *ptr_xi;
xi = 5;
xy = xi;
ptr_xi = & xi;
xi = 12;
Assinale a alternativa correta que apresenta o valor de cada uma das variáveis após a execução do
código:
A xi é 12; xy é 12; *ptr_xi é 12; ptr_xi é um valor que representa o endereço de memória.
B xi é 12; xy é 12; ptr_xi é 12; *ptr_xi é um valor que representa o endereço de memória.
7
C xi é 5; xy é 12; *ptr_xi é 12; ptr_xi é um valor que representa o endereço de memória.
D xi é 12; xy é 5; ptr_xi é 5; *ptr_xi é um valor que representa o endereço de memória.
E xi é 12; xy é 5; *ptr_xi é 12; ptr_xi é um valor que representa o endereço de memória.
Analise o trecho de código apresentado:
01 - struct no{
02 - int dado;
03 - struct no *proximo;
04 - };
05 -
06 - typedef no *ptr_no;
07 -
08 - ptr_no lista;
09 -
10 - void lista_operacao(ptr_no lista, int valor){
11 - while(lista->proximo != NULL){
12 - lista = lista->proximo;
13 - }
14 - lista->proximo = (ptr_no) malloc(sizeof(no));
15 - lista = lista->proximo;
16 - lista->dado = valor;
17 - lista->proximo = NULL;
18 - }
Assinale a alternativa correta com relação ao objetivo da função lista_operacao():
A Inserir um nó no final da lista.
B Inserir dois nós no inicio da lista.
C Remover o último nó da lista.
D Inserir um nó no início da lista.
E Remover o primeiro nó da lista.
8
A Pilha é uma das estruturas mais simples e mais versáteis dentre as utilizadas na computação. Antes
de entrar nas nuances técnicas sobre pilhas, vamos abstrair o seu conceito para uma situação real.
Fonte: adaptado de: DROZDEK, A. Estrutura de dados e algoritmos em C++. 2. ed. São Paulo:
Cengage Learning, 2016.
As funções de desempilhar e de empilhar são comumente chamadas de pop() e push(),
respectivamente. Considere a seguinte pilha de números inteiros:
PILHA:
INÍCIO -> 5, 2, 15, 3, 9, 8, 4, 12, 10, 7, 1, 11