Baixe o app para aproveitar ainda mais
Prévia do material em texto
Aluno: Matr.: Disc.: ESTRUTURA DE DADOS 2020.1 (G) / EX Prezado (a) Aluno(a), Você fará agora seu TESTE DE CONHECIMENTO! Lembre-se que este exercício é opcional, mas não valerá ponto para sua avaliação. O mesmo será composto de questões de múltipla escolha. Após responde cada questão, você terá acesso ao gabarito comentado e/ou à explicação da mesma. Aproveite para se familiarizar com este modelo de questões que será usado na sua AV e AVS. 1. Sou uma empresária que quer crescer e por isso, tenho que aumentar progressivamente a minha lista de clientes, sem limitar este crescimento. Assim, à medida que novos clientes são cadastrados, posso, se necessário, contratar mais e mais empregados. Marque a opção que especifica o tipo de lista e o tipo de alocação de memória mais adequados para este problema. pilha dinâmica e alocação dinâmica de memória fila dinâmica e alocação dinâmica de memória lista sequencial e alocação dinâmica de memória fila encadeada e alocação dinâmica de memória lista encadeada e alocação dinâmica de memória Gabarito Coment. 2. Marque a afirmativa que represente uma separação. Consiste em dividir a lista em duas outras listas. A quantidade de nós que cada lista terá, depende da necessidade. Alterar a ordem dos dados da lista do final para o início, atualizando a lista. Organizar os dados da lista em ordem crescente ou decrescente. Juntar duas listas, colocando uma lista no final de outra, obtendo, ao final, uma só lista resultante. Intercalar a ordem dos dados da lista do final para o início, atualizando a lista. Gabarito Coment. 3. Dr. Pei Tam possui uma lista não ordenada de pacientes de seu consultório em que registra apenas o nome endereço e o telefone de cada paciente. Como não há limites para o crescimento de sua lista, como se pode implementar a inserção de um novo paciente na lista, sabendo que cada paciente é do tipo Paciente e a lista é do tipo List assim definidos : struct Paciente { long int matricula; string nome, endereco e tel; }; struct List { Paciente p; struct List *link; }; List * inserePac(List *i, Paciente pt){ List *novo ; novo->p = pt; novo->link = i; return novo; } List * inserePac(List *i, Paciente pt) { List *novo = new List; novo->p = pt; novo->link =i; return novo; } List * inserePac(List *i, Paciente pac) { List *novo = new List; novo.p = pac; novo.link = i; return novo; } List insereCliente(List *i, Paciente pac) { List novo[]; novo[0].p = pac; novo[0].link = i; return novo; } List * inserePac(List *i) { List *novo = new List; Paciente pat; novo->p = pat; novo->link = i; return novo; } Gabarito Coment. 4. Na linguagem C++, temos que : I. Se p é um ponteiro, *p é o valor da variável apontada por p. II. Um ponteiro pode receber o endereço de uma variável cujo tipo é o mesmo tipo usado na declaração do ponteiro. III. &v apresenta o endereço da variável v. Qual a alternativa correta? Apenas as afirmações II e III estão corretas. Apenas a afirmação II está correta. As afirmações I, II e III estão corretas. Apenas a afirmação I está correta. Apenas as afirmações I e II estão corretas. Explicação: Analisando cada afirmativa : I. Se p é um ponteiro, *p é o valor da variáel apontada por p. Verdadeira. II. Um ponteiro pode receber o endereço de uma variável cujo tipo é o mesmo tipo usado na declaração do ponteiro. Verdadeira III. &v apresenta o endereço da variável v. Verdadeira. Logo, as afirmativas I, II e III estão corretas. 5. Tem-se uma estrutura de dados do tipo lista encadeada com 10 elementos, em que o primeiro e o último elemento estão ligados entre si. Trata-se de uma estrutura de dados denominada Lista Binária Encadeada Circular Balanceada Duplamente Encadeada Invertida Explicação: Uma lista encadeada circular é uma lista encadeada e portanto, dinÂmica, em que o ponteiro do último nó aponta para o primeiro nó. A lista circular também pode ser vazia. 6. As structs (estruturas) são utilizadas para modelar os nodos de estruturas dinâmicas como, por exemplo, as listas encadeadas, seja o seguinte exemplo de nodo de uma lista de produtos: struct nodo{ float valor; string produto; nodo * proximo; }; Suponha que um determinado ponteiro pt esteja apontando para um nodo desta lista, e que se queira alterar o conteúdo do campo valor deste nodo, que está sendo apontado por pt, para 5.60. Marque a alternativa que corretamente possibilita esta operação: pt->próximo.valor=5.60; pt->próximo->valor=5.60; pt.valor->5.60; pt->valor=5.60; pt->5.60; Gabarito Coment. 7. q Considere int *p, *q, *r; int x = 10, y = 20; Após seguir cada instrução na ordem dada a seguir : p = &x; q = &y; *p = *p + *q; (*q)++; r = q; q = p; identifique a opção que fornece correta e respectivamente, os valores de *p, *q , *r , x e y : 30 20 20 10 20 30 30 21 10 20 30 20 0 30 21 30 21 21 10 20 30 30 21 30 21 Explicação: Fazendo passo a passo temos : int *p, *q, *r; int x = 10, y = 20; p = &x; //p aponta para x, que vale 10 q = &y; // q aponta para y que recebeu 20 *p = *p + *q; //a área apontada por p, que é x, vai receber 10 + 20, que dá 30. Logo, *p e x valem 30. (*q)++; //A área apontada por q é incrementada. Ou sejam, y ou *q recebem 21 r = q; //r aponta para y q = p; // q aponta para onde p aponta, ou seja, q aponta para x Logo : *p , que é x, vale 30 *q, que é igual a *p, que é x, vale 30 *r é y, que vale 21 x vale 30 y vale 21 Logo, a resposta certa é 30 30 21 30 21 8. Para a criação de uma Fila seqüencial basta iniciar as variáveis de início e final, ou seja, apontá-las para as posições iniciais do vetor. O que alteraria na rotina de inserir se a variável final fosse inicializada com o valor -1 (menos um): Após a inserção deve-se fazer o incremento da variável inicio Antes da inserção deve-se fazer o incremento da variável final Após a inserção deve-se fazer o decremento da variável final Após a inserção deve-se fazer o incremento da variável final Antes da inserção deve-se fazer o decremento da variável final
Compartilhar