Prévia do material em texto
ESTRUTURA DE DADOS 1a aula Lupa Vídeo PPT MP3 1a Questão Para organizar as fotos de minha família com os ancestrais de várias gerações, minha filha usou uma estrutura de dados que é ..... Assinale a opção certa. lista árvore grafo pilha fila Respondido em 18/02/2019 20:17:36 Explicação: Conforme gabarito e aula 1. 2a Questão Estão entre algumas das possíveis formas de estruturas de dados: Listas, vetores, cin cout, Funções, vetores Árvores binárias, pilhas, vetores Árvores binárias, pilhas, algoritmos Grafos, funções, fila Respondido em 18/02/2019 20:18:25 Explicação: Árvores binárias, pilhas, vetores Verdadeiro. Grafos, funções, fila Falso. Funções não são estruturas de dados. Funções são módulos dos programas. Árvores binárias, pilhas, algoritmos FAlso. Algoritmos não são estrutura de dados. Listas, vetores, cin Falso. cin não é estrutura de dados. É usado para fazer entrada de dados. cout, Funções, vetores Falso. Funções e cout não são estrutura de dados. 3a Questão Qual estrutura de dados é mais adequada para armazenar a estrutura do diretório do sistema de arquivos de um sistema operacional? Pilha Grafo Fila Lista Árvore Respondido em 18/02/2019 20:18:55 Explicação: A estrutura de diretórios mostra hierarquia e um relacionamento não linear. Por isso, a resposta certa é árvore. Lista, pilha e fila são estruturas de dados linear. Grafo é não linear, mas não é hierárquica. 4a Questão Em relação a estruturas de dados, avalie a correspondência existente entre as estruturas de dados Lineares e Não Lineares com suas respectivas coleções de dados. A correta associação entre os elementos das duas tabelas é: a1, b1, c2, d1 a1, b2, c1, d1. a2, b2, c1, d2. a2, b1, c2, d1. a1, b1, c2, d2. Respondido em 18/02/2019 20:19:41 Explicação: Por definição : pilha, fila, lista, vetor são estruturas lineares. Já árvore e grafos são estruturas de dados não lineares. Gabarito Coment. 5a Questão A forma correta para imprimir o valor do último elemento de um vetor v com n posições é: cout << v[n+1]; cout << v[ultimo]; cin >> v[-1]; cout << v[n]; cout << v[n-1]; Respondido em 18/02/2019 20:20:05 6a Questão Estão entre algumas das possíveis formas de se estruturar dados: Algoritmos, lista ordenada, vetores. Grafos, lista ordenada, algoritmos. Lista encadeada, vetores, algoritmos. Grafos, algoritmos, fila. Grafos, lista ordenada, vetores. Respondido em 18/02/2019 20:20:21 Explicação: FAlso. Algoritmos não são estrutura de dados Grafos, algoritmos, fila. . FAlso. Algoritmos não são estrutura de dados. Grafos, lista ordenada, algoritmos. Correto. Grafos, lista ordenada, vetores. FAlso. Algoritmos não são estrutura de dados. Algoritmos, lista ordenada, vetores. FAlso. Algoritmos não são estrutura de dados. Lista encadeada, vetores, algoritmos. Gabarito Coment. 7a Questão Diferentes tipos de estrutura de dados são adequadas a diferentes tipos de aplicação e algumas são altamente especializadas, destinando-se a algumas tarefas específicas. Dessa forma a definição de Estrutura de Dados está expressa na alternativa: É um modo de deleção de dados em um computador. São os nomes dados as variáveis na montagem de uma rotina. É um modo de utilização de dados nos programas de computador. É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados de modo eficiente. É um modo de distribuição e organização de dados em uma rede de computador de modo que possam ser usados de modo eficiente. Respondido em 18/02/2019 20:20:29 Explicação: Analisando cada item : É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados de modo eficiente. Correta. É um modo de distribuição e organização de dados em uma rede de computador de modo que possam ser usados de modo eficiente. FAlso. Não há distribuição de dados ou organização de dados em uma rede via estrutura de dados. É um modo de utilização de dados nos programas de computador. FAlso. Não se diz como se utiliza dados. Variáveis armazenam dados, por exemplo e em atribuições ou em expressões também utilizamos dados. São os nomes dados as variáveis na montagem de uma rotina. FAlso. Nomes de variáveis são identificadores. É um modo de deleção de dados em um computador. Falso. Para "deletar" um dado não temos que usar estrutura de dados. Gabarito Coment. 8a Questão Assinale a alternativa correta sobre tipos abstratos de dados: Um tipo abstrato de dados é um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente. Um tipo abstrato de dados deve sempre ser representado por meio dos recursos específicos de uma linguagem de programação. Um tipo abstrato de dados descreve, além do que se pode fazer com os dados, como as operações serão efetivamente implementadas. Um tipo abstrato de dados é composto por um modelo de dados e um conjunto de operadores definidos sobre esses dados. É fundamental que os tipos abstratos de dados proponham um conjunto eficiente de algoritmos para realização de suas operações. Respondido em 18/02/2019 20:21:39 Explicação: Falso : Não se pensa em programa ou na linguagem de programação, pois o TAD não está vinculado à implementação. ESTRUTURA DE DADOS 1a aula Lupa Vídeo PPT MP3 1a Questão Na maioria dos sistemas operacionais, os arquivos são organizados hierarquicamente em um esquema de diretórios (pastas) e sub-diretórios. Qual a estrutura mais adequada para representar este problema ? árvore lista fila pilha grafo Respondido em 18/02/2019 20:22:05 Gabarito Coment. 2a Questão Qual estrutura de dados não linear que é utilizada na implementação de Redes de Computadores, na Computação Gráfica, em modelagem de circuitos digitais e etc. E que se caracteriza por apresentar um conjunto de nós e conexões entre eles. Pilhas Encadeadas Vetores Filas Encadeadas Listas Encadeadas. Grafos Respondido em 18/02/2019 20:22:53 3a Questão As estruturas de dados podem ser caracterizadas como sendo uma forma organizada de armazenar dados ou informações na memória, de modo a otimizar o acesso a estes. Muitas vezes existem algoritmos de manipulação dados associados a estas estruturas. Verifique as seguintes sentenças: I-Filas são estruturas que recuperam os dados na ordem direta em que estes foram armazenados. II-As Pilhas são estruturas que recuperam os dados na ordem reversa em que estes foram armazenados. III-As Pilhas são estruturas que recuperam os dados na ordem direta em que estes foram armazenados. IV-As Filas são estruturas que recuperam os dados na ordem reversa em que estes foram armazenados. Marque a alternativa CORRETA: As alternativas III e IV estão corretas. As alternativas II e IV estão corretas. Todas as alternativas estão corretas. As alternativas I e III estão corretas. As alternativas I e II estão corretas Respondido em 18/02/2019 20:23:31 Gabarito Coment. 4a Questão Sobre estrutura de dados, identifique o que está correto afirmar. I. Pilha é uma estrutura de dados com acesso restrito aos seus elementos, uma vez que eles são colocados e retirados por um único lado e são ordenados pelo princípio LIFO (last in first out). Assim, sempre que um elemento é adicionado ou retirado seu topo é alterado. II. Pilha é o tipo de estrutura usada, por exemplo, na avaliação de expressõesnuméricas, na recursividade e pelos compiladores, na passagem de parâmetros para as funções. III. Registro é uma estrutura básica que permite guardar coleções de dados de diferentes tipos, sendo normalmente utilizado quando um objeto tem diferentes atributos, isto é, contém campos de diferentes tipos. IV. Lista pode conter um número qualquer de elementos, expandindo-se ou contraindo-se conforme o elementos são inseridos ou retirados. Nesse tipo de estrutura, os acessos tanto podem ser feitos sequencialmente como diretamente. V. Fila, assim como a pilha , é uma versão especial de lista, e como tal, seus elementos são ordenados pelo princípio LIFO (last in first out). I, III e V. I, III, IV e V. II, IV e V. I, II e III. II, III, IV e V. Respondido em 18/02/2019 20:24:51 Gabarito Coment. 5a Questão É um exemplo de TAD Não Linear: Filas Filas de Prioridade Grafos Listas Pilhas Respondido em 18/02/2019 20:23:42 Explicação: Um grafo é um tipo de dados abstrato não linear 6a Questão Analise as afirmativas abaixo e selecione a alternativa correta. I Algumas aplicações da estrutura de dados grafo são: Diagrama de Entidade Relacionamento e Redes de computadores. II Árvore e lista duplamente encadeada são estruturas não lineares. III A Fila é uma estrutura não linear e a inserção de um elemento acontece ao final. IV A Lista é uma das estruturas de dados mais simples, mas não se pode ordená-la. V O uso de ponteiros é fundamental para construção de listas encadeadas. I e V são verdadeiras I , II e IV são verdadeiras III e V são verdadeiras II E IV são verdadeiras II e V são verdadeiras Respondido em 18/02/2019 20:25:40 Gabarito Coment. 7a Questão Podemos dizer que estrutura de dados é: É a saída, que satisfaz a quaisquer restrições impostas pelo problema, necessária para se calcular uma solução do problema. A entrada, que satisfaz a quaisquer restrições impostas pelo problema, necessária para se calcular uma solução do problema. O meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificações. Uma sequência de passos computacionais que transforma uma entrada em uma saída previamente determinada. O que permite o armazenamento e a recuperação de dados independentemente de seu conteúdo. Respondido em 18/02/2019 20:26:06 Gabarito Coment. 8a Questão A que estrutura pertence a definição: " Uma estrutura não linear que é um conjunto de nós e suas conexões entre eles e não há limitação de vértices. Muito utilizada para representação de percursos em mapas." filas encadeadas structs listas encadeadas grafos pilhas encadeadas ESTRUTURA DE DADOS 2a aula Lupa Vídeo PPT MP3 1a Questão O programa não executa corretamente, pois os protótipos estão fora da ordem em que as funções são descritas. O programa não executa corretamente pois as funções devem ser descritas antes da função main(), para que o compilador consiga reconhecê-las. O programa não executa corretamente, pois o protótipo da função media( ) não apresenta a identificação dos parâmetros, mas apenas os tipos dos mesmos. O programa executa perfeitamente independente da ordem das funções já que existem os seus protótipos. O programa executa perfeitamente, mas não mostra o valor da media já que esta função não foi chamada na função main( ). Respondido em 18/02/2019 21:32:22 Gabarito Coment. 2a Questão Nas linguagens C e C++, ao se declarar qualquer função, a especificação de tipo de dados que antecede o nome desta função define o tipo das variáveis que serão utilizadas dentro da função. o protótipo da função. o tipo do dado do valor retornado da função para quem a chamou. o escopo das variáveis do programa. o tipo dos dados dos parâmetros que são passados à função quando da sua chamada. Respondido em 18/02/2019 21:23:18 Explicação: Por definição, antes do nome da função colocamos o tipo de dados retornado. Por exemplo, int, double, char ... Quando a função nada retorna colocamos void. 3a Questão Qual será a saída para o seguinte trecho de código? void FUNC1() { int B = -100; cout << "Valor de B dentro da função FUNC1: " << B; } void FUNC2() { int B = -200; cout << "Valor de B dentro da função FUNC2: " << B; } int main() { int B = 10; cout << "Valor de B: " << B; B = 20; FUNC1(); cout << "Valor de B: " << B; B = 30; FUNC2(); cout << "Valor de B: " << B; } Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 10 Valor de B dentro da função FUNC2: -200 Valor de B: 30 Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -200 Valor de B: 30 Valor de B: 10 Valor de B dentro da função FUNC1: -200 Valor de B: 20 Valor de B dentro da função FUNC2: -200 Valor de B: 30 Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -200 Valor de B: 20 Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -400 Valor de B: 30 Respondido em 18/02/2019 21:28:50 Explicação: A execução começa pela main. Na main, B recebe 10. E daí é impresso : Valor de B : 10 DEpois, B muda e recebe 20. Em seguida, é chamada a função FUNC1. Dentro desta função, existe um outro B que recebe -100. Então, é impresso : Valor de B dentro da função FUNC1: -100 A função termina e voltamos para a main, onde existe um outro cout que imprime o valor de B, que na main vale 20. Então, será impresso na tela : Valor de B : 20 Em seguida, ainda na main, B recebe 30 e logo depois, FUNC2 é chamada. Executando FUNC2 temos que um B, local à função, recebe -200 e logo em seguida é impresso : Valor de B dentro da função FUNC2 : -200 Terminando a execução de FUNC2, voltamos para a main onde é impresso o valor do B (local à main) : Valor de B : 30 Logo, a opção correta é a que diz : Valor de B : 10 Valor de B dentro da função FUNC1: -100 Valor de B : 20 Valor de B dentro da função FUNC2 : -200 Valor de B : 30 4a Questão O que será mostrado na tela pelo programa abaixo ? #include < iostream > using namespace std; int a,b; void dobro(int x){ //x passado por valor x=2*x; } int triplo(int y){ //y passado por valor return 3*y; } void altera(int x, int &y) { //x passado por valor e y passado por referencia x=x+a; y=x+b; } int main (){ a=2; b=3; dobro(a); b=triplo(b); altera(a,b); cout<< a << " e " << b << endl; } 4 e 9 4 e 12 2 e 13 9 e 16 2 e 9 Respondido em 18/02/2019 21:40:46 Explicação: Executando o programa, passo a passo, temos : Na main, a recebe 2 e b recebe 3. Note que a e b são variáveis globais. Daí, ainda na main, a função dobro é chamada. Ao executar dobro, temos que o valor 2 é passado e x (local à dobro) recebe 2 * 2, que dá 4. Ao terminar a função dobro, volta-se para a main, mas o valor de a passado não mudou, continuando 2. Após a execução de dobro, a função triplo é chamada na main e é passado o valor de b, que é 3. Iniciando a execução da função triplo, temos que y recebe 3 e a função retorna 3 * 3, que é 9. Voltando para a main, temos que b recebe o valor retornado pela função, que é 9. Até este ponto, temos que a vale 2 e b mudou para 9. Em seguida, a função altera é chamada e são passados 2 e 9, respectivamente, para x e y. Executando a função altera, temos que x recebe 2+2, que dá 4 e y recebe 4+9, que dá 13. Como x é passado por valor e y por referência, temos quea mudará e b mudará (ambas na main). Então, voltando para main temos que a vale 2 e que b vale 13. Assim, será impresso na tela 2 e 13 5a Questão Considere o trecho de um programa escrito em C++. void func1 (bool x, int ini, int fim) { for ( int y=ini; y != fim ; y++) { x = !x; if (x) cout << y << endl; else cout << -y << endl; } } int main() { func1(false, 1, 7); } Marque a opção correta que mostra o que é impresso na tela. -1, 2, -3, 4, -5, 6 1, -2, -3, -4, -5, -6 -1, -2, -3, -4, -5, -6 1, -2, 3, -4, 5, -6 1, 2, 3, 4, 5, 6 Respondido em 18/02/2019 21:38:26 Explicação: Fazendo um teste de mesa temos que será impresso a seguinte sequência : 1 -2 3 -4 5 -6, um embaixo do outro. Parte de um teste de mesa : x ini fim y false 1 7 1 true 2 false E continua x, ini, fim e y recebendo valores Tela : 1 -2 3 -4 5 -6 6a Questão Blocos únicos de códigos que realizam diversas tarefas distintas são de difícil manutenção. Portanto, utiliza- se a técnica da modularização de programas, a fim de facilitar a implementação e a manutenção dos programas. Esta técnica tem como principal elemento: As funções Os Vetores As Estruturas de Dados Os Grafos As Filas Respondido em 18/02/2019 21:23:47 7a Questão Sobre funções, é correto afirmar: Não podem ser chamadas dentro de outras funções. Não devem conter variáveis locais em seu código. Obrigatoriamente devem retornam algum valor. Obrigatoriamente devem possuir parâmetros. São blocos de instruções que são executados quando são chamadas em alguma parte do programa. Respondido em 18/02/2019 21:24:02 Explicação: Uma função é um bloco de instruções que pode ser chamada a partir de outra função, que pode ter ou não parâmetros, que pode ou não retornar valor, que pode ter ou não variáveis locais. 8a Questão Diga, para o trecho do programa abaixo, qual a opção que representa a saída em tela. Considere que o programa será compilado sem erros, e irá executar também sem problemas. void troca (int x, int *y){ int tmp; tmp = *y; *y = x; x = tmp; } int main() { int a = 13, b = 10; troca( a, &b ); cout<<"Valores: "<< a<<"\t"<< b<< endl; system("pause"); } Valores: 13 10 Valores: 31 01 Valores: 10 10 Valores: 13 13 Valores: 10 13 Respondido em 18/02/2019 21:35:47 Explicação: A execução começa pela main. São passados o valor de a, que é 13 e o endereço de b, que vale 10. Em seguida, é chamada a função troca e são passados o valor de a e o endereço de b. Executando a função troca, x recebe 13 e *y recebe 10. Mas ocorre a troca, usando tmp como auxiliar. Então x recebe 10 e *y recebe 13. Ao terminar a execução da função, voltamos para a main e temos a sem mudanças e b com a mudança ocorrida na função. Note que x é um parâmetro passado por valor e y é um parÂmetro passado por referência. Portanto, a ficou 13 e b ficou 13. Logo, será impresso : Valores: 13 13 ESTRUTURA DE DADOS 3a aula Lupa Vídeo PPT MP3 1a Questão Dadas as afirmativas abaixo, identifique as corretas e marque a alternativa verdadeira. I- Vetores e matrizes servem apenas para construir agregados de dados heterogêneos. II- Registros em C++ são tipos de dados compostos formados por mais de um tipo de dados. III- Na Linguagem C++, "struct" é uma palavra reservada que serve para definir registros. IV- Registros são tipos de dados heterogêneos. estão corretas apenas as afirmativas I, II e IV. estão corretas apenas as afirmativas I, III e IV. estão corretas apenas as afirmativas I, II e III. todas as afirmativas estão corretas. estão corretas apenas as afirmativas II, III e IV. Respondido em 18/03/2019 22:04:17 Explicação: Analisando as afirmativas, temos : Afirmativa I : Falso. Vetores e matrizes são agregados homogêneos. Afirmativas II, III e IV : Estão corretas. Basicamente, structs são agregados heterogêneos. Logo, a opção correta é estão corretas apenas as afirmativas II, III e IV. 2a Questão Com relação à struct, é correto afirmar que : A struct é sempre definida dentro da main. Cada elemento da struct é chamado componente. Não é possível criar um vetor de structs, pois o vetor trabalha apenas com dados do mesmo tipo. Cada elemento da struct é denominado membro ou campo, sendo que a struct pode armazenar elementos de tipos diferentes ou não. Cada elemento da struct é chamado campo e cada campo deve ser, obrigatoriamente, de um tipo de dados distinto de outro campo. Respondido em 18/03/2019 22:05:43 Gabarito Coment. 3a Questão Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob uma lógica e associados por um nome. Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como: struct aluno { string nome; float nota; }; Suponha ainda que exista um vetor desta estrutura, definido como: aluno vet [ 100]; Marque a alternativa em que é atribuída de forma correta a nota 5.7 para o décimo primeiro elemento deste vetor. vet[10].nota=5.7; vet[10]=aluno.5.7; vet[10].aluno.nota=5.7 ; aluno.vet[10]=5.7; aluno.vet[10].nota=5.7; Respondido em 18/03/2019 22:06:46 4a Questão o programa de computador necessita preencher uma lista de alunos (nome e nota) até que a lista esteja cheia. Sabe-se que a lista tem capacidade para 25 alunos. Utilizando agregados heterogêneos, qual o trecho de código que exibe a melhor forma de solucionar este problema? for (int i = 0; i < 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; } for (int i = 0; i < 25; i++) { cin >> lista->nome; cin >> lista->nota; } int i = 0; while( i < 25) { cin >> lista[i].nome; cin >> lista[i].cargo; i ++; } for (int i = 0; i <= 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; } for (int i = 0; i < 25; i++) { cin >> lista[i]->nome; cin >> lista[i]->nota; } Respondido em 18/03/2019 22:08:30 Explicação: Analisando cada item : for (int i = 0; i <= 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; } >> Falso. Veja que se há 25 itens, os índices começarão de 0 e irao até 24 e não 25. for (int i = 0; i < 25; i++) { cin >> lista[i]->nome; cin >> lista[i]->nota; } >> Falso. Para acessar o campo de struct é ponto e não seta. lista[i] é uma struct e não um ponteiro. for (int i = 0; i < 25; i++) { cin >> lista->nome; cin >> lista->nota; } >> Falso. Para acessar o campo de struct é ponto e não seta. lista é um vetor e lista[i] é um componente de lista. Usamos o operador seta quando temos ponteiro para struct. for (int i = 0; i < 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; } >> Verdadeiro. int i = 0; while( i < 25) { cin >> lista[i].nome; cin >> lista[i].cargo; i ++; } >> Falso, porque foi pedido nome e nota e não cargo. 5a Questão Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob uma lógica e associados por um nome. Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como: struct aluno { string nome; float media; }; Suponha ainda que exista um vetor desta estrutura, definido como: aluno vet [ 10]; Marque a alternativa em que é atribuída de forma correta a media 6.0 para o quarto elemento deste vetor. vet[3].aluno=6.0; aluno[3].media=6.0; aluno[3].10=6.0; aluno[10]=6.0; vet[3].media=6.0; Respondido em 18/03/2019 22:09:17 6a Questão Marque a opção correta, considerando struct Livro { intcodigo; float preco; } liv; Livro.codigo = 12345; liv->preco = 30.70; liv.preco = 30.70; Livro.liv.codigo = 12345; Livro->liv.codigo = 12345; Respondido em 18/03/2019 22:09:52 7a Questão Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob uma lógica e associados por um nome. Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como: struct aluno { string nome; float nota; }; Suponha ainda que exista um vetor desta estrutura, definido como: aluno vet [100]; Marque a alternativa em que é atribuída de forma correta a nota 5.7 para o décimo primeiro elemento deste vetor. aluno.vet[10].nota=5.7; vet[10]=aluno.5.7; vet[10].nota=5.7; vet[10].aluno.nota=5.7 ; aluno.vet[10]=5.7; Respondido em 18/03/2019 22:10:21 8a Questão Os métodos de ordenação são muito utilizados em estruturas de dados para facilitar a busca e a recuperação posterior de itens de conjuntos ordenados. Existem vários métodos de ordenação, por este motivo, marque corretamente a alternativa que apresenta o código do método de seleção. int ordena(float v[], float valor, int n) { int ini = 0, fim = n -1, meio; while (ini <= fim){ meio = (ini + fim)/2; if (v[meio] == valor) return meio; if (valor < v[meio]) fim = meio -1; else ini = meio+1; } return -1; } void ordena(int v[], int n){ int i, j, menor, aux; for (j = 0; j < n-1; j++) { for (i = j+1; i < n; i++) { if (v[i] < v[j]) { aux = v[j]; v[j] = v[i]; v[i] = aux; } } } } int ordena(float v[], float valor, int n) { int ini = 0, fim = n-1, meio; while (ini >= fim){ meio = ini/2; if (v[meio] == valor) return meio; if (valor < v[meio]) fim = meio -1; else ini = meio+1; } void ordena (int v[], int n){ int i, j, aux; for (j = 1; j < n; j++) for (i=j; i > 0 && v[i-1]> v[i]; i--){ aux = v[i-1]; v[i-1] = v[i]; v[i] = aux; } } int ordena(float v[], float valor, int n){ for (int i = 0; i < n; i++) if (v[i] == valor) return i; return -1; } Respondido em 18/03/2019 22:11:30 Explicação: Na ordenação por seleção, a idéia é sempre procurar o menor elemento do vetor e inseri-lo no início do vetor. Procuramos o menor valor do vetor e colocamos ele em vetor. Procuramos o menor valor do vetor excluindo o já colocado e colocamos ele em vetor. E assim vamos indo até termos todo o vetor ordenado. Partindo sempre a partir do último elemento reordenado (a partir do i), o programa procura o menor elemento no vetor e o substitue pelo elemento i atual. É o que está ocorrendo na primeira opção! ESTRUTURA DE DADOS 3a aula Lupa Vídeo PPT MP3 1a Questão Qual das seguintes estruturas de dados é classificada como heterogênea? Fila Loop Pilha Registro Vetor Respondido em 18/03/2019 22:12:06 Explicação: Registro permite agregar dados de tipos diferentes. Vetor permite agregar dados do mesmo tipo. Pilha e fila implementadas com vetor ou lista encadeada. Loop : termo genérico para repetições. Gabarito Coment. 2a Questão Marque a afirmativa correta para a "Inserção em lista linear sequencial ordenada". Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente. Consiste em fazer uma busca em um vetor desordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou, antes do meio ou depois do meio. Consiste em adicionar um valor no vetor, alterando a ordem existente e ajustando o total de elementos. Consiste em fazer uma busca em um vetor já ordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou, antes do meio ou depois do meio. Respondido em 18/03/2019 22:12:44 Explicação: Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. Só pode ocorrer, no entanto, se a lista não estiver cheia. 3a Questão Em C++, quando uma variável é declarada como uma struct, o acesso para atribuição e leitura dos membros (campos) deste registro se dá pelo operador : & (e comercial ou eitza). ∙ (ponto). * (asterisco). -> (seta). , (vírgula). Respondido em 18/03/2019 22:13:14 Explicação: Por definição, o operador que permite acessar os campos de uma variável struct é o ponto (.). 4a Questão Os métodos de ordenação são muito utilizados em estruturas de dados para facilitar a busca e a recuperação posterior de itens de conjuntos ordenados. Existem vários métodos de ordenação, por este motivo, marque corretamente a alternativa que apresenta o código do método de seleção. int ordena(float v[], float valor, int n) { int ini = 0, fim = n-1, meio; while (ini >= fim){ meio = ini/2; if (v[meio] == valor) return meio; if (valor < v[meio]) fim = meio -1; else ini = meio+1; } int ordena(float v[], float valor, int n){ for (int i = 0; i < n; i++) if (v[i] == valor) return i; return -1; } int ordena(float v[], float valor, int n) { int ini = 0, fim = n -1, meio; while (ini <= fim){ meio = (ini + fim)/2; if (v[meio] == valor) return meio; if (valor < v[meio]) fim = meio -1; else ini = meio+1; } return -1; } void ordena (int v[], int n){ int i, j, aux; for (j = 1; j < n; j++) for (i=j; i > 0 && v[i-1]> v[i]; i--){ aux = v[i-1]; v[i-1] = v[i]; v[i] = aux; } } void ordena(int v[], int n){ int i, j, menor, aux; for (j = 0; j < n-1; j++) { for (i = j+1; i < n; i++) { if (v[i] < v[j]) { aux = v[j]; v[j] = v[i]; v[i] = aux; } } } } Respondido em 18/03/2019 22:13:26 Explicação: Na ordenação por seleção, a idéia é sempre procurar o menor elemento do vetor e inseri-lo no início do vetor. Procuramos o menor valor do vetor e colocamos ele em vetor. Procuramos o menor valor do vetor excluindo o já colocado e colocamos ele em vetor. E assim vamos indo até termos todo o vetor ordenado. Partindo sempre a partir do último elemento reordenado (a partir do i), o programa procura o menor elemento no vetor e o substitue pelo elemento i atual. É o que está ocorrendo na primeira opção! Gabarito Coment. 5a Questão o programa de computador necessita preencher uma lista de alunos (nome e nota) até que a lista esteja cheia. Sabe-se que a lista tem capacidade para 25 alunos. Utilizando agregados heterogêneos, qual o trecho de código que exibe a melhor forma de solucionar este problema? for (int i = 0; i < 25; i++) { cin >> lista[i]->nome; cin >> lista[i]->nota; } int i = 0; while( i < 25) { cin >> lista[i].nome; cin >> lista[i].cargo; i ++; } for (int i = 0; i < 25; i++) { cin >> lista->nome; cin >> lista->nota; } for (int i = 0; i <= 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; } for (int i = 0; i < 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; } Respondido em 18/03/2019 22:13:53 Explicação: Analisando cada item : for (int i = 0; i <= 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; } >> Falso. Veja que se há 25 itens, os índices começarão de 0 e irao até 24 e não 25. for (int i = 0; i < 25; i++) { cin >> lista[i]->nome; cin >> lista[i]->nota; }>> Falso. Para acessar o campo de struct é ponto e não seta. lista[i] é uma struct e não um ponteiro. for (int i = 0; i < 25; i++) { cin >> lista->nome; cin >> lista->nota; } >> Falso. Para acessar o campo de struct é ponto e não seta. lista é um vetor e lista[i] é um componente de lista. Usamos o operador seta quando temos ponteiro para struct. for (int i = 0; i < 25; i++) { cin >> lista[i].nome; cin >> lista[i].nota; } >> Verdadeiro. int i = 0; while( i < 25) { cin >> lista[i].nome; cin >> lista[i].cargo; i ++; } >> Falso, porque foi pedido nome e nota e não cargo. 6a Questão Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob uma lógica e associados por um nome. Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como: struct aluno { string nome; float media; }; Suponha ainda que exista um vetor desta estrutura, definido como: aluno vet [ 10]; Marque a alternativa em que é atribuída de forma correta a media 6.0 para o quarto elemento deste vetor. aluno[3].10=6.0; aluno[10]=6.0; vet[3].aluno=6.0; vet[3].media=6.0; aluno[3].media=6.0; Respondido em 18/03/2019 22:14:13 7a Questão Marque a opção correta, considerando struct Livro { int codigo; float preco; } liv; Livro->liv.codigo = 12345; liv->preco = 30.70; Livro.codigo = 12345; liv.preco = 30.70; Livro.liv.codigo = 12345; Respondido em 18/03/2019 22:14:24 8a Questão Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob uma lógica e associados por um nome. Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma estrutura como: struct aluno { string nome; float nota; }; Suponha ainda que exista um vetor desta estrutura, definido como: aluno vet [100]; Marque a alternativa em que é atribuída de forma correta a nota 5.7 para o décimo primeiro elemento deste vetor. vet[10].aluno.nota=5.7 ; vet[10]=aluno.5.7; aluno.vet[10].nota=5.7; vet[10].nota=5.7; aluno.vet[10]=5.7; ESTRUTURA DE DADOS 4a aula Lupa Vídeo PPT MP3 1a Questão O seguinte trecho de programa abaixo representa qual tipo de estrutura de ordenação? void ordenar(float v[], int n) // n é o no. de elementos em v { int i , // índice aux, // auxiliar para troca trocou = true, fim = n - 1; while (trocou) { trocou = false; // sinaliza que é falso que trocou for (i = 0; i < fim; i++) { if (v[i] > v[i+1]) { aux = v[i]; v[i] = v[i+1]; v[i+1] = aux; // sinaliza que é verdadeiro que trocou trocou = true; } // fim if } // fim for fim--; // decrementa o fim } // fim while } // fim da função Heapsort Shellsort Mergesort Bublesort Quicksort Respondido em 19/03/2019 08:40:22 Gabarito Coment. 2a Questão Marque a afirmativa correta para a "Busca ou pesquisa binária". Consiste em adicionar um valor no vetor, alterando a ordem existente e ajustando o total de elementos. Consiste em fazer uma busca em um vetor já ordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou, antes do meio ou depois do meio. Consiste em fazer uma busca em um vetor desordenado, dividindo o espaço de busca ao meio e verificando se o dado está no meio ou, antes do meio ou depois do meio. É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente. Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. Respondido em 19/03/2019 08:33:27 Gabarito Coment. 3a Questão Para consultarmos uma estrutura de dados, normalmente, empregamos um tipo de pesquisa de dados. O trecho de programa a seguir refere-se a uma pesquisa por um elemento único (sua primeira ocorrência), em um conjunto de elementos de dados armazenado em uma estrutura de acesso indexado e aleatório. Selecione a opção correspondente ao algoritmo utilizado, no programa, para a referida pesquisa: int busca(float v[], float valor, int n) { int ini = 0, fim = n -1, meio; while (ini <= fim) { meio = (ini + fim)/2; if (v[meio] == valor) return meio; if (valor < v[meio]) fim = meio -1; else ini = meio+1; } return -1; } pesquisa sequencial pesquisa de cadeias pesquisa cadeias indexada pesquisa binária pesquisa indexada Respondido em 19/03/2019 08:38:33 Gabarito Coment. 4a Questão Estude atentamente o código a segir: int deciframe(int v[ ], int tam, int e){ int i = 0, f = tam -1, m; while ( i <= f ){ m = ( i + f ) / 2; if ( v[m] == e ) { return m; } if ( e < v[m] ) { f = m - 1; } else { i = m + 1; } } return -1; } Sabendo que a chamada da mesma foi feita com os parâmetros: v[10] = {0, 2, 4, 6, 8, 10, 20, 100} tam = 8 e = -6 É sabido que a mesma retornaria o valor -1, porque: Porque ele não achou o elemento na coleção Seria o retorno do while É o módulo do valor de e Seria o retorno do segundo if É a posição do elemento e no vetor v Respondido em 19/03/2019 08:38:21 Explicação: Veja que para retornar -1 o return m; não foi executado. E para o return m; não poder ser executado, o teste if ( v[m] == e ) foi sempre falso. Logo, retornar -1 é o caso do elemento e = -6 não ser encontrado no vetor v. 5a Questão Estude atentamente o código a segir: int deciframe(int v[ ], int tam, int e){ int i = 0, f = tam -1, m; while ( i <= f ){ m = ( i + f ) / 2; if ( v[m] == e ) { return m; } if ( e < v[m] ) { f = m - 1; } else { i = m + 1; } } return -1; } Sabendo que a chamada da mesma foi feita com os parâmetros recebendo os seguintes valores, o que ela retornaria? v[10] = {0, 2, 4, 6, 8, 10, 20, 100} tam = 8 e = 0 -2 -1 1 0 2 Respondido em 19/03/2019 08:38:02 Explicação: A busca pode retornar o índice do elemento encontrado ou pode retornar -1, caso o elemento e não seja encontrado. Vemos que o valor de e é encontrado. Logo, a função retornará a posição do valor e = 0 no vetor. No caso, o elemento zero está na posição 0. Resposta : 0 6a Questão Marque a afirmativa correta para a "inserção incremental". A técnica é boa quando os dados ficam uniformemente distribuídos entre os seus compartimentos. É um tipo de ordenação por intercalação É um tipo de sequenciação por intercalação. Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. Os pivôs são escolhidos aleatoriamente. Respondido em 19/03/2019 08:35:32 Gabarito Coment. 7a Questão Suponha uma listagem, contendo número de inscrição e pontuação (ordenada pelo número de inscrição) dos candidatos para o cargo de Analista de Sistemas de uma grande empresa pública. São 1024 candidatos inscritos e o sistema implementado para consulta do resultado, permite busca binária ou busca sequencial pelo número de inscrição. O número máximo de comparações executadas se fosse utilizada a busca binária e se fosse utilizada busca sequencial, respectivamente, seria de: 10 e 10 1024 e 512 10 e 1024 9 e 9 9 e 10 Respondido em 19/03/2019 08:36:49 Gabarito Coment. 8a Questão Qual a importância de se entender a "ordenação" de dados ? A ordenação é a base na qual, muitos sistemas são construídos. Entendendo a ordenação, tem-se conhecimento para manter outros problemas. A ordenação é a base na qual, muitosalgoritmos são construídos. Entendendo a ordenação, tem-se conhecimento para manter outros problemas. A ordenação é a base na qual, muitos programas são construídos. Entendendo a ordenação, tem-se conhecimento para manter outros problemas. A ordenação é a base na qual, muitos sistemas são construídos. Entendendo a ordenação, tem-se conhecimento para resolver outros problemas. A ordenação é a base na qual, muitos algoritmos são construídos. Entendendo a ordenação, tem-se conhecimento para resolver outros problemas. ESTRUTURA DE DADOS 5a aula Lupa Vídeo PPT MP3 1a Questão for (int i = 0; i < n; i++) cout << L[i].matricula << " " << L[i].nome[30] << endl; for (int i = 0; i < n; i++) cout << L.matricula << " " << L.nome << endl; for (int i = 0; i < n; i++) cout << L.matricula[i] << " " << L.nome[i] << endl; for (int i = 0; i < n; i++) cout << L[i].matricula << " " << L[i].nome << endl; for (int i = 0; i < n; i++) cout << L[i] << endl; Respondido em 11/04/2019 20:03:35 Gabarito Coment. 2a Questão Estude atentamente o código a segir: int deciframe(int v[ ], int tam, int e){ int i = 0, f = tam -1, m; while ( i <= f ){ m = ( i + f ) / 2; if ( v[m] == e ) { return m; } if ( e < v[m] ) { f = m - 1; } else { i = m + 1; } } return -1; } Sabendo que a chamada da mesma foi feita com os parâmetros recebendo os seguintes valores, o que ela retornaria? v[10] = {0, 2, 4, 6, 8, 10, 20, 100} tam = 8 e = -6 3 6 4 0 -1 Respondido em 11/04/2019 20:02:57 Explicação: Analisando int deciframe(int v[ ], int tam, int e) { int i = 0, f = tam -1, m; while ( i <= f ){ m = ( i + f ) / 2; if ( v[m] == e ) { return m; } if ( e < v[m] ) { f = m - 1; } else { i = m + 1; } } return -1; } Sabendo que a chamada da mesma foi feita com os parâmetros recebendo os seguintes valores, o que ela retornaria? v[10] = {0, 2, 4, 6, 8, 10, 20, 100} tam = 8 e = -6 Está procurando pelo valor e = -6. Como se sabe pelo estudo da busca binária e olhando o código dado, temos que -6 não existe na lista então a função irá retornar -1 (vide última linha da função). SE a busca tivesse sucesso, o teste do 1o. if no while seria verdadeiro e então o índice m de v seria retornado. Mas não é o caso, pois -6 não foi encontrado. 3a Questão Considere uma lista sequencial L com n fichas de professores, sendo que cada ficha de professor é modelada pela struct : struct professor { int matricula; char titulo[30]; }; e a lista L é assim declarada : professor L[n]; Assinale o trecho que corretamente exibe todas as matrículas e titulações de todos os n professores de L . for (int i = 0; i < n; i++) cout << L[i] << endl; for (int i = 0; i < n; i++) cout << L.matricula << " " << L.titulo << endl; for (int i = 0; i < n; i++) cout << L[i].matricula << " " << L[i].titulo[30] << endl; for (int i = 0; i < n; i++) cout << L[i].matricula << " " << L[i].titulo << endl; for (int i = 0; i < n; i++) cout << L.matricula[i] << " " << L.titulo[i] << endl; Respondido em 11/04/2019 20:00:59 Explicação: Como L é um vetor de n elementos do tipo professor. Então, para percorrer o vetor de índice i temos que fazer L[i] seguido do ponto seguido do campo, que pode ser matricula ou titulo. Assiim, a opção correta é for (int i = 0; i < n; i++) cout << L[i].matricula << " " << L[i].titulo << endl; 4a Questão As estruturas de dados em programação são muito utilizadas para tornar o acesso aos dados mais eficiente e organizado. A estrutura de dados considerada mais simples e tem como característica apresentar apenas uma dimensão é: Matriz Vetor Registro Variável Função Respondido em 11/04/2019 19:56:23 Gabarito Coment. 5a Questão As estruturas de dados são utilizadas para manter dados ou informações organizados na memória, o que possibilita a otimização do uso destes dados. Porém, as estruturas guardam características especiais na manipulação destes dados, assim deve-se escolher a estrutura certa ou mais adequada para uma determinada aplicação. Portanto marque a opção que representa a melhor estrutura, quando se tem como requisitos principais o acesso aleatório aos dados e alocação destes de forma contínua na memória. Fila Sequencial Lista Sequencial Lista Encadeada Pilha Encadeada Pilha Sequencial Respondido em 11/04/2019 19:56:58 Gabarito Coment. 6a Questão São métodos ou algoritmos conhecidos de ordenação de dados por troca: hashing e bubble sort. bubble sort e quicksort. quicksort e hashing. busca por ordenação e ordenação shell. ordenação shell e hashing. Respondido em 11/04/2019 19:57:13 Explicação: Bubble sort é o algoritmo mais simples, mas o menos eficientes. Neste algoritmo cada elemento da posição i será comparado com o elemento da posição i + 1, ou seja, um elemento da posição 2 será comparado com o elemento da posição 3. Caso o elemento da posição 2 for maior que o da posição 3, eles trocam de lugar e assim sucessivamente. Por causa dessa forma de execução, o vetor terá que ser percorrido quantas vezes que for necessária, tornando o algoritmo ineficiente para listas muito grandes. O Quicksort é o algoritmo mais eficiente na ordenação por comparação. Nele se escolhe um elemento chamado de pivô, a partir disto é organizada a lista para que todos os números anteriores a ele sejam menores que ele, e todos os números posteriores a ele sejam maiores que ele. Ao final desse processo o número pivô já está em sua posição final. Os dois grupos desordenados recursivamente sofreram o mesmo processo até que a lista esteja ordenada. 7a Questão Considere as seguintes afirmações: I. Só podemos ter uma matriz de no máximo duas dimensões. Exemplo: C[100][100]. II. Ao declararmos um vetor int A[10], se escrevemos A[2] acessamos o segundo elemento do vetor. III. Uma string declarada como char B[30] armazena no máximo 30 caracteres. Escolha a alternativa correta: Está correta apenas a afirmativa I. Nenhuma afirmação está correta. Está correta apenas a afirmativa II. Estão corretas apenas as afirmativas I e III. Estão corretas apenas as afirmativas I e II. Respondido em 11/04/2019 19:58:08 Explicação: Analisando cada afirmativa : I. Só podemos ter uma matriz de no máximo duas dimensões. Exemplo: C[100][100]. Falso. Podemos ter matrizes unidimensionais, tridimensionais, etc... II. Ao declararmos um vetor int A[10], se escrevemos A[2] acessamos o segundo elemento do vetor. Falso. Em C++ o índice inicial é zero. Logo, A[2] é o elemento de índice 2, ou seja, o 3o. elemento do vetor. III. Uma string declarada como char B[30] armazena no máximo 30 caracteres. Escolha a alternativa correta: Falso. B pode armazenar no máximo 29 caracteres que sejam dados, pois existe uma área para o caracter nulo. Logo, todas as opções são falsas. 8a Questão Considere uma lista com n livros, em que cada livro é modelado pela struct : struct Livro { string titulo, editora, autor; float preco; }; A função X abaixo void X (Livro v[ ], int &n, Livro L) { v[n] = L; n++; cout << "Operação realizada com sucesso."; } implementa a operação de : Substituição Ordenação por inserção Inicialização Inserção Busca ESTRUTURA DE DADOS 6a aula Lupa Vídeo PPT MP3 1a Questão Tanto a operação TOP (acessa topo), quanto à operação POP (remover), permite acessar o último elemento armazenado em uma Pilha. Quanto à diferença entreambas as operações em relação ao estado da Pilha é correto afirmar: Ambas alteram o estado da Pilha A operação TOP remove um elemento e altera o estado da Pilha Somente a operação TOP altera o estado da Pilha Nenhuma das operações altera o estado da Pilha Somente a operação POP altera o estado da Pilha Respondido em 06/05/2019 20:17:25 Explicação: Por definição, o TOP só acessa o dado do topo. A operação POP desempilha, acessando o último dado que entrou na pilha, retirando-o. Assim, o topo diminui. Logo, POP altera o estado da pilha. Gabarito Coment. 2a Questão Respeitando as ordens de inserção e de retirada dos dados, uma estrutura de: pilha é também denominada LIFO ou FILO. fila é também denominada FIFO ou FILO. pilha é também denominada FIFO ou FILO. fila é também denominada LIFO ou LILO. fila é também denominada FIFO ou LIFO. Respondido em 06/05/2019 20:18:39 Gabarito Coment. 3a Questão Algoritmo Pilha Inicio IniciarPilha(s) enquanto (não for o final das entradas) faca leia (num) se (num != 3) então Empilhar (s, num) senão Desempilhar(s) x := ElementoTopo(s) fimse fimenquanto fimalgoritmo Considere que, no trecho do algoritmo acima, representado por seu pseudocódigo, seja fornecido para num, sucessivamente, os valores inteiros 1, 2, 3, 4, 5, 3 e 6. Nesse caso, ao final da execução do algoritmo, o valor de x será igual a ... 2 e a pilha terá os valores 6, 4 e 1. 3 e a pilha terá os valores 6, 5, 4, 2 e 1. 5 e a pilha terá os valores 6, 3, 5, 4, 3, 2 e 1. 5 e a pilha terá os valores 6, 4 e 1. 3 e a pilha terá os valores 6, 4 e 1. Respondido em 06/05/2019 20:23:23 Explicação: Seguindo o fluxo do algoritmo, serão empilhados 1 e 2. Ao chegar no 3, o valor 2 será desempilhado e armazenado em x. Continuando o loop, 4 é mepilhado, depois 5 é empilhado e ao chegar novamente em 3, o 5 é deempilhado e armazenado em x. Continuando o loop enquanto existe entrada, empilha-se o 6. Dessa forma temos que o valor em 5 é 5 e a pilha possui os valors 6, 4 e 1, sendo 6 no topo da pilha. Logo, a opção correta é 5 e a pilha terá os valores 6, 4 e 1. 4a Questão Considere dados sendo manipulados em uma pilha sequencial em que as operações possíveis são: inserção - push(novo valor) ou remoção - pop(). Se realizarmos a seguinte sequencia de operações: push(A),push(B),push(C),pop(),pop(),push(D),pop(),pop(). Pode-se dizer que o interior da pilha apresenta-se: Com os dados A e B Apenas com o dado A Apenas com o dado D Vazio Com os dados A e D Respondido em 06/05/2019 20:19:32 5a Questão A estrutura de dados Pilha funciona de acordo com o seguinte fundamento básico: O último a entrar é o último a sair. Quem estra no topo da pilha não sai mais. O primeiro a entrar é o primeiro a sair. O primeiro a entrar é o último a sair. Tanto o primeiro como o último podem sair primeiro. Respondido em 06/05/2019 20:19:54 Gabarito Coment. 6a Questão Assinale a opção que apresenta uma estrutura de dados embasada no princípio last in, first out (LIFO) ¿ último a entrar, primeiro a sair ¿, na qual, conforme a inserção, os dados inseridos primeiramente na estrutura são os últimos a serem removidos. vetores listas pilhas árvores filas Respondido em 06/05/2019 20:20:11 Explicação: Por definição, a estrutura de dados pilha é uma lista linear em que as inserções e remoções seguem o critério ou lógica LIFO (Last In Firsts Out). Em uma lista, árvore ou vetor a inserção pode ser em qualquer posição, desde que não haja ordem. E a estrutura de dados fila segue a lógica FIFO. 7a Questão Sobre as pilhas, marque a alternativa correta: A característica principal que define uma Pilha diz respeito às operações de inserção e remoção, que devem ser realizadas exclusivamente na mesma extremidade. Pilhas são menos restritivas do que Listas, pois esta última impõe mais restrições às operações de inserção/remoção do que as primeiras. Pilhas são estruturas de dados do tipo FIFO e permitem que os dados sejam manipulados diretamente no meio da estrutura. Pilhas não podem ser implementadas usando vetores, pois não será possível reproduzir a inserção e remoção pela mesma extremidade. A operação de desempilhar um item de uma pilha e logo em seguida empilha-lo em outra pilha mantem a mesma ordem dos dados da primeira pilha na segunda pilha. Respondido em 06/05/2019 20:21:06 Explicação: Analisando cada item. Pilhas são estruturas de dados do tipo FIFO e permitem que os dados sejam manipulados diretamente no meio da estrutura. Falso. Pilha segue a lógica LIFO e as operações de inserção e remoção ocorrem apenas em uma extremidade, o topo da pilha A operação de desempilhar um item de uma pilha e logo em seguida empilhá-lo em outra pilha mantém a mesma ordem dos dados da primeira pilha na segunda pilha. FAlso. Por exemplo, o elemento do topo da primeira pilha, será o 1o. elemento empilhado na 2a. pilha. Pilhas não podem ser implementadas usando vetores, pois não será possível reproduzir a inserção e remoção pela mesma extremidade. Falso. É possível usar vetor ou lista encadeada para implementar pilha. Pilhas são menos restritivas do que Listas, pois esta última impõe mais restrições às operações de inserção/remoção do que as primeiras. FAlso. Em uma lista podemos inserir ou retirar de qualquer posição. Em pilha, não. A característica principal que define uma Pilha diz respeito às operações de inserção e remoção, que devem ser realizadas exclusivamente na mesma extremidade. Vedadeiro. 8a Questão Considere as seguintes afirmativas: 1- Pilhas são um exemplo de estrutura linear, enquanto filas são um exemplo de estrutura não linear 2- Pilhas são estruturas eficientes quando se trata de inserir ou remover de qualquer posição. 3- Pilhas e filas seguem, respectivamente, as lógicas LIFO e FIFO, nas quais a ordem de inserção e remoção de dados da estrutura são bem definidas. Todas estão corretas Somente 1 está correta Somente 3 está correta Somente 2 e 3 estão corretas Somente 2 está correta Respondido em 06/05/2019 20:21:49 Explicação: Analisando cada afirmativa : 1- Pilhas são um exemplo de estrutura linear, enquanto filas são um exemplo de estrutura não linear Falso. Pilha e fila são estruturas de dados lineares. 2- Pilhas são estruturas eficientes quando se trata de inserir ou remover de qualquer posição. Falso. Nâo se pode inserir ou remover de qualquer posição de uma pilha ou de uma fila. 3- Pilhas e filas seguem, respectivamente, as lógicas LIFO e FIFO, nas quais a ordem de inserção e remoção de dados da estrutura são bem definidas. Verdadeiro. Logo, apenas a afirmativa 3 está correta. ESTRUTURA DE DADOS 7a aula Lupa Vídeo PPT MP3 1a Questão IFMT - Técnico em Tecnologia da Informação - 2013 Considere a função insere(x: inteiro), que recebe como parâmetro um número inteiro e o insere em uma Fila, e ainda, a função remove(), que retira um valor de uma Fila. Dada a Fila [3-4-6-8-10], executam-se os comandos na ordem: insere(1), insere(2), remove(). Após a execução desses comandos, qual será a Fila resultante? [3-4-6-8-10-1] [2-1-3-4-6-8] [3-4-6-8-10] [2-3-4-6-8-10] [4-6-8-10-1-2] Respondido em 06/05/2019 20:45:30 Explicação: Temos a fila inicialmente 3 4 6 8 10 Após inserir 1, a fila ficará : 3 4 6 8 10 1 Após isnerir 2 : 3 4 6 8 10 1 2 Após uma remoção : 4 68 10 1 2 2a Questão Considerando que uma fila seqüencial utiliza dois apontadores para indicar suas posições de final e início da estrutura, supondo que a fila foi criada com os apontadores apontando para a posição zero do vetor, qual das alternativas a seguir pode caracterizar uma fila vazia? Quando o apontador de posição final for igual ao início. Quando os apontadores de final e início apontarem para zero. Quando o apontador de final menos um (final-1) for igual ao inicio. Quando o apontador de final apontar para zero. Quando o apontador de início apontar para zero. Respondido em 06/05/2019 20:44:46 Explicação: Suponha que nossa fila mora em um vetor fila[0..N-1]. (A natureza dos elementos do vetor é irrelevante: eles podem ser inteiros, bytes, ponteiros, etc.) Digamos que a parte do vetor ocupada pela fila é fila[p..u-1] . O primeiro elemento da fila está na posição p e o último na posição u-1. A fila está vazia se p == u e cheia se u == N. 3a Questão Qual das alternativas a seguir pode definir uma estrutura de fila? Entrada de dados pelo final e saída pelo início. Entrada e saída de dados pelo início. Entrada e saída de dados pelo final. Entrada de dados pelo início e saída pelo final. Entrada e saída de dados em qualquer local. Respondido em 06/05/2019 20:36:27 Explicação: Na fila insere-se no fim e retira-se no início, usando a lógica da FIFO onde o primeiro que entra é o primeiro a sair Gabarito Coment. 4a Questão Ao treinar macacos, foi realizado um jogo para avaliar sua memória. O cientista fornecia sequências de cartas com figuras geométricas e o macaco devia reproduzir a mesma sequência usando figuras geométricas reais. Qual a estrutura de dados mais adequada para modelar esse jogo ? pilha fila lista grafo árvore Respondido em 06/05/2019 20:36:59 Explicação: Fila é baseada na lógica FIFO, o primeiro a entrar será o primeiro a sair da fila. Portanto, como as cartas serão retornadas na mesma ordem da entrada, a resposta certa é fila. Veja porque não podem ser as outras opções: Não pode ser pilha, pois pilha retorna os valores na ordem inversa à ordem de entrada. Não pode ser lista porque na lista insere-se ou retira-se de qualquer posição. Não pode ser Árvore ou Grafo pois são não lineares e o problema descrito é linear. 5a Questão Sobre pilhas, lista e filas, considere as afirmativas a seguir. I. As estruturas de dados pilhas, filas e listas armazenam coleções de itens. A característica que as distinguem é a ordem em que podem ser retirados os itens dessas coleções e a ordem em que foram inseridos. II. Considere que os itens A, B, C, D, E foram inseridos nessa ordem em uma fila. Necessariamente, o primeiro elemento a ser removido dessa fila é o elemento A. III. Considere que os itens A, B, C, D, E foram inseridos nessa ordem em uma pilha. Necessariamente, o último elemento a ser removido dessa pilha é o elemento E. IV. Considere que os itens A, B, C, D, E foram inseridos nessa ordem em uma lista. Necessariamente, o primeiro elemento a ser removido dessa lista é o elemento A. Somente as afirmativas I e IV são corretas. Somente as afirmativas III e IV são corretas. Somente as afirmativas I e II são corretas. Todas as afirmativas estão corretas Somente as afirmativas I, II e III são corretas. Respondido em 06/05/2019 20:44:04 Explicação: Analisando cad afirmativa: I. As estruturas de dados pilhas, filas e listas armazenam coleções de itens. A característica que as distinguem é a ordem em que podem ser retirados os itens dessas coleções e a ordem em que foram inseridos. >>>>>Verdadeira. A pilha segue a lógica LIFO, fila segue a lógica FIFO e em uma lista insere-se e retira- se de qualquer posição. II. Considere que os itens A, B, C, D, E foram inseridos nessa ordem em uma fila. Necessariamente, o primeiro elemento a ser removido dessa fila é o elemento A. >>>>> Verdadeira. O 1o. a entrar, será o 1o. a sair. III. Considere que os itens A, B, C, D, E foram inseridos nessa ordem em uma pilha. Necessariamente, o último elemento a ser removido dessa pilha é o elemento E. >>>>> FAlso. O último a entrar foi o E, portanto, pela lógica LIFO é o primeiro a sair. IV. Considere que os itens A, B, C, D, E foram inseridos nessa ordem em uma lista. Necessariamente, o primeiro elemento a ser removido dessa lista é o elemento A. >>>> Falso. Em uma lista insere-se em qualquer posição e retira-se de qualquer posição. Logo, as afirmativa I e II estão corretas. 6a Questão Complete os espaços na afirmativa abaixo e assinale a alternativa que apresenta as respostas corretas: O escalonamento .................... é do tipo.................., em que o processo que chegar primeiro na fila de pronto é o escolhido para ser executado. LIFO, não-preemptivo. FIFO, não-preemptivo. Circular, não-preemptivo. SJF (Shortest-Job-First), preemptivo. Por prioridades, preemptivo. Respondido em 06/05/2019 20:37:33 Explicação: O algoritmo de escalonamento FIFO (First in, first out, em português: "O primeiro a entrar é o primeiro a sair, sigla PEPS), ou FCFS(First come, first served, em português: "O primeiro a chegar é o primeiro a ser servido") é conhecido popularmente por Algoritmo de Fila Simples, é uma estrutura de dados que apresenta o seguinte critério: O primeiro elemento a ser retirado é o primeiro que tiver sido inserido, é um algoritmo de escalonamento não preemptivo que entrega a CPU os processos pela ordem de chegada. Ele executa o processo como um todo do inicio ao fim não interrompendo o processo executado até ser finalizado, então quando um novo processo chega e existe um ainda em execução ele vai para uma fila de espera. Esta fila de espera nada mais é do que uma fila que organiza os processos que chegam até eles serem atendidos pela CPU. Neste escalonamento todos os processos tendem a serem atendidos (por isso evita o fenômeno do starvation) ao menos que um processo possua um erro ou loop infinito. O loop infinito irá parar a máquina, pois com o FIFO não terá como dar continuidade a execução dos processos que estão aguardando na fila de espera. O algoritmo FIFO não garante um tempo de resposta rápido pois é extremamente sensível a ordem de chegada de cada processo e dos antecessores (se existirem) e se processos que tendem a demorar mais tempo chegarem primeiro o tempo médio de espera e o turnaround acabam sendo aumentados. 7a Questão Considere uma fila circular de tamanho 5, contendo os valores A, Z e C. Assim, o início está na posição 0 (zero) e o fim na posição 2 (dois). Dica: O vetor inicia na posição 0 (zero). Supondo agora que as seguintes operações ocorrerão na lista: 1. D é inserido 2. H é inserido 3. Um elemento é deletado 4. F é inserido 5. Um elemento é deletado Qual os valores de início e fim ao final dessas operações? Nenhuma das opções Início 0 e fim 0 inicio 2 e fim 0 Início 1 e fim 4 Início 4 e fim 4 Respondido em 06/05/2019 20:42:29 Explicação: Inicialmente temos inicio em 0 e fim em 2, sendo A no início e C no fim da fila. Ao termos D inserido ->>> A -> Z -> C -> D onde inicio é zero e fim é 3. Ao termos H inserido ->>> A -> Z ->C -> D -> H onde inicio é zero e fim é 4 Ao ser deletado um valor, o A sai. Então Z->C -> D -> H, onde inicio é 1 e fim é 4. Ao termos F inserido : Z->C -> D -> H -> F, onde inicio é 1 e fim é 0 Ao ser deletado um valor, o Z sai. Então C -> D -> H -> F, onde inicio é 2 e fim é 0 8a Questão O que acontece quando se deseja inserir um elemento em uma FILA que já está cheia? Underflow. Dequeue. Overflow. A inserção é feita sem problema. Enqueue. ESTRUTURA DE DADOS 7a aula LupaVídeo PPT MP3 1a Questão As filas sequenciais são estruturas de dados utilizadas em diversas aplicações, tais como fila de processo, fila de impressão, sistemas de senha etc. Entretanto, nas aplicações onde há muita movimentação de dados, inserções e remoções de dados na fila, surgem espaços ociosos que podem levar ao fenômeno chamado de esgotamento de memória. Para sanar este problema pode- se substituir a fila sequencial por: lista sequencial pilha circular lista circular pilha sequencial fila circular Respondido em 06/05/2019 20:47:18 Gabarito Coment. 2a Questão A estrutura de dados conhecida pela lógica FIFO (First In First Out) é denominada : Lista circular Vetor Fila Pilha Árvore Respondido em 06/05/2019 20:46:49 Explicação: Fila é, por definição, uma lista linear ordenada em que as inserções e remoções seguem a lógica FIFO. 3a Questão Ao inserirmos em uma estrutura de dados do tipo fila sequencial os seguintes elementos: A, B, C, D, exatamente nesta ordem. E em seguida realizarmos duas operações consecutivas de remoção na fila e imediatamente inserirmos dois novos elementos o X e o W. Podedmos afirmar que se realizarmos uma nova operação de remoção, o elemento que será removido desta fila sera o: A X D C W Respondido em 06/05/2019 20:47:51 Gabarito Coment. Gabarito Coment. Gabarito Coment. 4a Questão Assinale a opção que, corretamente, mostra exemplos em que a estrutura de dados fila é usada, de acordo com o critério de inserções e remoções que rege tal estrutura. Fila de arquivos para impressão e fila de pessoas no caixa de um supermercado. Fila de pessoas para tirar o visto e fila de pessoas para usar o caixa eletrônico. Buffer para gravação de dados em mídia e fila de pessoas para comprar o ticket do metrô. Fila de arquivos para impressão e buffer para gravação de dados em fila. Fila de documentos para xerox e fila de arquivos para impressão. Respondido em 06/05/2019 20:48:57 Gabarito Coment. 5a Questão Pode-se citar os seguintes exemplos de aplicação da estrutura fila: Fila de arquivos para impressão: Atendimento de processos requisitados a um sistema operacional. Buffer para gravação de dados em mídia. O tratamento do armazenamento das teclas que estão sendo digitadas antes da tecla enter ser pressionada. Agora analise as seguintes afirmativas: I- Uma fila guarda a ordem direta em que os elementos foram armazenados. II- Uma fila guarda a ordem reversa em que os elementos foram armazenados. III- O algoritmo que é implementado em uma fila é baseao no princípio: " O último a entrar é o primeiro a sair". IV- O algoritmo que é implementado em uma fila é baseao no princípio: " O primeiro a entrar é o primeiro a sair". Marque a alternativa correta: II e Iv estão corretas I e IV estão corretas II e III estão corretas Apenas a IV está correta I e III estão corretas Respondido em 06/05/2019 20:50:01 Gabarito Coment. Gabarito Coment. Gabarito Coment. 6a Questão Um aluno do EAD estava estudando para a prova de Estrutura quando viu o trecho do programa abaixo em uma apostila. Como não estava com seu micro, começou a analisar a função entra(...), ficando atento a alguns membros da struct. Quando finalizou, virou a página da apostila e viu a resposta. Então, ficou muito feliz por ter identificado a estrutura Assinale a alternativa onde está presente a resposta correta. Lista simplesmente encadeada Fila Circular Pilha Fila Lista Linear Respondido em 06/05/2019 20:50:29 Gabarito Coment. 7a Questão Analisando a figura abaixo, marque a alternativa correta que apresenta o tipo de estrutura de dados utilizado. Hash Matriz Struct Fila Pilha Respondido em 06/05/2019 20:50:43 Explicação: Na fila insere-se no fim e retira-se do início. Gabarito Coment. 8a Questão Para organizar o acesso dos processos que demandam recursos do computador (uso da CPU, acesso ao disco rígido e a outros dispositivos de Entrada e Saída), o Sistema Operacional gerencia essas demandas colocando os processos requisitantes em: Listas Pilhas Filas Structs Árvores Respondido em 06/05/2019 20:51:00 Explicação: Um exemplo de aplicação de fila : fila de processos para CPU. O primeiro processo a chegar fará uso da CPU. O mesmo para os dispostivos de I/O. ESTRUTURA DE DADOS 8a aula Lupa Vídeo PPT MP3 1a Questão 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->valor=5.60; pt->5.60; pt.valor->5.60; pt->próximo.valor=5.60; pt->próximo->valor=5.60; Respondido em 23/05/2019 20:16:39 Explicação: O codigo será: pt->valor=5.60; 2a Questão As variáveis são na verdade trecho de memórias que armazenam dados de diversas naturezas, portanto sempre que declara-se uma variável, na linguagem C++, é necessário informar o tipo de dado que esta irá armazenar. Um tipo especial de variáveis são os ponteiros, isto é, variáveis que armazenam apenas os endereços de outras variáveis. Assim os ponteiros são usados para que se possa acessar de forma indireta uma outra variável. Sabendo-se disto e supondo que o endereço na memória da variável "a" é 100 e o endereço da memória da variável ponteiro é 200, analise o trecho de código abaixo e marque a alternativa que representa a saída do programa: 100 9 200 200 9 100 9 9 200 100 100 200 9 100 200 Respondido em 23/05/2019 20:18:25 Explicação: 100 ===> endereço da memória da variável a 9 ===> valor da variável a 200 ===> endereço da memória da variável ponteiro 3a Questão Marque a afirmativa que represente uma separação. 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. 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. Intercalar a ordem dos dados da lista do final para o início, atualizando a lista. Respondido em 23/05/2019 20:18:47 Gabarito Coment. 4a Questão O conceito de ponteiros foi estudado em uma de nossas aulas. Sendo assim, leia atentamente as afirmativas abaixo e assinale a opção correta. I A variável ponteiro não precisa ser declarada. II A variável ponteiro armazena endereço. III Quanto se usa &nomeDaVariávelPonteiro com o comando cout, é exibido o endereço da variável apontada pela variável ponteiro. IV Quando se usa nomeDaVariávelPonteiro com o comando cout, é exibido o endereço da variável ponteiro. V Quando se usa *nomeDaVariávelPonteiro com o comando cout, é exibido o conteúdo da variável apontada pela variável ponteiro. IV e V estão corretas Somente a II está correta II e V estão corretas I IV e V estão corretas I, II e IV estão corretas Respondido em 23/05/2019 20:24:54 Gabarito Coment. 5a Questão 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çode 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. As afirmações I, II e III estão corretas. Apenas as afirmações I e II estão corretas. Apenas a afirmação I está correta. Apenas a afirmação II está correta. Respondido em 23/05/2019 20:21:04 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. 6a Questão Tenho uma lista não ordenada de clientes em que registro apenas a matrícula, o nome, o endereço e o telefone de cada cliente. Como não tenho limites para o crescimento da minha lista, como posso implementar a inserção de um novo cliente na lista, sabendo que cada cliente é do tipo Cliente e a lista é do tipo Lista assim definidos : struct Cliente { long int matricula; string nome, endereco, tel; }; struct Lista { Cliente c; struct Lista *link; }; Lista * insereCliente(Lista *p) { Lista *novo = new Lista; Cliente cl; novo->c = cl; novo->link = p; return novo; } Lista * insereCliente(Lista *p, Cliente cl) { Lista *novo = new Lista; novo->c = cl; novo->link = p; return novo; } Lista * insereCliente(Lista *p, Cliente cl) { Lista *novo ; novo->c = cl; novo->link = p; return novo; } Lista * insereCliente(Lista *p, Cliente cl) { Lista *novo = new Lista; novo.c = cl; novo.link = p; return novo; } Lista insereCliente(Lista *p, Cliente cl) { Lista novo[]; novo[0].c = cl; novo[0].link = p; return novo; } Respondido em 23/05/2019 20:23:52 Gabarito Coment. 7a Questão Considerando a afirmação: "Ponteiro é uma variável que armazena o endereço de outra variável", a forma correta de se atribuir ao ponteiro p o endereço de uma variável é *p = matricula; p.matricula = 20170562; char *p; p = &matricula; p->matricula = 20170562; Respondido em 23/05/2019 20:21:30 Explicação: Analisando na sequência : Falsa. Declara um ponteiro para char. Falsa. Acessa o campo de uma struct apontada por um ponteiro p. Falsa. Acessa o campo de uma struct, sem usar ponteiro. Verdadeira. Faz um ponteiro p receber o endereço de uma variável matricula. Falsa. ACessa a área apontada por um ponteiro e atribui o valor de matricula. 8a Questão 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 pac) { List *novo = new List; novo.p = pac; novo.link = i; return novo; } List * inserePac(List *i) { List *novo = new List; Paciente pat; novo->p = pat; novo->link = i; return novo; } List * inserePac(List *i, Paciente pt) { List *novo = new List; novo->p = pt; 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, Paciente pt){ List *novo ; novo->p = pt; novo->link = i; return novo; } ESTRUTURA DE DADOS 9a aula Lupa Vídeo PPT MP3 1a Questão Seja o seguinte exemplo de nodo de uma lista de encadeada: struct nodo{ float valor; string produto; nodo * proximo; }; Sabendo-se que nesta lista o último nó ou nodo possui o campo próximo nulo (null), marque a alternativa que representa corretamente a operação de busca do último nodo, a partir de um ponteiro pt apontado para o primeiro nodo da lista. while(pt->próximo)pt=pt->próximo; while(próximo)pt=próximo; while(pt->próximo->proximo)pt=pt->próximo; while(pt->próximo != null)pt=pt->próximo->proximo; while(pt != null)pt=pt->próximo; Respondido em 23/05/2019 20:53:48 Explicação: O código será: while(pt->próximo)pt=pt->próximo; 2a Questão Para converter de decimal para binário usamos a estrutura de dados pilha. Assinale a opção que, corretamente, indica as ações corretas para empilhar o resto da divisão gerado no processo de conversão, considerando uma lista simplesmente encadeada. Considere o tipo definido abaixo : struct no { int dado; struct no *link; }; Não é necessário alocar memória com new. Basta criar uma struct do tipo no, armazenar o resto da divisão número por 2 no campo dado e aterrar o campo link. Basta alocar memória com new e armazenar o resto da divisão do número por 2 no campo dado do novo nó . É preciso armazenar o resto da divisão do número por 2 no campo dado do primeiro nó da lista e retornar o ponteiro para este nó. Basta alocar memória com new, armazenar o resto da divisão do número por 2 no campo dado do novo nó e aterrar o link do novo nó. É preciso alocar memória com new, armazenar o resto da divisão do número por 2 no campo dado do novo nó, apontar o link do novo nó para o início da lista e enfim, retornar o ponteiro para o novo nó. Respondido em 23/05/2019 20:54:02 Gabarito Coment. 3a Questão Estava um aluno estudando Lista Simplesmente Encadeada quando encontrou em um site a definição da struct nodo e de uma função cujo nome você deverá escolher para substituir XXX nas opções abaixo depois que analisar a função, assumindo que teste foi realizado, permitindo que a operação fosse realizada. struct nodo { int info; struct nodo *prox; }; nodo* XXX(nodo *ptr, int valor) { nodo *temp = new nodo; ... temp->info = valor; temp->prox = ptr; return temp; } BuscaNaLista RemoveNo InsereNoFrente ListaNo InsereNoFim Respondido em 23/05/2019 20:54:47 Gabarito Coment. 4a Questão Sobre uma estrutura de dados do tipo LIFO, observe as seguintes afirmações: (1) É uma pilha. (2) Pode ser uma fila com prioridades (3) É uma estrutura onde o primeiro elemento a entrar é o último a sair. Sobre estas afirmações marque a opção correta: Todas as afirmações são falsas Todas as afirmações são verdadeiras Apenas as afirmações (1) e (3) são verdadeiras Apenas a afirmação (1) é verdadeira Apenas a afirmação (3) é verdadeira Respondido em 23/05/2019 20:55:05 5a Questão Em termos da estrutura de dados do tipo FILA (fila encadeada com alocação dinâmica), a sequência de ações insere(10), insere(3), insere(5), insere(8), remove(), remove(), insere(20), promoveria a configuração da estrutura: 10 3 20 10 3 5 8 20 5 8 20 20 5 8 5