Buscar

EXERCICIOS E SIMULADOS ESTRUTURA DE DADOS

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 45 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 45 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 45 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

EXERCICIOS E SIMULADOS ESTRUTURA DE DADOS
		ESTRUTURA DE DADOS
1a aula
		
	 
	Lupa
	 
	 
	
	
PPT
	
MP3
	 
		Exercício: CCT0826_EX_A1_201903343721_V1 
	21/09/2019
	Aluno(a): EDICARLOS NOGUEIRA DE ARAUJO
	2019.3 EAD
	Disciplina: CCT0826 - ESTRUTURA DE DADOS 
	201903343721
	
	 
	
	 1a Questão
	
	
	
	
	Qual estrutura de dados é mais adequada para armazenar a estrutura do diretório do sistema de arquivos de um sistema operacional?
		
	
	Grafo
	
	Lista
	
	Pilha
	
	Fila
	 
	Árvore
	Respondido em 21/09/2019 15:12:42
	
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.
	
	
	 
	
	 2a 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
	
	a2, b2, c1, d2.
	
	a1, b2, c1, d1.
	
	a1, b1, c2, d2.
	 
	a2, b1, c2, d1.
	Respondido em 21/09/2019 15:14:31
	
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.
	
	 
	
	 3a Questão
	
	
	
	
	A forma correta para imprimir o valor do último elemento de um vetor v com n posições é:
		
	
	cout << v[ultimo];
	
	cout << v[n+1];
	
	cout << v[n];
	
	cin >> v[-1];
	 
	cout << v[n-1];
	Respondido em 21/09/2019 15:16:39
	
	
	 
	
	 4a Questão
	
	
	
	
	Estão entre algumas das possíveis formas de se estruturar dados:
		
	
	Algoritmos, lista ordenada, vetores.
	
	Grafos, lista ordenada, algoritmos.
	 
	Grafos, lista ordenada, vetores.
	
	Grafos, algoritmos, fila.
	
	Lista encadeada, vetores, algoritmos.
	Respondido em 21/09/2019 15:18:08
	
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.
	
	 
	
	 5a 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:
		
	
	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 de deleção de dados em um 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 21/09/2019 15:19:34
	
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.
	
	 
	
	 6a Questão
	
	
	
	
	É um exemplo de TAD Não Linear:
		
	
	Pilhas
	
	Filas de Prioridade
	
	Filas
	
	Listas
	 
	Grafos
	Respondido em 21/09/2019 15:21:08
	
Explicação: Um grafo é um tipo de dados abstrato não linear
	
	
	 
	
	 7a 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 de 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 I e II estão corretas
	 
	Todas as alternativas estão corretas.
	
	As alternativas III e IV estão corretas.
	
	As alternativas I e III estão corretas.
	
	As alternativas II e IV estão corretas.
	Respondido em 21/09/2019 15:22:15
	
	
	 
	
	 8a Questão
	
	
	
	
	O que é estrutura de dados?
		
	
	É um conjunto de técnicas de programação.
	
	É uma forma determinada de armazenamento de dados em um banco de dados.
	 
	É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente.
	
	É um conjunto de comandos para uma tarefa específica referenciada por um nome no algoritmo principal, retornando um determinado valor no seu próprio nome.
	
	É uma sequência finita de instruções bem definidas e não ambíguas, cada uma das quais devendo ser executadas mecânica ou eletronicamente em um intervalo de tempo finito e com uma quantidade de esforço finita.
	Respondido em 21/09/2019 15:22:28
	
Explicação:
Estrutura de dados não é banco de dados . Estrutura de dados não é Tipo de dados.
Estrutura de dados não é ¿ É um conjunto de comandos para uma tarefa específica referenciada por um nome no algoritmo principal, retornando um determinado valor no seu próprio nome¿ que no caso, fala de função.
 
Estrutura de dados não é ¿ É uma sequência finita de instruções bem definidas e não ambíguas, cada uma das quais devendo ser executadas mecânica ou eletronicamente em um intervalo de tempo finito e com uma quantidade de esforço finita.¿    Esta definição é de algoritmo.
 
Portanto, Estrutura de Dados é ¿ É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados eficientemente.¿
 
Na Aula 1 do conteúdo online há elementos para tal questão.
	ESTRUTURA DE DADOS
CCT0826_A2_201903343721_V1
	
		Lupa
	 
	Calc.
	
	
	 
	 
	 
	
	
PPT
	
