Prévia do material em texto
Prova Impressa
GABARITO | Avaliação I - Individual (Cod.:983361)
Peso da Avaliação 2,00
Prova 90949070
Qtd. de Questões 10
Acertos/Erros 10/0
Nota 10,00
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 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 I, II e III.
B II, apenas.
C III, apenas.
D I e III, apenas.
E II e III, apenas.
2
15/11/2024, 19:34 Avaliação I - Individual
about:blank 2/8
Após estudar ponteiros, é possível criarmos estruturas que aumentam ou diminuem conforme a
necessidade. Esse é o caso de listas encadeadas, que podem ser tratadas em diversas formas, por
exemplo como pilha, fila, duplamente encadeada, circulares e assim por diante. Com base em seus
estudos, observe o trecho de código a seguir:
01 - void nomeDaFuncao(struct ptr_no *lista, int dado){
02 - struct ptr_no *atual;
03 - atual = (struct ptr_no*) malloc(sizeof(struct ptr_no));
04 - while((lista->dado != dado)){
05 - if(lista->proximo == NULL){
06 - break;
07 - }
08 - atual = lista;
09 - lista = lista->proximo;
10 - }
11 - if(lista->dado == dado){
12 - atual->proximo = lista->proximo;
13 - }
14 - }
Considere que, durante a invocação da referida função, o parâmetro lista recebe um ponteiro que
aponta para o primeiro elemento da estrutura de dados. Ainda, leve em consideração que a struct
ptr_no possui dois campos, a saber: dado, do tipo inteiro; e proximo, um ponteiro do tipo struct
ptr_no. Assinale a alternativa correta que descreve a funcionalidade executada pela função
apresentada:
A Insere um item na lista encadeada.
B Remove um item da pilha.
C Remove um item da fila.
D Insere um item da fila.
E Remove um item da lista encadeada.
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.
3
4
15/11/2024, 19:34 Avaliação I - Individual
about:blank 3/8
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 A asserção I é uma proposição falsa e a II é uma proposição verdadeira.
B As asserções I e II são falsas.
C A asserção I é uma proposição verdadeira e a II é uma proposição falsa.
D As asserções I e II são verdadeiras, e a II é uma justificativa correta da I.
E As asserções I e II são verdadeiras, mas a II não é uma justificativa correta da I.
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 As asserções I e II são falsas.
5
15/11/2024, 19:34 Avaliação I - Individual
about:blank 4/8
B As asserções I e II são verdadeiras, mas a II não é uma justificativa correta da I.
C A asserção I é uma proposição falsa e a II é uma proposição verdadeira.
D As asserções I e II são verdadeiras, e a II é uma justificativa correta da I.
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.
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 Armazena o valor de uma variável e sua posição no vetor.
B É o recurso mais utilizado por programadores iniciantes.
C Armazena o endereço de uma posição de memória.
D Não pode ser utilizado como parâmetro de uma função.
E Permite apenas alocação dinâmica de memória.
Um programador criou uma lista dinâmica com base na estrutura apresentada a seguir:
struct no {
int dado;
struct no *proximo;
};
struct lista{
struct no *inicio;
}
6
7
15/11/2024, 19:34 Avaliação I - Individual
about:blank 5/8
struct lista l;
O programador criou um programa para percorrer toda a lista, fazendo com que um ponteiro ptr,
iterador, seja inicializado em l->inicio e incrementado até atingir o final da respectiva lista. No
critério de parada da estrutura de repetição utilizada para percorrer a lista, o programador deve esperar
que ptr->proximo seja igual a que valor ou identificar o final da lista como?
A l->final.
B '\0'.
C END.
D Nulo.
E NULL.
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 é 5; ptr_xi é 5; *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.
C xi é 5; xy é 12; *ptr_xi é 12; ptr_xi é um valor que representa o endereço de memória.
8
15/11/2024, 19:34 Avaliação I - Individual
about:blank 6/8
D xi é 12; xy é 5; *ptr_xi é 12; ptr_xi é um valor que representa o endereço de memória.
E xi é 12; xy é 12; ptr_xi é 12; *ptr_xi é um valor que representa o endereço de memória.
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.
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, III e IV, apenas.
B II, apenas.
C I e III, apenas.
D I, II e III, apenas.
E II e IV, apenas.
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.
9
10
15/11/2024, 19:34 Avaliação I - Individual
about:blank 7/8
Fonte: adaptado de: DROZDEK, A. Estrutura de dados e algoritmos em C++. 2. ed. São Paulo:
Cengage Learning, 2016.
A respeito de tais estruturas de dados, assinale a alternativa correta:
A A função de desempilhar retira da pilha sempre o último elemento, a não ser que um índice seja
indicado por parâmetro.
B A função de desempilhar retira da pilha sempre o primeiro elemento, a não ser que um índice
seja indicado por parâmetro.
C As filas e pilhas podem armazenar dados do mesmo tipo, mudando apenas as regras para
implementar suas respectivas funções de inserção e remoção de elementos.
D As pilhas são estruturas homogêneas, de acesso direto, onde podemos armazenar elementos de
tipos diferentes, sem uma ordem especificada.
E 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.
Imprimir
15/11/2024, 19:34 Avaliação I - Individual
about:blank 8/8