MP3
	 
		Aluno: EDICARLOS NOGUEIRA DE ARAUJO
	Matr.: 201903343721
	Disc.: ESTRUTURA DE DADOS 
	2019.3 EAD (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.
		#include  < iostream  >
 using namespace std;
void SOMA(float a, int b)  {
  float result  =  a+b;
  cout << "A soma de " << a << " com " << b << " é: " << result;
}
int main()
{
int a;
float b;
a = 10; b = 12.3;
SOMA(b,a);
}
A função SOMA acima possui as seguintes características :
	
	
	
	Retorna valor e não  possui parâmetros.
	
	
	Retorna valor e possui parâmetros.
	
	
	Retorna valor.
	
	
	Não retorna valor e não   possui parâmetros.
	
	
	Não retorna valor e possui parâmetros.Explicação:
A função
void SOMA(float a, int b)  {
  float result  =  a+b;
  cout << "A soma de " << a << " com " << b << " é: " << result;
}
tem o tipo de retorno void, o que significa que nenhum valor é retornado. Além disso, a função possui 2 parâmetros, que são a e b.
Logo, a resposta certa é  Não retorna valor e possui parâmetros.
	
	
	
	 
		
	
		2.
		 
	
	
	
	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 executa perfeitamente, mas não mostra o valor da media já que esta função não foi chamada na função main( ).
	
	
	O programa executa perfeitamente independente da ordem das funções já que existem os seus protótipos.
	
	
	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 não executa corretamente, pois os protótipos estão fora da ordem em que as funções são descritas.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		3.
		No programa abaixo, diga em que área de memória serão alocados os elementos de dados y e r, respectivamente.
#include
using namespace std;
int x, y;
float media( float a, float b )
{ float tmp;
tmp = (a + b ) / 2.0;
return ( tmp );
}
int main()
{
float r;
cout<<"Informe 2 valores: ";
cin>>x>> y;
r = media( x, y );
cout<<"\nMedia = "<< r<<"\n";
system ("pause");
}
	
	
	
	( ) área de dados globais / área de pilha
	
	
	( ) área de dados globais / área de registro
	
	
	( ) área de pilha / área de registro
	
	
	( ) área de registro / área de dados globais
	
	
	( ) área de registro / área de pilha
	
Explicação:
Como y e r são variáveis, ficarão armazenadas em  na área de dados globais / área de pilha
	
	
	
	 
		
	
		4.
		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: 31 01
	
	
	Valores: 10 13
	
	
	Valores: 10 10
	
	
	Valores: 13 13
	
	
	Valores: 13 10
	
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
	
	
	
	 
		
	
		5.
		Considere a função abaixo:
void func (int a, int &b) {
    a++;
    b = a*2;
}
e o seguinte trecho de código na função  main :
int x=2, y=3;
func (x,y);
func (y,x);
cout << x << "  ;  " << y;
Após a execução do cout o que será impresso  ? 
	
	
	
	2; 12
	
	
	2; 6
	
	
	4; 12
	
	
	6; 14
	
	
	14; 6
	
Explicação:
  Fazendo um teste de mesa, chegaremos na opção correta.  Iniciando a execução pela main, temos que x recebe 2 e y recebe 3.  
Em seguida, na 1ª. chamada de func,  os valores de x e de y, respectivamente, 2 e 3, são passados para a função.
Executando a função func, que possui o parâmetro a  passado por valor e o parâmetro b passado por referência (usa &) ...
void func (int a, int &b) {
a++;
b = a*2;
}
Temos que a recebeu 2 e b recebeu 3. Daí, a ficará 3 e b receberá 6.  
Assim, ao terminar a função func e retornarmos para a main teremos x sem alteração igual a 2 e y com alteração igual a 6.
Após voltarmos para a main, temos uma nova chamada de func que recebe os valores de y e de x, respectivamente, que são 6 e 2.  Na 2ª. chamada de func para esses valores, teremos que a recebe 6 e y recebe 2.  Dentro da função, temos que a é incrementado para 7 e que b recebe 7 * 2 que dá 14. Ao terminarmos a execução da função, temos que y não sofreu mudança, ficando com o valor 6  e que x mudou para 14.  Logo, será impresso 14;6
Logo, as demais opções são incorretas.
 
	
	
	
	 
		
	
		6.
		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
	
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
 
 
 
	
	
	
	 
		
	
		7.
		Considere a função:
void dobro(int x) {
      x = 10 * x;
}
Qual será o valor impresso na tela quando o programa principal for executado?
int main() {
int n;
n = 5;
dobro(n);
cout << n;
return 0;
}
 
	
	
	
	10
	
	
	5
	
	
	0
	
	
	50
	
	
	Haverá um erro de compilação
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		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 protótipo da função.
	
	
	o tipo dos dados dos parâmetros que são passados à função quando da sua chamada.
	
	
	o tipo do dado do valor retornado da função para quem a chamou.
	
	
	o escopo das variáveis do programa.
	
	
	o tipo das variáveis que serão utilizadas dentro da função.
	
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.
	ESTRUTURA DE DADOS
CCT0826_A3_201903343721_V1
	
		Lupa
	 
	Calc.
	
	
	 
	 
	 
	
	
PPT
	
MP3
	 
		Aluno: EDICARLOS NOGUEIRA DE ARAUJO
	Matr.: 201903343721
	Disc.: ESTRUTURA DE DADOS 
	2019.3 EAD (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.
		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->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; }
	
	
	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; }
	
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.
	 
 
 
	
	
	
	 
		
	
		2.
		Marque a afirmativa correta para a "Inserção em lista linear sequencial ordenada".
	
	
	
	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 adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos.
	
	
	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 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.
	
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.
	
	
	
	 
		
	
		3.
		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]=5.7;
	
	
	vet[10]=aluno.5.7;
	
	
	vet[10].aluno.nota=5.7 ;
	
	
	vet[10].nota=5.7;
	
	
	aluno.vet[10].nota=5.7;
	
	
	
	 
		
	
		4.
		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].media=6.0;
	
	
	aluno[3].media=6.0;
	
	
	vet[3].aluno=6.0;
	
	
	aluno[10]=6.0;
	
	
	aluno[3].10=6.0;
	
	
	
	 
		
	
		5.
		Marque a opção correta, considerando
struct Livro {
int codigo;
float preco;
} liv;
	
	
	
	Livro.codigo = 12345;
	
	
	Livro.liv.codigo = 12345;
	
	
	Livro->liv.codigo = 12345;
	
	
	liv->preco = 30.70;
	
	
	liv.preco = 30.70;
	
	
	
	 
		
	
		6.
		Com relação à struct,  é correto afirmar que :
	
	
	
	Cada elemento da struct é denominado membro ou campo, sendo que a struct pode armazenar elementos de tipos diferentes ou não.
	
	
	A struct é sempre definida dentro da main.
	
	
	Cada elemento da struct é chamado campo e cada campo deve ser, obrigatoriamente, de um tipo de dados distinto de outro campo.
	
	
	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.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		7.
		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 III.
	
	
	estão corretas apenas as afirmativas II, III e IV.
	
	
	estão corretas apenas as afirmativas I, III e IV.
	
	
	estão corretas apenas as afirmativas I, II e IV.
	
	
	todas as afirmativas estão corretas.
	
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.
	
	
	
	 
		
	
		8.
		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.
	
	
	
	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;
}
	
	
	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; 
            }
}
	
	
	int ordena(float v[], float valor, int n){
   for (int i = 0; i < n; i++)
     if (v[i] == valor)
       return i;
   return -1;
}
	
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
CCT0826_A4_201903343721_V1
	
		Lupa
	 
	Calc.
	
	
	 
	 
	 
	
	
PPT
	
MP3
	 
		Aluno: EDICARLOS NOGUEIRA DE ARAUJO
	Matr.: 201903343721
	Disc.: ESTRUTURA DE DADOS 
	2019.3 EAD (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.
		Analise o seguinte trecho de algoritmo de ordenação de dados, cujos elementos estão dispostos em um vetor de nome v com n elementos.
...
{
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;
}
}
...
Assinale o método ao qual o trecho de algoritmo pertence.
	
	
	
	Heapsort
	
	
	Bolha
	
	
	Seleção
	
	
	Quicksort
	
	
	Inserção
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		Considere as afirmativas a seguir.
I. Uma forma muito simples de fazer uma busca em um vetor consiste em percorrer o vetor, elemento a elemento, para verificar se o elemento procurado é igual a um dos elementos do vetor.
II. A pesquisa sequencial é extremamente simples e eficiente quando o número de elementosdo vetor for muito grande.
III. Na pesquisa binária, a cada interação do algoritmo o tamanho do vetor é dividido ao meio.
IV. A pesquisa binária funciona corretamente quanto o conjunto de dados estiver desordenado.
Assinale a alternativa correta.
	
	
	
	Somente as afirmativas III e IV são corretas.
	
	
	Somente as afirmativas I e IV são corretas.
	
	
	Somente as afirmativas I e III são corretas.
	
	
	Somente as afirmativas I e II são corretas.
	
	
	Somente as afirmativas II, III e IV são corretas.
	
Explicação:
Analisando cada afirmativa :
I. Uma forma muito simples de fazer uma busca em um vetor consiste em percorrer o vetor, elemento a elemento, para verificar se o elemento procurado é igual a um dos elementos do vetor.
Correto. SEria uma busca sequencial.
II. A pesquisa sequencial é extremamente simples e eficiente quando o número de elementos do vetor for muito grande.
Falso. Se tivermos que procurar um elemento que está no fim do vetor ou que não seja encontrado, o tempo de execução será proporcional ao número de elementos. Então, quanto maior a lista, mais tempo levaremos.
III. Na pesquisa binária, a cada interação do algoritmo o tamanho do vetor é dividido ao meio.
Correto.
IV. A pesquisa binária funciona corretamente quanto o conjunto de dados estiver desordenado.
Falso. Por definição, a busca binária só pode atuar em listas ordenadas.
Logo, apenas as afirmativas I  e   III estão corretas.
	
	
	
	 
		
	
		3.
		"Algoritmo de ordenação por trocas  que varre um vetor um certo número de vezes, comparando os elementos vizinhos dois a dois. A cada varredura, se o par de elementos está em ordem crescente, nada é feito, caso contrário os elementos do par são permutados". Esta definição está descrevendo o algoritmo de ordenação conhecido por :
	
	
	
	MergeSort
	
	
	SelectionSort
	
	
	BubbleSort
	
	
	InsertionSort
	
	
	QuickSort
	
Explicação:
Das opções apresentadas, as únicas que são ordenações por troca são Bubblesort e Quicksort.
Dessas  duas ordenações, a única que trabalha com duplas de elementos  vizinhos é o Bubblesort. O Quicksort, que está fora do escopo da disciplina, trabalha com pivô.
	
	
	
	 
		
	
		4.
		Sobre o funcionamento da busca binária, é correto afirmar que dividindo seu vetor em duas metades.
	
	
	
	Se o item for menor que o item que está na metade do vetor, procure na segunda metade, ou seja, a da direita.
	
	
	Se o item for igual ao item que está na metade do vetor, o item foi encontrado.
	
	
	Se o item for maior que o item que está na metade do vetor procure na primeira metade, ou seja, a da direita.
	
	
	Se o item for igual ao item que está na metade do vetor, o item não foi encontrado.
	
	
	Se o item for menor que o item que está na metade do vetor, o item foi encontrado.
	
Explicação:
Neste tipo de busca, o vetor deve estar ordenado.
Divide-se o conjunto de dados ao meio e procura-se no meio do vetor. Se achou, retorna a posição do dado do meio. SE não achou, verifica-se se o valor procurado vem antes do  valor do meio. Se for verdade,  redefine-se o fim do vetor, voltando a realizar a busca à esquerda do meio. Se o valor procurado vier depois do valor do meio do vetor, então redefine-se o início e segue-se para a busca na parte à direita do meio do vetor.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		5.
		O resultado do concurso para o cargo de uma empresa está armazenado em um vetor, que contém em cada um de seus elementos o nome e a nota obtida pelo candidato. Deseja-se que este vetor seja ordenado pela nota, em ordem decrescente. Sendo o vetor pequeno (poucos elementos), o programador responsável por desenvolver este algoritmo, escolheu um método de ordenação que executa os seguintes passos:
· Selecione candidato com maior nota entre todos e troque-o com o candidato que está na primeira posição do vetor;
· Selecione o segundo maior e troque-o com o candidato que está na segunda posição;
· Os passos descritos anteriormente são seguidos para a terceira nota, quarta nota e assim por diante até que reste apenas um candidato.
O algoritmo utilizado pelo programador trata-se do método de ordenação denominado:
	
	
	
	Quicksort
	
	
	Inserção
	
	
	Seleção
	
	
	Bolha
	
	
	Heapsort
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		Entre os diversos algoritmos de pesquisa existentes, certamente os mais famosos são os da pesquisa sequencial e o da pesquisa binária. A busca ou pesquisa sequencial pode ser aplicada em vetores independente destes estarem ordenados, entretanto a busca binária só se aplica em vetores ordenados. Seja o vetor A= {10,35,41,55,69,70,98}, suponha que o número 70 foi pesquisado pelo algoritmo da busca sequencial e também pelo algoritmo da busca binária, ambos algoritmos realizam testes nos elementos do vetor até achar o que procuram ou definirem que o elemento não se encontra no vetor. Sendo assim marque a alternativa que expressa o número de testes realizados pela busca sequencial e o número de testes realizados pela busca binária, respectivamente, até encontrarem o 70.
	
	
	
	7 e 1
	
	
	6 e 1
	
	
	6 e 4
	
	
	5 e 5
	
	
	6 e 2
	
	
	
	 
		
	
		7.
		Os métodos de ordenação são muito utilizados para facilitar a recuperação posterior de itens ordenados. Existem vários métodos de ordenação, por esse motivo, assinale corretamente a alternativa que mostra o nome do método que utiliza a estratégia de ordenação por trocas de vizinhos e é considerado o método mais simples.
	
	
	
	Inserção
	
	
	Bolha
	
	
	Binária
	
	
	Seleção
	
	
	Hash
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		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
	
	
	Quicksort
	
	
	Mergesort
	
	
	Bublesort
	
	
	Shellsort
	ESTRUTURA DE DADOS
CCT0826_A5_201903343721_V1
	
		Lupa
	 
	Calc.
	
	
	 
	 
	 
	
	
PPT
	
MP3
	 
		Aluno: EDICARLOS NOGUEIRA DE ARAUJO
	Matr.: 201903343721
	Disc.: ESTRUTURA DE DADOS 
	2019.3 EAD (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.
		Com relação as listas lineares sequenciais:
I - Uma lista linear sequencial é um vetor em linguagens estruturadas, também chamado de array.
II - Um elemento de uma lista linear sequencial pode ser acessado diretamente através de um índice.
III - Uma lista linear sequencial pode ter elementos de um mesmo tipo, ou de tipos diferentes.
	
	
	
	Apenas as afirmações II está corretas.
	
	
	Apenas as afirmações II e III estão corretas.
	
	
	Apenas a afirmação I está correta.
	
	
	Apenas as afirmações I e III estão corretas.
	
	
	Apenas as afirmações I e II estão corretas.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		Considere as seguintes afirmações sobre Listas Sequenciais:
I  - São estruturas lineares que utilizam as primeiras posições de um vetor para armazenar os dados de interesse.
II - São compostas pelo conjunto dos dados que se deseja armazenar e por uma variável inteira que indica a quantidade de dados armazenados.
III - Os dados são sempre inseridos ou removidos no final da lista, tomando-seo cuidado de atualizar a quantidade de dados da mesma.
IV - A lista pode admitir ou não admitir que haja dados repetidos (listas podem ser com ou sem repetição).
Marque a opção que contém apenas todas  as afirmações verdadeiras:
	
	
	
	I, II, III, IV
	
	
	I, III, IV
	
	
	I, II, III
	
	
	I, II
	
	
	I, II, IV
	
Explicação:
Analisando cada afirmativa :
 
I  - São estruturas lineares que utilizam as primeiras posições de um vetor para armazenar os dados de interesse.
Verdadeiro.  As inserções vão ocorrendo do início do vetor (índice zero) em direção ao fim.
II - São compostas pelo conjunto dos dados que se deseja armazenar e por uma variável inteira que indica a quantidade de dados
armazenados.
Verdadeiro. Armazenam-se os dados  e controla-se a quantidade de dados na lista.
III - Os dados são sempre inseridos ou removidos no final da lista, tomando-se o cuidado de atualizar a quantidade de dados 
da mesma.
Falso. A inserção pode ser no início,  no meio ou no final da lista. Na verdade, pode ocorrer inserção e remoção em qualquer  posição.
IV - A lista pode admitir ou não admitir que haja dados repetidos (listas podem ser com ou sem repetição).
Verdadeiro.  Uma lista pode ou não ter dados repetidos.
Resposta certa : As afirmativas I, II, IV estão certas
	
	
	
	 
		
	
		3.
		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
	
	
	-1
	
	
	4
	
	
	0
	
	
	6
	
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.
	
	
	
	 
		
	
		4.
		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].matricula << " " << L[i].titulo[30] << endl;
	
	
	for (int i = 0; i < n; i++)
cout << L[i] << endl;
	
	
	for (int i = 0; i < n; i++)
cout << L.matricula[i] << " " << L.titulo[i] << 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 << " " << L.titulo << endl;
	
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;
	
	
	
	 
		
	
		5.
		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.
	
	
	
	Pilha Encadeada
	
	
	Fila Sequencial
	
	
	Lista Encadeada
	
	
	Pilha Sequencial
	
	
	Lista Sequencial
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		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
	
	
	Inserção
	
	
	Inicialização
	
	
	Busca
	
	
	Ordenação por inserção
	
	Gabarito
Coment.
	
	
	
	 
		
	
		7.
		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 é:
	
	
	
	Variável
	
	
	Matriz
	
	
	Vetor
	
	
	Registro
	
	
	Função
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		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:
	
	
	
	Nenhuma afirmação está correta.
	
	
	Está correta apenas a afirmativa I.
	
	
	Está correta apenas a afirmativa II.
	
	
	Estão corretas apenas as afirmativas I e II.
	
	
	Estão corretas apenas as afirmativas I e III.
	
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.
	ESTRUTURA DE DADOS
CCT0826_A6_201903343721_V1
	
		Lupa
	 
	Calc.
	
	
	 
	 
	 
	
	
PPT
	
MP3
	 
		Aluno: EDICARLOS NOGUEIRA DE ARAUJO
	Matr.: 201903343721
	Disc.: ESTRUTURA DE DADOS 
	2019.3 EAD (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.
		Analisando o trecho do algoritmo abaixo,
pode-se afirmar que se trata de uma operação de:
	
	
	
	Inserção de um elemento em uma estrutura FIFO
	
	
	Inserção de um elemento em uma estrutura LIFO
	
	
	Remoção de um elemento de uma estrutura FIFO
	
	
	Remoção de um elemento de uma estrutura LIFO
	
	
	Exibição de um elemento em uma estrutura LIFO
	
Explicação:
Na estrutura de dados pilha insere-se e retira-se de um só extremidade, dita topo da pilha.  Assim, se a pilha for sequencial insere-se no topo e retira-se do topo, pois segue-se a lógica LIFO (último a entrar será o primeiro a sair).
A lógica FIFO rege a fila, onde insere-se no fim e retira-se do início.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		A técnica LIFO, utilizada em programação estruturada, é fundamentada no conceito de:
	
	
	
	Loop.
	
	
	Ponteiro.
	
	
	Fila.
	
	
	Array.
	
	
	Pilha.
	
	Gabarito
Coment.3.
		Na pequena pizzaria de Dom Leopoldo os pedidos são anotados em uma planilha e assim que montam um lote com 5 pizzas, as entregas começam. As pizzas são organizadas no veículo de entrega respeitando a ordem da entrega, ou seja, a 1a. pizza a ser entregue fica na frente de todas e assim, sucessivamente. Dessa forma, a última pizza a ser entregue ficará no final do veículo, após todas as outras pizzas. Qual a estrutura de dados é mais adequada para modelar a organização das pizzas no veículo de entrega ?
	
	
	
	fila
	
	
	lista
	
	
	árvore
	
	
	pilha
	
	
	grafo
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		Um programador recebeu a tarefa de construir um programa que receba uma cadeia de caracteres e verifique se esta cadeia de caracteres é um PALÍNDROME, sabendo-se que um PALÍNDROME apresenta a mesma sequência de caracteres da esquerda pra direita, quanto da direita para esquerda, marque a opção que possui a estrutura de dados mais adequada a este programa.
	
	
	
	Fila Sequencial
	
	
	Pilha Sequencial
	
	
	Lista Sequencial
	
	
	Árvores
	
	
	Grafos
	
	Gabarito
Coment.
	
	
	
	 
		
	
		5.
		 
   Navegadores para internet armazenam os últimos endereços visitados em uma estrutura de dados. Cada vez que um novo site é visitado, o endereço do site é adicionado na estrutura de endereços. Quando se aciona o retorno ("back"), o navegador permite que o usuário retorne no último site visitado e retira o endereço do site da estrutura de dados.
Assinale a estrutura de dados mais adequada para  este problema.
	
	
	
	grafo
	
	
	fila
	
	
	pilha
	
	
	lista
	
	
	árvore
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		Marque a opção que representa uma característica CORRETA a respeito da estrutura de dados pilha.
	
	
	
	O último item inserido é o primeiro item a ser retirado.
	
	
	O primeiro item inserido é o primeiro a ser retirado.
	
	
	Os acessos aos itens ocorrem de forma aleatória.
	
	
	Não é possível criar uma pilha utilizando vetores.
	
	
	O último item inserido é o último item a ser retirado.
	
Explicação:
A estrutura de dados Pilha faz uso da lógica LIFO (last-in first-out), isto é, o último elemento a entrar é o primeiro a sair.
Essa estrutura pode ser usada com alocação estática (com vetor)  e com alocação dinâmica (listas encadeadas).
Sempre que pedir para explicar essa estrutura, não deixe de falar sobre a lógica usada.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		7.
		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(),pop().
Pode-se dizer que interior da pilha apresenta-se:
	
	
	
	Vazio
	
	
	Com os dados A e B
	
	
	Com os dados A e D
	
	
	Apenas com o dado D
	
	
	Apenas com o dado A
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		Existem vários tipos de estruturas de dados do tipo dinâmicas, entretanto, uma estrutura considerada simples são as listas. Pode-se implementar vários tipos de listas, entretanto, a estrutura que apresenta o conceito de LIFO é:
	
	
	
	Pilha
	
	
	Ponteiro
	
	
	Matriz
	
	
	Struct
	
	
	Fila
	ESTRUTURA DE DADOS
CCT0826_A7_201903343721_V1
	
		Lupa
	 
	Calc.
	
	
	 
	 
	 
	
	
PPT
	
MP3
	 
		Aluno: EDICARLOS NOGUEIRA DE ARAUJO
	Matr.: 201903343721
	Disc.: ESTRUTURA DE DADOS 
	2019.3 EAD (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.
		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:
	
	
	
	Structs
	
	
	Filas
	
	
	Árvores
	
	
	Listas
	
	
	Pilhas
	
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.
	
	
	
	 
		
	
		2.
		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?
	
	
	
	[4-6-8-10-1-2]
	
	
	[3-4-6-8-10]
	
	
	[2-3-4-6-8-10]
	
	
	[3-4-6-8-10-1]
	
	
	[2-1-3-4-6-8]
	
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 6  8 10 1 2
	
	
	
	 
		
	
		3.
		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:
	
	
	
	D
	
	
	A
	
	
	X
	
	
	C
	
	
	W
	
	Gabarito
Coment.
	
	
	Gabarito
Coment.
	
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		Um conjunto ordenado de itens a partir do qual podem ser eliminados itens em uma extremidade e no qual podem ser inseridos itens na outra extremidade é denominado de
	
	
	
	fila.
	
	
	lista encadeada.
	
	
	pilha.
	
	
	árvore.
	
	
	lista simples.
	
Explicação:
Por definição, fila é uma lista ordenada que segue a lógica FIFO, ou seja, o primeiro a entrar será o primeiro a sair. Assim, insere-se no fim e retira-se do início da fila.
	
	
	
	 
		
	
		5.
		Usa-se um vetor para se implementar uma fila sequencial, entretanto se nesta estrutura ocorrer diversas operações de remoção e inserção podemos afirmar que:
	
	
	
	A estrutra sofrerá do fenômeno chamado esgotamento de memória e logo não poderá mais ser utilizada. A solução é o uso da fila circular.
	
	
	Um vetor não pode ser usado na implementação de uma fila sequencial apenas em pilhas sequenciais.
	
	
	Um vetor é uma estrutura base correta para esta implementação, já que está imune a fenômenos como esgotamento de memória.
	
	
	A estrutra sofrerá do fenômeno esgotamento de memória, mas se os dados estiverem ordenados isto não afetará a estrutura.
	
	
	A estrutura fila não sofre esgotamento de memória, isto ocorre com as pilhas já que implementam o algoritmo LIFO.
	
	
	
	 
		
	
		6.
		Uma fila duplamente terminada, isto é, uma estrutura linear que permite inserir e remover de ambos os extremos é chamada de:
	
	
	
	Autômato.
	
	
	Shift-and.
	
	
	Deque.
	
	
	Árvore.
	
	
	Boyer-Moore.
	
Explicação:
Em ciência da computação, uma fila duplamente terminada (frequentemente abreviada como deque, do inglês double ended queue) é um tipo de dado abstrato que generaliza uma fila, para a qual os elementos podem ser adicionados ou removidos da frente (cabeça) ou de trás (cauda). Também é chamada de lista encadeada cabeça-cauda, apesar de propriamente isto se referir a uma implementação de estrutura de dados específica.
As deques são filas duplamente ligadas, isto é, filas com algum tipo de prioridade. Por exemplo, sistemas distribuídos sempre necessitam que algum tipo de processamento seja mais rápido, por ser mais prioritário naquele momento, deixando outros tipos mais lentos ou em fila de espera, por não requerem tanta pressa. Ele pode ser entendido como uma extensão da estrutura de dados Fila.
A implementação de um deque poralocação estática ou seqüencial é feita por meio de um arranjo de dimensão máxima predefinida e de duas variáveis inteiras que indicam o topo e a base (head e tail, respectivamente). Da mesma forma que ocorre com a fila, o deque deve ser implementado segundo a abordagem circular, que confere eficiência à estrutura ao mesmo tempo em que evita o desperdício de memória.
	
	
	
	 
		
	
		7.
		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 final menos um (final-1) for igual ao inicio.
	
	
	Quando o apontador de início apontar para zero.
	
	
	Quando o apontador de final apontar para zero.
	
	
	Quando os apontadores de final e início apontarem para zero.
	
	
	Quando o apontador de posição final for igual ao início.
	
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.  
 
	
	
	
	 
		
	
		8.
		Usa-se um vetor para se implementar uma fila sequencial, entretanto se nesta estrutura ocorrer diversas operações de remoção e inserção podemos afirmar que:
	
	
	
	A estrutura fila não sofre esgotamento de memória, isto ocorre com as pilhas já que implementam o algoritmo LIFO.
	
	
	Um vetor não pode ser usado na implementação de uma fila sequencial apenas em pilhas sequenciais.
	
	
	Um vetor é uma estrutura base correta para esta implementação, já que está imune a fenômenos como esgotamento de memória.
	
	
	A estrutra sofrerá do fenômeno chamado esgotamento de memória e logo não poderá mais ser utilizada. A solução é o uso da fila circular.
	
	
	A estrutra sofrerá do fenômeno esgotamento de memória, mas se os dados estiverem ordenados isto não afetará a estrutura.
	ESTRUTURA DE DADOS
CCT0826_A8_201903343721_V1
	
		Lupa
	 
	Calc.
	
	
	 
	 
	 
	
	
PPT
	
MP3
	 
		Aluno: EDICARLOS NOGUEIRA DE ARAUJO
	Matr.: 201903343721
	Disc.: ESTRUTURA DE DADOS 
	2019.3 EAD (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.
		Admita a seguinte estrutura de nó de uma lista simplesmente encadeada: struct tno { int chave; tno *proximo; }; Admita, agora, a seguinte declaração de uma variável do tipo nó: tno *no; Qual das alternativas a seguir traz uma operação válida sobre essa variável?
	
	
	
	no->chave = new int;
	
	
	no->proximo = -10;
	
	
	no.chave = 5;
	
	
	no.proximo = no;
	
	
	no->proximo = new tno;
	
Explicação:
Analisando cada item :
	 
	no.chave = 5;
	>> Como no é ponteiro então temos que usar a seta para acessar os campos da área apontada por no.
	 
	no->proximo = -10;
	>> O campo proximo é de ponteiro então não pode receber inteiro.
	 
	no->chave = new int;
	>> O campo chave é de inteiro então não deve receber endereço de inteiro.  O operador new aloca memória e retorna o endereço da área alocada.
	 
	no->proximo = new tno;
	>> É correto porque o campo proximo é campo de ponteiro e pode receber outro ponteiro, pode receber NULL ou pode receber endereço da área alocada com new, como foi o caso.
	 
	no.proximo = no;
>> Incorreto porque não pode se pode usar o ponto para acessar campo de struct apontada pelo ponteiro no.
	
	
	
	 
		
	
		2.
		Qual é o resultado do código abaixo:
  int a =10;
int *p = &a;
cout<< &p << endl;
	
	
	
	O endereço da variável p será impresso
	
	
	O conteúdo da variável a será impresso
	
	
	O endereço da variável a será impresso
	
	
	O conteúdo da variável p será impresso
	
	
	Nenhuma das opções anteriores
	
Explicação:
Analisando o trecho de código :
Linha 1 : A variável a recebeu o valor 10 
Linha 2 : p é declarado como ponteiro para inteiro e recebe, na declaração, o endereço
de a.
Linha 3 : É impresso o endereço do ponteiro p.
Opções :
    
>> O endereço da variável a será impresso
Explicação :  Falso. O endereço de a é p ou &a.
    
>> O endereço da variável p será impresso
Explicação : Correto. Usou o operador & antes de p.
    
>> O conteúdo da variável a será impresso
Explicação : Falso. Para imprimir a temos que fazer cout << a;  ou fazer    cout << *p;
    
O conteúdo da variável p será impresso
Explicação : FAlso.  É impresso o endereço de p, pois se usou &.
    
Nenhuma das opções anteriores
Explicação : FAlso. Basta ver as opções anteriores.
	
	
	
	 
		
	
		3.
		QUAL A SAÍDA DO PROGRAMA ABAIXO?
#include 
main()
{
 int x=5,*p;
 p=&x;
 
 cout << x - *p << " " << **&*&p + 1 << " " << *p*2+*p << " " << x+**&p;
 system("pause");
}
	
	
	
	0 6 15 11
	
	
	1 6 15 12
	
	
	0 6 16 14
	
	
	0 6 15 10
	
	
	0 8 16 10
	
	
	
	 
		
	
		4.
		Numa Lista Encadeada, podemos afirmar que:
I) Todos os nós são alocados de uma única vez.
II) Os nós não são alocados contiguamente na memória obrigatoriamente.
III) Os elementos de uma lista encadeada são ligados por dois ponteiros.
IV) Para que possamos percorrer toda a lista, precisamos armazenar o endereço do próximo elemento para possibilitar o encadeamento.
	
	
	
	Só a II está correta
	
	
	II e IV estão corretas
	
	
	I , II e III estão corretas
	
	
	I, III e IV estão corretas
	
	
	I, II, III e IV estão corretas
	
	Gabarito
Coment.
	
	
	
	 
		
	
		5.
		Verifique as afirmativas e marque a opção correta.
I- Na alocação estática de memória a quantidade de memória alocada é feita em tempo de compilação.
II- Na alocação dinâmica de memória a quantidade de memória alocada é feita em tempo de execução.
III- Na alocação estática de memória a quantidade de memória alocada é fixa durante a execução do programa.
IV- Na alocação dinâmica de memória a quantidade de memória alocada é fixa durante a execução do programa.
	
	
	
	Apenas a opção I está errada
	
	
	Apenas a IV está errada
	
	
	Apenas as opções I e II são corretas
	
	
	Apenas a II está correta
	
	
	Apenas a I está correta
	
Explicação:
Analisando cada afirmativa :
I- Na alocação estática de memória a quantidade de memória alocada é feita em tempo de compilação.
Correto. Aloca-se memória antes da execução.
II- Na alocação dinâmica de memória a quantidade de memória alocada é feita em tempo de execução.
Correto.
III- Na alocação estática de memória a quantidade de memória alocada é fixa durante a execução do programa.
Correto. A memória alocada antes da execução não sofre alteração durante a execução.
IV- Na alocação dinâmica de memória a quantidade de memória alocada é fixa durante a execução do programa.
Falso. A quantidade de memória não é fixa.
 
Apenas a afirmativa IV é falsa ou está errada.
	
	
	
	 
		
	
		6.
		Considere 
int *ptr, *qtr, *r; 
int a = 10, b = 20; 
 
Após executar cada instrução conforme a ordem dada a seguir : 
ptr = &a; 
qtr = &b; 
 
*ptr = *ptr + *qtr; 
++(*qtr); 
r = qtr; 
qtr = ptr; 
 
assinale a opção que mostra, correta e respectivamente, os valores de *ptr, *qtr , *r , a e b . 
	
	
	
	30 30 21 30 21
	
	
	30 20 20 10 20
	
	
	30 20 0 30 21
	
	
	30 30 21 10 20
	
	
	30 21 21 10 20
	
	
	
	 
		
	
		7.
		Em uma aplicação que usa apenas o processo de alocação estática de memória é correto afirmar que:Toda a memória utilizada pela aplicação não muda durante toda a sua execução
	
	
	A memória utilizada pela aplicação é totalmente alocada após o inicio de sua execução
	
	
	A memória utilizada pela aplicação é inicialmente estática, mas pode mudar
	
	
	Todas as afirmações acima são incorretas
	
	
	Apenas a memória associada às variáveis do tipo vetor é alocada após o inicio da execução da aplicação
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		E C++, quando um ponteiro é declarado para uma struct, o acesso aos campos deste registro (struct) se dá pelo operador :
	
	
	
	, (vírgula).
	
	
	& (e comercial ou eitza).
	
	
	-> (seta).
	
	
	∙ (ponto).
	
	
	* (asterisco).
	
Explicação:
Por definição, o operador é o seta, pois se tem, no caso, ponteiro para struct. 
	ESTRUTURA DE DADOS
CCT0826_A9_201903343721_V1
	
		Lupa
	 
	Calc.
	
	
	 
	 
	 
	
	
PPT
	
MP3
	 
		Aluno: EDICARLOS NOGUEIRA DE ARAUJO
	Matr.: 201903343721
	Disc.: ESTRUTURA DE DADOS 
	2019.3 EAD (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.
		A pilha é uma estrutura de dados que permite a inserção/ remoção de itens dinamicamente seguindo a norma de último a entrar, primeiro a sair. Suponha que para uma estrutura de dados, tipo pilha, são definidos os comandos:
- PUSH (p, n): Empilha um número "n" em uma estrutura de dados do tipo pilha "p";
- POP (p): Desempilha o elemento do topo da pilha.
Considere que, em uma estrutura de dados tipo pilha p, inicialmente vazia, sejam executados os seguintes comandos:
PUSH (p, 10)
PUSH (p, 5)
PUSH (p, 3)
PUSH (p, 40)
POP (p)
PUSH (p, 11)
PUSH (p, 4)
PUSH (p, 7)
POP (p)
POP (p)
Após a execução dos comandos, o elemento no topo da pilha "p" e a soma dos elementos armazenados na pilha "p" são, respectivamente,
	
	
	
	11 e 29.
	
	
	11 e 80.
	
	
	7 e 40.
	
	
	7 e 29.
	
	
	4 e 80.
	
Explicação:
Passo a Passo:
entra 10 // 10
entra 5 // 5 / 10
entra 3 // 3 / 5/ 10
entra 40 // 40 / 5 /10
retira 40 // 3 / 5 /10
entra 11 // 11 / 3 / 5 /10
entra 4 // 4 /11 / 3 / 5 /10
entra 7 // 7 / 4 / 11 / 3 / 5 /10
retira 7 // 4 / 11 / 3 / 5 /10
retira 4 // 11 / 3 / 5 / 10
Resultado da pilha: 11 / 3 / 5 / 10
Topo: 11
Somatorio da pilha é: 29
	
	
	
	 
		
	
		2.
		Sobre as estruturas de dados existentes podemos afirmar que:
	
	
	
	Na estrutura do tipo FIFO, as informações são inseridas no início e removidas do final.
	
	
	Na estrutura das Pilhas a manipulação dos dados sempre se dá no topo.
	
	
	Encadeamento estático e dinâmico apresentam o mesmo funcionamento de alocação na estrutura do tipo PILHA.
	
	
	Na estrutura do tipo LIFO, as informações são inseridas no início e removidas do final.
	
	
	A estrutura do tipo LIFO sempre realiza a remoção do elemento mais antigo inserido.
	
Explicação:
	
	Na estrutura do tipo FIFO, as informações são inseridas no início e removidas do final.
	Falso.  Fila segue a lógica FIFO, ou seja, o primeiro a entrar será o primeiro a sair. Logo, insere no fim e retira do início da fila.
	
	Na estrutura do tipo LIFO, as informações são inseridas no início e removidas do final.
	Falso.  Pilha segue a lógica LIFO, o último a entrar será o primeiro a sair.  Insere-se no topo   e retira-se do topo , ou seja, da mesma extremidade.
	
	Na estrutura das Pilhas a manipulação dos dados sempre se dá no topo.
	Verdade. SEgue-se a lógica LIFO.
	
	Encadeamento estático e dinâmico apresentam o mesmo funcionamento de alocação na estrutura do tipo PILHA.
	Falso.  No encadeamento estático a alocação é contígua e ocorre antes da execução.  No encadeamento dinâmico a alocação de memória ocorre em tempo de execução e o armazenamento é encadeado.
	
	A estrutura do tipo LIFO sempre realiza a remoção do elemento mais antigo inserido.
 
	
	
Falso.  A remoção se dá no último inserido, ou seja, o mais novo inserido na pilha.
 
 
	
	
	
	 
		
	
		3.
		Sabendo que uma fila encadeada possui seus nós definidos pela :
struct no {
int x;
no *prox;
};
Marque a alternativa que representa corretamente a criação ou alocação do nó na sintaxe do C++ para utilização na fila.
	
	
	
	no *p=new no;
	
	
	p *no=new no;
	
	
	no *p -> new no;
	
	
	no p -> new no;
	
	
	p *no -> new no;
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		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
	
	
	InsereNoFim
	
	
	ListaNo
	
	Gabarito
Coment.
	
	
	
	 
		
	
		5.
		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
	
	
	Apenas a afirmação (1) é verdadeira
	
	
	Apenas a afirmação (3) é verdadeira
	
	
	Todas as afirmações são verdadeiras
	
	
	Apenas as afirmações (1) e (3) são verdadeiras
	
	
	
	 
		
	
		6.
		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:
	
	
	
	20 5 8
	
	
	10 3 20
	
	
	10 3 5 8 20
	
	
	5 8 20
	
	
	5 8
	
Explicação:
 insere(10), insere(3), insere(5), insere(8), remove(), remove(), insere(20),
10-> 3 -> 5 -> 8 após inserir 10,3,5 e 8. Inserção no fim
Depois do 1o. remove, temos 3->5->8
Depois do 2o. remove temos 5 -> 8
Ao ocorrer o último insere temos  : 5 -> 8 - > 20, sendo que 5 esta no início e 20 no fim
	
	
	
	 
		
	
		7.
		Tínhamos declarado um ponteiro de nome ptr e precisávamos construir uma estrutura de repetição que pudesse repetir enquanto o ponteiro não fosse nulo. Observe os trechos abaixo e assinale qual a afirmativa correta.
I if (ptr !=NULL)
II if( !ptr )
III if(ptr)
IV while (ptr !=NULL)
V while (ptr)
	
	
	
	III e V estão corretas
	
	
	I e IV estão corretas
	
	
	III está correta
	
	
	IV e V estão corretas.
	
	
	I e II estão corretas.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		Assinale a característica que NÃO está relacionada às estruturas de dados encadeadas:
	
	
	
	Cada elemento guarda pelo menos um ponteiro para outro elemento da estrutura.
	
	
	Consomem memória de maneira permanente, só sendo liberadas ao fim do programa.
	
	
	A memória para armazenar seus elementos é, em geral, alocada com o uso de new.
	
	
	A memória ocupada por seus elementos é, em geral, liberada com o uso de delete.
	
	
	Em geral, marca-se o último elemento com um ponteiro de valor NULL.
	ESTRUTURA DE DADOS
CCT0826_A10_201903343721_V1
	
		Lupa
	 
	Calc.
	
	
	 
	 
	 
	
	
PPT
	
MP3
	 
		Aluno: EDICARLOS NOGUEIRA DE ARAUJO
	Matr.: 201903343721
	Disc.: ESTRUTURA DE DADOS 
	2019.3 EAD (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. Aproveitepara se familiarizar com este modelo de questões que será usado na sua AV e AVS.
	
	 
		
	
		1.
		Em uma lista duplamente encadeada, seus nodos são compostos por campos cujos tipos podem ser de diferentes naturezas, entretanto dois de seus campos devem ser ponteiros para o mesmo tipo do nodo, são estes os ponteiros ant e prox, que apontam respectivamente para o nodo anterior e para o próximo nodo. Esta característica permite que a estrutura seja percorrida em ambos os sentidos. Assim analisando as operações a seguir:
p->ant->prox=p->prox;
p->prox->ant=p->ant;
 
            Sendo p um ponteiro que aponta para um dos nodos da lista, pode-se afirmar que:
	
	
	
	As operações possibilitam o percurso do ponteiro p da esquerda para direita.
	
	
	As operações possibilitam a busca de um nodo apontado pelo ponteiro p.
	
	
	As operações possibilitam o percurso do ponteiro p da direita para esquerda.
	
	
	As operações removem o nodo apontado pelo ponteiro p.
	
	
	As operações inserem novo nodo, após o nodo apontado pelo ponteiro p.
	
	
	
	 
		
	
		2.
		São listas que, além de cada elemento indicar o elemento seguinte, também indicam aquele que o antecede, ou melhor, cada elemento é ligado a seu sucessor e a seu predecessor, possibilitando um caminhamento no sentido início-fim ou no sentido oposto (fim-início). O texto acima, sobre Estrutura de Dados, descreve  :
	
	
	
	Árvore
	
	
	Listas Duplamente Encadeadas
	
	
	Grafo
	
	
	Listas Circulares
	
	
	Listas simplesmente encadeadas
	
Explicação:
O enunciado é a descrição de listas duplamente encadeadas, que terão 2 ponteiros em cada nó, um apontando para o nó anterior e outro apontando para o nó posterior.
	
	
	
	 
		
	
		3.
		Uma estrutura de dados em lista duplamente encadeada permite na cadeia movimentos para:
	
	
	
	Para trás, apenas.
	
	
	Para cima e para baixo, apenas.
	
	
	Para cima e para baixo ou para frente e para trás.
	
	
	Para frente e para trás, apenas.
	
	
	Para frente, apenas.
	
Explicação:
A resposta é simples assim.
	
	
	
	 
		
	
		4.
		O armazenamento de dados na memória do computador é feito de forma ordenada, utilizando-se estruturas e regras de operações. Das alternativas a seguir, assinale a correta:
	
	
	
	Em uma lista linear com alocação duplamente encadeada os nós da estrutura ocupam espaços aleatórios na memória e cada nó armazena além da sua informação os endereços do nó anterior e do próximo nó da estrutura.
	
	
	A lista binária é uma forma não-linear de organização dos dados. Existe um nó denominado raiz da árvore, que pode ter duas ou mais sub-árvores, que por sua vez também podem ter outras sub-árvores.
	
	
	Em uma lista linear com alocação sequencial, os dados são heterogêneos e os nós da lista podem ter tamanhos diferentes, mas exigem espaço em endereço contíguo de memória.
	
	
	Fila e Pilha são tipos especiais de listas lineares. Na Fila, o último que entra é o primeiro que sai, enquanto na Pilha, o primeiro que entra é o primeiro que sai.
	
	
	Existem várias formas de apresentação de listas lineares, como listas circulares e as matrizes, que são formas exclusivas das listas de alocação encadeada.
	
Explicação:
Existem várias formas de apresentação de listas lineares, como listas circulares e as matrizes, que são formas exclusivas das listas de alocação encadeada.= FALSO = Ela possui apenas uma entrada, chamada de topo, a partir da qual os dadosentram e saem dela. Exemplos de pilhas são: pilha de pratos, pilha de livros, pilhade alocação de variáveis da memória, etc. Uma fila é uma lista linear do tipo FIFO - First In First Out, o primeiro elemento a entrar será o primeiro a sair
A lista binária é uma forma não-linear de organização dos dados. Existe um nó denominado raiz da árvore, que pode ter duas ou mais sub-árvores, que por sua vez também podem ter outras sub-árvores.= FALSO
Em uma lista linear com alocação sequencial, os dados são heterogêneos e os nós da lista podem ter tamanhos diferentes, mas exigem espaço em endereço contíguo de memória. .= FALSO
Em uma lista linear com alocação duplamente encadeada os nós da estrutura ocupam espaços aleatórios na memória e cada nó armazena além da sua informação os endereços do nó anterior e do próximo nó da estrutura. ===> VERDADE
Fila e Pilha são tipos especiais de listas lineares. Na Fila, o último que entra é o primeiro que sai, enquanto na Pilha, o primeiro que entra é o primeiro que sai. ===> FALSO ===> Fila, o valor lido, sempre é passado para o começo, ou seja, esse valor aponta para as próximas posições, e quando for feita a exclusão, é só deletar esse valor do começo. Abaixo uma imagem que representa a Fila (FIFO). Pilha, sempre o último valor lido, ficará na `primeira¿ posição da lista, dessa forma, quando for feita a exclusão, um auxiliar aponta para a próxima posição, e a posição atual, é excluída. Abaixo uma imagem que representa a Pilha (LIFO)
	
	
	
	 
		
	
		5.
		Um tipo de estrutura de dados é declarada em C como:
typedef struct no *apontador;
       struct no{
       int valor;
       apontador esq, dir;
}
onde esq e dir representam ligações para os dados da esquerda e direita, respectivamente. Qual das seguintes alternativas é uma implementação correta da operação que inverte as posições dos dados da esquerda e da direita uma estrutura p, onde t é um apontador auxiliar.
	
	
	
	p->dir=t;
p->esq = p->dir;
p->dir = t;
	
	
	p->esq = p->dir;
t = p->esq;
p->dir = t;
	
	
	t=p->dir;
p->dir = p->esq;
p->esq = t;
	
	
	t=p->dir;
p->esq = p->dir;
p->dir = t;
	
	
	t=p;
p->esq = p->dir;
p->dir = p->esq;
	
Explicação:
O código pedido é:
t=p->dir;
p->dir = p->esq;
p->esq = t;
	
	
	
	 
		
	
		6.
		Assinale a alternativa que traz uma afirmação incorreta sobre as diversas implementações da estrutura de dados lista.
	
	
	
	A lista circular é toda lista, independente do tipo de alocação, em que é formado um ciclo entre seus elementos. Por exemplo, quando o último elemento da lista aponta para o primeiro.
	
	
	A lista sequencial deve ser implementada com o uso de estruturas de vetor, pois essas essas estruturas utilizam o conceito de alocação estática e dispõem seus elementos de forma contígua na memória.
	
	
	A estrutura do nó da lista duplamente encadeada deve, obrigatoriamente, possuir um ponteiro para o nó anterior e outro para o nó seguinte, permitindo movimentação para frente e para trás.
	
	
	A lista simplesmente encadeada é adequada para a resolução de problemas em que os elementos da lista devem ser percorridos em apenas uma direção.
	
	
	Listas encadeadas em geral são preferíveis em relação às listas sequenciais, especialmente por serem mais eficientes e sempre utilizarem menos espaço de armazenamento na memória.
	
Explicação:
Analisando cada item.
	>> A estrutura do nó da lista duplamente encadeada deve, obrigatoriamente, possuir um ponteiro para o nó anterior e outro para o nó seguinte, permitindo movimentação para frente e para trás.
	      Afirmativa correta, que segue a definição de lista duplamente encadeada.  Não marcar o item.
	 >> A lista simplesmente encadeada é adequada para a resolução de problemas em que os elementos da lista devem ser percorridos em apenas uma direção.
	 
	     Afirmativa correta.  Em uma lista simplesmente encadeada existe ponteiro para o início da lista. Por isso, não dá para percorrer tal lista  do fim para o início.  Nâo marcar o item.
	>> A lista sequencial deve ser implementada com o uso de estruturas de vetor, pois essas essas estruturas utilizam o conceito de alocação estática e dispõem seus elementos de forma contígua na memória.
	 
	     Afirmativa correta. O vetor pode até ser dinâmica, mas usualmente usa alocação estática de memória e é o recurso usado na implementação das listas sequenciais. Não marcar o item.
	>> A lista circular é toda lista, independente do tipo de alocação, em que é formado um ciclo entre seus elementos. Por exemplo,quando o último elemento da lista aponta para o primeiro.
	 
	     Afirmativa correta. 
	>> Listas encadeadas em geral são preferíveis em relação às listas sequenciais, especialmente por serem mais eficientes e sempre utilizarem menos espaço de armazenamento na memória.
      Afirmativa falsa porque as listas encadeadas não ocupam menos espaço que as listas sequencias. Cada nó de uma lista simplemente encadeada, por exemplo, tem um campo de dado e um campo que é ponteiro.
Marcar esta afirmativa.
	 
	
	
	
	 
		
	
		7.
		Em uma lista duplamente encadeada, seus nodos são compostos por campos cujos tipos podem ser de diferentes naturezas, entretanto dois de seus campos devem ser ponteiros para o mesmo tipo do nodo, são estes os ponteiros ant e prox, que apontam, respectivamente, para o nodo anterior e para o próximo nodo. Esta característica permite que a estrutura seja percorrida em ambos os sentidos. Assim analisando as operações a seguir:
p->ant->prox=p->prox;
p->prox->ant=p->ant;
Sendo p um ponteiro que aponta para um dos nodos da lista, pode-se afirmar que:
	
	
	
	As operações inserem novo nodo, após o nodo apontado pelo ponteiro p.
	
	
	As operações possibilitam o percurso do ponteiro p da esquerda para direita.
	
	
	As operações possibilitam a busca de um nodo apontado pelo ponteiro p.
	
	
	As operações removem o nodo apontado pelo ponteiro p.
	
	
	As operações possibilitam o percurso do ponteiro p da direita para esquerda.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		Os registros também conhecidos como estruturas, são estruturas de dados do tipo heterogêneo, ou seja, permitem que valores de tipos diferentes possam ser armazenados em uma mesma estrutura. Analisando a estrutura abaixo, a mesma pode ser utilizada para qual tipo de estrutura de dados, marque a alternativa correta.
struct nomeRegistro{
       int info;
       struct nomeRegistro* ant;
       struct nomeRegistro* prox;
};
typedef struct nomeRegistro NOMEREGISTRO;
	
	
	
	Fila
	
	
	Lista duplamente encadeada
	
	
	Pilha
	
	
	Lista encadeada
	
	
	Matriz

Outros materiais