Buscar

Provas 2014

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

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

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ê viu 3, do total de 13 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

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

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ê viu 6, do total de 13 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

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

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ê viu 9, do total de 13 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

Prévia do material em texto

QUESTIONÁRIO DE ESTRUTURA DE DADOS 2014
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[i1]>v[i]; i){
 		aux = v[i1];
 		v[i1]= v[i];
 		v[i] = aux;
 		v[i] = aux;
 	 } }
}
Assinale o método ao qual o trecho de algoritmo pertence.
(X) Inserçã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
 (X) Bublesort
As estruturas de dados permitem o uso de certos algoritmos para a ordenação dos elementos de forma a facilitar a consulta de determinado elemento. Existem vários tipos de algoritmos para realizar a ordenação dos elementos, onde um algoritmo de ordenação deve rearranjar o vetor de forma a estabelecer uma ordem entre os elementos. O trecho de código abaixo descreve o algoritmo chamado:
algoritmo ordena (int a[], int n){
 Para i da primeira posição até a penúltima faça
 mínimo = i
 para j da posição seguinte a i até a ultima posição faça
 se (a[j] < a[mínimo])
 mínimo =j;
 fim para
 fim para
 troca(a[mínimo],a[i]);
fim algoritmo
 (X) Seleção
A técnica LIFO, utilizada em programação estruturada, é fundamentada no conceito de:
(X) Pilha.
Em uma pesquisa sequencial a lista deve estar?
 (X) Ordenada ou desordenada.
Considere uma estrutura de dados do tipo vetor. Com respeito a tal estrutura, é correto que seus componentes são caracteristicamente:
 (X) Homogêneos e de acesso aleatório por intermédio de índices.
O registro de ativação de uma sub-rotina é o conjunto das informações que devem/precisam ser alocadas em
memória. Assinale abaixo a única opção que representa a composição destas informações.
 (X) endereço de retorno / variáveis locais / parâmetros passados
Sobre o funcionamento da busca binária, é incorreto afirmar que dividindo seu vetor em duas metades.
 (X) Se o item for igual ao item que está na metade do vetor, o item não foi encontrado.
Ao remover um elemento armazenado em uma pilha é necessário a atualização da variável (Topo) indicadora de
posição. Qual das alternativas abaixo está correta?
 (X) Após a operação de remoção decrementa a variável indicadora de posição.
Estão entre algumas das possíveis formas de se estruturar dados:
 (X) Grafos, lista ordenada, vetores.
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:
 (X) 512 e 1024
O almoxarifado de um órgão pediu ao técnico de informática que elaborasse um sistema de custeio que, para cada saída de material, considerasse o custo do mais recente que houvera dado entrada no almoxarifado. O técnico deve desenvolver um programa para tratar com uma estrutura de dados do tipo?
(X) LIFO
Podemos dizer que estrutura de dados é:
 (X) O meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificações.
A técnica LIFO (last in first out), utilizada em programação estruturada, é fundamentada no conceito de:
(X) pilha
Considere uma estrutura de dados, representada pela variável P, com procedimentos de inclusão, exclusão e consulta do próximo elemento (e) disponível na estrutura, obedecendo às seguintes propriedades:
excluir (inclui (e,P))= P
próximo (inclui (e,P))= e
Pode-se concluir, então, que P corresponde à seguinte estrutura de dados?
(X) PILHA
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.
(X)	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;
 	 } }}
}
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ões numé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).
 (X) I, II e III.
Marque a afirmativa correta para a "inserção incremental".
 (X) Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos.
A implementação da pilha de chamadas e retorno de funções é um tópico muito importante. Além disso, estratégias para o gerenciamento de outra área de memória chamada de heap são importantes para a comprensão de objetos dinâmicos como ________________. Com base na afirmativa marque a opção correta para completá-la:
(X) MATRIZES
Analisando o trecho de código abaixo, marque a alternativa correta que apresenta o que será impresso na tela do usuário. Sabe-se que na linguagem C os ponteiros são representados pelo sinal de asterisco (*), o endereço de memória pelo sinal & e a função de impressão é denominada printf.
void funcao ( int *a, int *b){
 int c;
 c = *a;
 a = b;
 *b = c;
}
main(){
 int a=2, b=3;
 funcao (&a, &b);
 printf("%d - %d \n",a,b);
}
 (X) 2 - 2
Um órgão público adotou dois sistemas de senhas para atender os cidadãos na ordem de chegada. 
O sistema I atende os não idosos. O sistema II atende os idosos. Nessa situação:
(X) Tanto o sistema I, quanto o II, adotam o esquema FIFO de organização de dados.
Qual o valor da variável a ao final da execução do trecho de programa a seguir?
int main() {
int a, b, *p;
a=4;
b = 2;	
p = &a;
a++;
*p = a + b;
(*p)++;
(*p) += a;
cout << "\n a = " << a << endl;
return(0);}
(X) 16
Com relação as afirmações abaixo, a respeito de lista lineares, assinale as Verdadeiras e as Falsas. Indique a alternativa que representa a sequência correta:
( ) Nas listas encadeadas não precisamos saber previamente o número de elementos a serem armazenados.
( ) Podemos aumentar e diminuir o tamanho da lista encadeada quando quisermos, enquanto que a lista sequencial não.
( ) Quando o número de acessos randômicos a uma área de armazenamento é muito maior que o número de inserções e remoções de elementos armazenados, a organizaçãodessa área de armazenamento por meio de uma lista encadeada resulta em desempenho melhor que o apresentado por organização feita usando uma lista linear.
 (X) V V V
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:
(X) É um modo particular de armazenamento e organização de dados em um computador de modo que possam ser usados de modo eficiente.
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 é:
 (X) Vetor
O processo de rearranjar um conjunto de dados em uma ordem crescente ou decrescente é chamado de ordenação. Existem várias técnicas de ordenação, entretanto a técnica que procura o menor valor entre todos os elementos do vetor e troca-o pelo primeiro elemento; para os n - 1 elementos restantes, determinação do elemento de menor valor e troca pelo segundo elemento e assim sucessivamente, é chamado de:
 (X) Seleção
Marque a afirmativa que represente uma concatenação em listas.
Consiste em dividir a lista em duas outras listas. A quantidade de nós que cada lista terá, depende da necessidade.
 (X) Juntar duas listas, colocando uma lista no final de outra, obtendo, ao final, uma só lista resultante.
Sistemas operacionais utilizam filas para gerenciar, tarefas, processos e recursos. Qual é a ordenação dos elementos armazenados aleatoriamente em uma lista do tipo LIFO?
 (X) Ordem de entrada
É correto afirmar sobre o funcionamento da busca sequencial.
 (X) Os elementos são pesquisados de acordo com o índice. Pior caso: o elemento está no último índice do meu vetor.
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 );
}i
nt main()
{f
loat r;
cout<<"Informe 2 valores: ";
cin>>x>> y;
r = media( x, y );
cout<<"\nMedia = "<< r<<"\n";
system ("pause");
}
(X) área de dados globais / área de pilha
As estruturas de dados são importantes para a programação porque facilitam a pesquisa, pois permitem a ordenação dos dados de forma crescente ou decrescente. Dessa forma, assinale a alternativa correta que define um tipo de dado estruturado.
(X) Permitem agregar mais do que um valor em uma variável, existindo uma relação estrutural entre seus elementos.
Determinados tipos de estrutura de dados, são utilizados para implementar um algoritmo de escalonamento de processos do sistema operacional UNIX, chamado Round Robin, onde cada processo ganha uma fatia de tempo.
Esse tipo de estrutura de dados é chamado de:
 (X) Lista duplamente encadeada
O método de ordenação que compara pares de chaves de ordenação, trocando os elementos correspondentes caso estejam fora de ordem é o método:
 (X) Bolha
Marque a afirmativa correta para a "Inserção em lista linear sequencial ordenada".
 (X) Consiste em adicionar um valor no vetor, alterando a ordem existente e ajustando o total de elementos.
Com a utilização das estruturas de dados e seus tipos, em algumas situações é imprescindível a criação de funções que façam determinada verificação ou ação nestas estruturas. Dessa forma, analise a função abaixo e marque corretamente a alternativa que descreve as funcionalidades desta.
int funcao(float v[], float vl, int n){
 for (int i = 0; i < n; i++)
 if (v[i] == vl)
 return i;
 return 1;
}
 (X) Retorna a posição de v se o valor vl foi encontrado.
Observe o algorítmo a seguir, onde ocorre a passagem de parâmetro por valor e por referência, espectivamente, de ITALIA para FIAT e de FRANCA para HONDA.
Ao final do processamento, as variáveis ITALIA e FRANCA terão, respectivamente, os seguintes valores:
 (X) 85 e VERDADEIRO
Qual a importância de se entender a "ordenação" de dados ? 
 (X) A ordenação é a base na qual, muitos algoritmos são construídos. Entendendo a ordenação, tem-se conhecimento para resolver outros problemas. 
Analisando o trecho do algoritmo abaixo, 
Se topo < máximo
Então inicio
	Topo <- topo + 1
	Pilha[topo] <- valor
	Sucesso <- verdadeiro
Fim
pode-se afirmar que se trata de uma operação de: 
 (X) Inserção de um elemento em uma estrutura FIFO 
Assinale a opção certa. Quando não se escreve o protótipo de uma função ... 
 (X) É preciso definir a função antes do programa principal. 
O que acontece ao se inserir uma informação quando já usamos toda a área disponível do vetor (topo = fim)?
 (X) Overflow
Existem vários tipos de algoritmos para realizar a ordenação dos elementos, onde um algoritmo de ordenação deve rearranjar o vetor de forma a estabelecer uma ordem entre os elementos. Marque a alternativa correta que cita o algoritmo cuja descrição é: "considera cada elemento uma vez inserindo-o em seu lugar correto entre os elementos que já estão em ordem". E o seu passo a passo pode ser descrito como: "o elemento é inserido entre os ordenados movendo-se os elementos maiores que ele uma posição para a direita e posteriormente inserindo-o na posição vaga".
 (X) Inserçã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 entre ambas as operações em relação ao estado da Pilha é correto afirmar:
 (X) Somente a operação POP altera o estado da Pilha 
Considere:
I - Os algoritmos de busca binária e de busca seqüencial executam processamento repetitivo. 
II - Os algoritmos de busca binária e de busca seqüencial utilizam a técnica de recursão.
III - A busca seqüencial executa cada fase de repetição na forma de uma subtarefa da fase anterior.
IV - A busca binária trabalha com uma forma circular de repetição. Está correto o que consta em: 
(X) I, apenas.
Se a e b são variáveis inteiras (int) e p1 e p2 ponteiros para int, quais das seguintes expressões de atribuição está errada?
 (X) *p2 = &b;
Podemos dizer que um container é:
 (X) O que permite o armazenamento e a recuperação de dados independentemente de seu conteúdo.
Considerando que a lista a seguir, encontra-se criada na memória, o que será exibido pelo trecho de programa a seguir:
Inicio -> |H| | ->|K| | ->|M| |
 Valor proximo
aux = inicio;
while (aux -> proximo != NULL)
aux = aux -> proximo;
novo = new tipoNo;
novo -> valor = 'F';
novo -> proximo = NULL;
aux -> proximo = novo;
aux = inicio;
while (aux != NULL){
cout << aux -> valor << " ";
aux = aux -> próximo;
}
(X) H K M F
Assinale a alternativa que apresenta duas formas de passagem de parâmetros para uma rotina ou função:
 (X) Por valor e por referência
As variáveis em programação são utilizadas para armazenar um valor de determinado tipo em um espaço reservado na memória. Em algumas linguagens de programação podemos declarar, ou seja, reservar um espaço na memória, fora do escopo da função principal, e fora do escopo de qualquer outra função. Ao fazer a declaração desta forma estamos declarando uma variável do tipo:
 (X) Global
Na área de estrutura de dados, em determinados casos, é necessário utilizar um tipo de dado onde seu valor serve como referência direta a outro valor alocado em outro espaço de memória. Este tipo de dado se chama:
 (X) Ponteiro
Para a criação de uma Fila seqüencial basta iniciar as variáveis de início e final, ou seja, apontá-las para as posições iniciais do vetor. O que alteraria na rotina de inserir se a variável final fosse inicializada com o valor -1 (menos um):
 (X) Antes da inserção deve-se fazer o incremento da variável final
Em programação podemos utilizar um recurso que modulariza o programa chamado função. As funções precisam ser ativadas para que possam ser executadas. Para isso,é necessário chamar a função pelo seu nome e enviar, quando necessário, os valores respectivos para os parâmetros de entrada. Ao enviar os valores para os parâmetros de entrada, o programa pode fazer uma cópia deste valor ou trabalhar em um endereço enviado. Quando se envia o endereço estamos ativando a função por meio de:
 (X) Ponteiros.
A armazenagem de dados pode ocorrer temporariamente em uma variável, um vetor ou em uma estrutura chamada Struct na linguagem C e C++. Como se procede a atribuição de valor a um determinado campo de uma estrutura do tipo Struct?
(X) Nome da estrutura ponto nome do campo
A função que exibe o elemento que está no topo da Pilha é bem parecida com a função:
 (X) Que exibe o primeiro elemento da Fila;
Se usarmos as funções da Lista Simplesmente Encadeada para implementarmos Pilha e Fila Dinâmica e as afirmativas abaixo, podemos afirmar que:
I) A função remove elemento no início pode ser usada nas duas estruturas;
II) A função insere elemento no início pode ser usada nas duas estruturas;
III) A função que libera a memória não pode ser usada nas duas estruturas.
 (X) A I está correta.
Tínhamos um ponteiro de nome ptr e precisávamos construir uma estrutura que repetição 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)…
 (X) IV e V estão corretas.
Os símbolos * e & são utilizados para manipularmos os ponteiros. Eles têm como objetivos colocados antes das variáveis respectivamente na declaração e durante a execução de:
 (X) Indicar que é uma variável ponteiro e significando o endereço;
Utilizamos ponteiros para fazer referência a endereços de memória principal de nosso computador e utilizamos vetores como forma de armazenamento estático nas nossas listas. Podemos afirmar que:
 (X) Uma variável do tipo ponteiro poderá ser tratada como vetor e vice-versa.
Baseado na declaração do seguinte registro:
struct teste{
char coisa[50];
int numero;
};
Qual das opções cria respectivamente uma variável e um vetor de 30 posições para o registro declarado de forma correta:
(X) struct teste variavel, vetor[30];
Na manipulação de dados em uma lista de um determinado sistema, onde cada nó desta lista possui um conjunto de dados e um ponteiro indicando onde será encontrado o próximo nó, gerado durante a execução do programa, caracteriza uma lista: 
 (X) Dinâmica Seqüencial.
Manter os dados ordenados, facilita quando precisamos recuperar dados armazenados, para tal foram desenvolvidos algoritmos que são divididos em métodos simples e sofisticados. Das opções apresentadas qual apresenta apenas métodos simples?
 (X) Selection sort, Insertion sort e Bubble sort;
No desenvolvimento de sistemas devemos utilizar a modularização como forma de melhorar nossos sistemas, inserindo agilidade, facilidade de manutenção e etc. Quando em um programa um determinado pedaço do código ocorre várias vezes vezes fazendo as seguintes atividades:
- Lendo alguns valores informados pelo usuário;
- fazendo alguns cálculos;
- e armazenando o resultado.
A melhor solução proposta seria:
 (X) Criar uma função que receba os dados lidos como parâmetro execute os cálculos e retorne o resultado.
Uma empresa precisou em um determinado momento fazer o cálculo do salário de um grupo de funcionários e para tal criou a função com o seguinte protótipo:
float calc_salario(float salários[], int &qtd);
Baseado neste protótipo é CORRETO dizer que a função:
 (X) Recebe um endereço para um número inteiro;
Sabe-se que um protótipo de uma função é o cabeçalho da função com ;(ponto-e-vírgula) ao final. E que nas funções a passagem de parâmetros se dá por valor ou por referência.
Para o protótipo: void troca(float&,float&); pode-se dizer que:
(X) É um protótipo de função que recebe dois argumentos que são endereços que armazenam números reais, por passagem por referência. E a função não retorna nada para a função chamadora.
Considerando um vetor de elementos do tipo
struct professor {
char nome[40];
char titulacao[30];
};
Assinale a opção correta que mostra o trecho que determina que Maricota Silva é Mestre em Computação.
(X)	professor p;
strcpy(p.nome, "Maricota Silva");
strcpy(p.titulacao, "Mestre em Computação.");
Dentre os algoritmos de pesquisa ou busca em vetores, os mais difundidos são: a busca sequencial e a busca binária. Leia as sentenças abaixo e marque a assinale a resposta correta:
Para um vetor que armazena de forma ordenada uma quantidade bastante considerável de dados, se considerarmos que o dado a ser procurado não encontra-se no vetor, o algoritmo da busca sequencial será mais rápido em chegar a esta conclusão, que o algoritmo da busca binária.
O algoritmo da busca binária baseia-se no princípio da “divisão e conquista”, isto é, o espaço de busca é dividido em espaços menores de modo a simplificar a tarefa a ser realizada.
Para um vetor que armazena de forma ordenada uma quantidade bastante considerável de dados, se considerarmos que o dado a ser procurado encontra-se entre as primeiras posições do vetor, o algoritmo da busca sequencial será mais rápido em encontrar o dado que o algoritmo da busca binária.
Quando é realizada uma busca em um vetor, normalmente não se tem ideia em que posição o dado a ser buscado se encontra no vetor, ou mesmo se o dado buscado não está no vetor. E sendo assim, no caso de vetores ordenados o algoritmo de busca binária é muito mais eficiente que o algoritmo de busca sequencial, na maioria dos casos.
 (X) Apenas a I está errada.
A definição de uma estrutura não cria nenhuma variável, para criar uma variável do tipo estrutura, deve-se incluir uma instrução de declaração de variável. E como outras variáveis na linguagem C++, as variáveis do tipo estrutura podem ser inicializadas logo após a sua criação.Marque a alternativa CORRETA para inicialização de uma variável do tipo Aluno, cuja a estrutura é apresentada a seguir:
	
struct Aluno {
int mat;
float nota[3];
char nome[50];
};
 (X) Aluno Jose={201001,5.0,5.8,5.7,"Jose Gomes dos Santos"};
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.
(X) Bolha
Uma fila duplamente terminada, isto é, uma estrutura linear que permite inserir e remover de ambos os extremos chamada de:
 (X) Deque.
 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.
Quadro 1 – Estruturas				Quadro 2 – Coleções de dados
Lineares					a- Pilha
Não Lineares					b- Vetor
c- Grafo
							d- Lista
A correta associação entre os elementos das duas tabelas é:
 (X) a1, b1, c2, d1
Analise as seguintes afirmações e Indique a opção que contenha todas as afirmações verdadeiras.
Na Passagem por Referência, o parâmetro que vai ser passado na chamada da função deve ser uma variável, de tal forma que uma alteração de valor neste parâmetro também altera a variável correspondente. 
Uma recursão consiste em uma função chamar ela mesma com argumentos sempre do mesmo valor. 
Considerando-se o escopo das variáveis, é correto afirmar que uma variável é dita global quando a sua passagem no momento da chamada de uma função se dá tanto por valor quanto por referência. Uma variável é do local quando esta passagem se dá apenas por valor. 
 (X) somente a alternativa I.
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çãoque possui a estrutura de dados mais adequada a este programa.
 (X) Pilha Sequencial
Ordene a coluna direita de acordo com a da esquerda, associando as características de implementação cada: (Podem existir mais de uma opção à direita para alguma da esquerda). Indique a alternativa correta:
Lista ligada desordenada		( )Inserção e remoção em tempo constante.
Array ordenada				( )Consulta por busca binária em tempo O(log n). 
Método (Bubble Sort)			( )Consulta atravessa a lista toda.
( )Consiste na troca de valores entre posições consecutivas.
( )é o processo mais simples de entender e implementar.
( )Inserção e remoção levam tempo linear.
 (X) a - b - a - c - c - b
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:
(X) Seleção
As pilhas sequenciais são estruturas que guardam a ordem reversa dos dados nelas armazenados, e isto em muitas ocasiões é muito vantajoso. A operação usada para inserir um elemento X numa pilha é conhecida na literatura como PUSH (X). Para remover um elemento de uma pilha a operação é o POP( ). Assim estas duas funções devem implentar o algoritmo LIFO (Last In - First Out ) ou o último a entrar é o primeiro a sair. Sendo assim se aplicarmos as seguintes operações em uma PILHA vazia:
PUSH(10),PUSH(5),POP(),PUSH(7),POP(),PUSH(2),POP(),POP( ).
Quais valores restarão na pilha?
 (X) Nenhum, a pilha estará vazia.
A declaração de variáveis na programação é o ato de reservar um espaço na memória para poder armazenar valores de um determinado tipo. Essas variáveis podem ser classificadas como variáveis locais e globais. Sendo assim, qual das situações abaixo representa melhor o conceito das variáveis globais.
 (X) Ao modificar o valor da variável 'X' na função "modifica" seu valor modificado poderá ser apresentado 
 em qualquer outra função do programa.
Na estrutura de dados tipo pilha, há duas operações básicas para empilhamento e desempilhamento. Essas operações são conhecidas como:
 (X) PUSH e POP.
Sabemos que podemos representar uma expressão de três formas, sendo que uma delas é chamada de notação polonesa reversa ( pós-fixa). Suponha que um professor de Estrutura de Dados desejasse compor a nota do bimestre com uma prova e um trabalho oral, usando pesos diferenciados para as notas. Sendo assim, usaria a média ponderada como a expressão abaixo.
 
A única calculadora que encontrou disponível foi uma com representação pós fixa.
Assinale a alternativa que apresenta a sequência que deveria ser digitada pelo professor para conseguir calcular a média de um aluno.
 A*B + C*D / B+D
(X) nota1 peso1 * nota2 peso2 * + peso1 peso2 + /
O resultado de um concurso foi armazenado por um programador em um vetor, onde cada elemento (descrito pelo struct Candidato) possui a informação da matrícula e nota de cada candidato, conforme descrito a seguir. Deseja-se que o vetor com os resultados fique ordenado em ordem decrescente pela nota. O programador pretende usar o algoritmo de busca descrito a seguir, porém precisa de ajuda no trecho contendo ********. Indique a opção que contém a solução que completa as linhas 1, 3 e 7 do algoritmo.
(X) struct Candidato 3. struct Candidato 7. v[i].nota > v[maior].nota
Com relação as listas lineares sequenciais:
Uma lista linear sequencial é um vetor em linguagens estruturadas, também chamado de array.
Um elemento de uma lista linear sequencial pode ser acessado diretamente através de um índice.
Uma lista linear sequencial pode ter elementos de um mesmo tipo, ou de tipos diferentes.
(X) Apenas as afirmações I e II estão corretas.
Em uma lista linear simplesmente encadeada. 
 (X) Cada nó possui um só ponteiro que referencia o próximo nó da lista. 
Um apontador é uma variável que contém o endereço de outra variável. Apontadores são muito usados, em parte porque são, às vezes, a única forma de se expressar um processo de computação e, em parte, porque, normalmente, implicam um código mais compacto e eficiente que o obtido de outras formas. Considerando o uso apontadores nas linguagens procedurais atuais, julgue os itens que se seguem com E se for errado e C se for certo.
( ) O uso de apontadores como argumentos de funções que realizem chamada por valor não permite alteração de 
 seus conteúdos de memória na função.
( ) Com apontadores, é possível criar funções que retornem estruturas de dados complexas.
( ) Para recuperar o valor da variável apontada, basta que o apontador seja atribuído a uma variável de mesmo tipo.
( ) Arranjos de apontadores podem ser usados em funções que recebam como argumentos um número variável da 
 cadeias de caracteres.
( ) Em geral, para que um arranjo seja percorrido por um ponteiro, para cada elemento do arranjo deve-se adicionar 
 ao ponteiro o número de bytes que o elemento ocupa em memória.
 (X) E - C - E - C - E
Em relação às estruturas de dados, é correto afirmar:
 (X) Guardar endereço de memória em "nós", normalmente identificados por previous ou next, é uma 
 característica presente nas listas duplamente encadeadas.
Considere que os seguintes itens são inseridos, nesta ordem, em uma estrutura de dados: 3, 4, 7, 10, 1. Marque a alternativa correspondente ao segundo item a ser retirado caso essa estrutura de dados seja uma fila, lista e pilha, respectivamente.
(X) 4; impossível determinar; 10.
Marque a afirmativa que represente uma separação.
(X) Consiste em dividir a lista em duas outras listas. A quantidade de nós que cada lista terá, depende da 
 necessidade.
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.
(X) t=p->dir;
 p->dir = p->esq;
 p->esq = t;
Suponha uma listagem mantida com informações sobre um equipamento a ser adquirido por uma empresa. A listagem possui as informações sobre de 10 fornecedores, descritas a seguir
próximo: um ponteiro para o próximo fornecedor da listagem;
nome: nome, identificando o fornecedor;
valor: preço do equipamento no fornecedor;
anterior: um ponteiro para o fornecedor anterior da listagem.
Sendo o fornecedor "Z" o quinto elemento desta listagem e "X" e "Y" dois outros fornecedores que não pertencem à listagem, com seus respectivos ponteiros "pZ", "pX" e "pY", considere o trecho de código abaixo.
pY->proximo = pX;
pX->anterior = pY;
pX->proximo = pZ->proximo;
pZ->proximo->anterior = pX;
pZ->proximo = pY;
pY->anterior = pZ;
Este trecho de código é usado para inserir na listagem os fornecedores:
(X) Y, logo após o Z, e X, logo após o Y.
As coleções de dados podem ser classificadas em estruturas lineares e estruturas não lineares. Nesse contexto, é correto afirmar que:
(X) Na tabela de Hash a chave é transformada num índice inteiro que é usado para acessar os dados. A chave pode ser um string, desde que haja uma função que transforme essa chave num inteiro. É uma estrutura linear.
Seja Q uma estruturade dados do tipo fila, em que ENQUEUE(X) significa a adição do elemento X à Q e que DEQUEUE(), a retirada de um elemento. Q está inicialmente vazia e sofre a seguinte sequencia de operações:
ENQUEUE(1), ENQUEUE(2), DEQUEUE(), ENQUEUE(3), ENQUEUE(4), DEQUEUE(), DEQUEUE(), ENQUEUE(5).
Ao final da sequencia, a soma dos elementos de que (Q) será?
(X) 9
As funções em programação permitem que se possa realizar a modularização do código diminuindo assim sua complexidade. Analise a função abaixo e assinale alternativa que descreve corretamente o tipo de função:
int funcao (int x){
if(x == 0)
return 0;
else
 funcao(x-1);
}
 (X) Recursiva
O espaço necessário para a representação dos dados pode ser alocado à medida que se torne necessário, através da alocação dinâmica. Uma estrutura armazenada através de encadeamento apresenta seus nodos alocados em posições aleatórias na memória, e não lado a lado. Dessa forma, existem várias vantagens no uso de representar os dados por encadeamento. Marque a alternativa correta que apresenta estas vantagens.
(X) Compartilhamento de memória, maleabilidade e facilidade para inserção e remoção de componentes.
Considerando as definições de estruturas de dados e a declaração tipo nó :: reg (dado: inteiro; próximo: ref nó), na qual reg é um registro contendo os campos: dado, que guarda valores inteiros, e próximo, que guarda endereço de outro nó, assinale a opção correta:
(X) O algoritmo para inclusão de elementos em uma pilha é usado sem nenhuma alteração para incluir 
 elementos em uma lista.
Em algumas situações, principalmente na utilização de listas, há a necessidade de posicionar o ponteiro em determinado local da lista. Dessa forma, analisando o trecho de código abaixo, que mostra uma função, assinale a alternativa correta que descreve o objetivo desta. Sabe-se que o sinal de asterisco (*) sinaliza um ponteiro.
void funcao (Nodo **P){
 if ( *P != NULL ){
 while ( (*P) -> Anterior != NULL )
 *P= (*P) -> Anterior;
 }
}
(X) Posicionar o ponteiro no início da lista
Respeitando as ordens de inserção e de retirada dos dados, uma estrutura de:
(X) pilha é também denominada LIFO ou FILO.
Uma estrutura de dados em lista duplamente encadeada permite na cadeia movimentos para:
(X) frente e para tras, apenas.
Qual o valor de a após a execução do trecho abaixo?
int a = 10;
int *x;
x = &a;
*x = 55;
(X) 55
Uma lista simplesmente encadeada pode ser transformada em uma lista duplamente encadeada em tempo O(1) PORQUE, para transformar uma lista simplesmente encadeada em duplamente encadeada basta fazer uma cópia invertida de cada ponteiro (o destino do novo ponteiro passa a ser a origem do ponteiro original e vice-versa) e existe um número constante e limitado de cópias a fazer. Analisando as afirmações acima, conclui-se que:
(X) as duas afirmações são falsas.
Marque a alternativa que completa a definição.
( ) O container do tipo _____utiliza a ordenação Last in First Out (LIFO). Pilha
( ) O container do tipo _____utiliza a ordenação First in First Out (FIFO). Fila
( ) O container _____a ordenação utilizada não importa, uma vez que a recuperação dos dados é feita pela posição 
 do mesmo. Tabela
( ) O container do tipo _____permite acesso aos dados armazenados pelo seu conteúdo. Dicionário
I= dicionário, II= fila, III= pilha e IV= tabela. 
(X) III - II - IV – I
O que acontece quando tentamos retirar um elemento de uma pilha que já está vazia? 
(X) Underflow.
Qual das seguintes estruturas de dados é classificada como heterogênea?
(X) Registro
Na criação de uma função precisamos definir suas partes, sendo algumas obrigatórias e outras alternativas, na linguagem C temos: 
tipo nome ( tipo1 parâmetro1, tipo2 parâmetro2, ..., tipon parâmetroN) { corpo da função } 
Das opções apresentadas marque a que apresenta apenas partes obrigatórias de se digitar de forma que a função execute alguma tarefa, sem levar em consideração os símbolos (chaves, parêntese, etc).
(X) Nome, Tipo e Corpo da função
Para aprovação imediata nas disciplinas, o aluno deve obter média nas duas primeiras provas (AV1 e AV2) igual ou superior a 6,0. Caso o aluno obtenha média inferior a 6,0, pode fazer a uma terceira prova (AV3) e para ser aprovado a média aritmética de suas três provas deve ser maior ou igual a 6,0. Marque a alternativa correta da implementação de uma função que receba como parâmetros as notas das duas primeiras provas de um aluno (AV1 e AV2), que ficou para final (AV3) e retorne a nota mínima que o aluno precisa tirar na terceira prova para que seja aprovado. 
(X)	floatnota_minima(float av1,float av2) 
{ 	
 return (18-av1-av2); 
}
O tipo estrutura é a forma existente em C++ de possibilitar ao programador a criar seus próprios tipos de dado. Seja um tipo de dado definido pela estrutura: 
struct ponto{ int x; int y}; 
Considere ainda a seguinte declaração de variáveis: ponto p1,p2,p3; 
Qual a única instrução referente as estas variáveis é VÁLIDA? 
(X) p1=p2;
Com relação à struct, é correto afirmar que : 5 
(X) Cada elemento da struct é denominado membro ou campo, sendo que a struct pode armazenar elementos de tipos diferentes ou não. 
A alocação dinâmica de memória vem possibilitar a criação de tipos de dados e estruturas de qualquer tamanho durante a execução do programa. Quais são os operadores que respectivamente alocam e liberam espaço na memória?
(X) new e delete.
Nas listas encadeadas podemos fazer referência a uma parte de um nó, através de um outro nó. Na estrutura apresentada o ponteiro p armazena o endereço do próximo nó.
struct teste {
int valor;
struct teste *p;
};
Das opções apresentadas qual permite armazenar na variável val do tipo inteiro o valor que está no nó seguinte ao nó posicionado , sabendo-se que aux, contem o endereço do nó atual.
 (X) val= aux->p->valor;
Geralmente em algumas situações é necessário fazer a desalocação do espaço utilizado na memória. Porém, isso depende de como a reserva de uma quantidade de espaço de memória é feita, pois em alguns casos, o próprio compilador faz a desalocação. Quando o compilador não faz esta desalocação a memória foi reservada utilizando______.
(X) Alocação dinâmica de memória
Em relação as estruturas de dados, aquela que corresponde ao armazenamento em uma lista linear com a posição relativa (não contígua) na memória de dois nós consecutivos da lista é conhecida por alocação: 
(X) Encadeada. 
Marque a afirmativa correta para a "Inserção em lista linear sequencial ordenada".
(X) Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos.
Considere o algoritmo de busca: 
Testar o elemento a m (a índice m) sorteado aleatoriamente e compará-lo ao argumento de busca x. Se o elemento for igual a x, a busca termina. Se menor que x todos os elementos com índices menores ou iguais a m podem ser descartados dos próximos testes e se for maior que x todos aqueles que possuem índices maiores ou iguais a m também podem ser descartados. 
Tal algoritmo é denominado busca ...
(X) binária.
As coleções de dados podem ser classificadas em estruturas lineares e estruturas não lineares. Nesse contexto, é correto afirmar que:
(X) na tabela de Hash a chave é transformada num índice inteiro que é usado para acessar os dados. A chave 
 pode ser um string, desde que haja uma função que transforme essa chave num inteiro. É uma estrutura 
 linear.
As listas encadeadas podem ser elaboradas de duas formas utilizando uma técnica de encadeamento simplesmente ou encadeamento duplo. O que difere uma lista simplesmente encadeada de uma lista duplamente encadeada?
(X) Em uma lista simplesmente encadeada cada nó aponta para um único nó enquanto a lista duplamente 
 encadeada aponta para mais de um nó.
Marque a afirmativa correta para a "Ordenação em Listas Lineares Sequenciais".
(X) É o processo pelo qual um conjunto de dados é colocadoem uma ordem crescente ou decrescente
Os membros de uma estrutura são, normalmente, formados de tipos de dados nativos do 
C++, entretanto um membro de uma estrutura pode ser uma outra estrutura. Assim, seja a 
estrutura definida da seguinte forma: 
structveiculo { 
float valor; 
charplaca[7]; 
structlocador{ 
char nome[50]; 
int idade; 
}; 
}; 
 
Marque a única alternativa CORRETA de atribuição de valor a um membro da variável definida 
como: veiculo carro; 
(X) carro.locador.idade=21;
Pode-se criar vetores(arrays) de estruturas(struct), onde cada posição do vetor contém o 
mesmo conjunto de dados definido na estrutura. Assim, seja o vetor de estrutura: 
struct aluno { 
int matricula; 
char nome[50]; 
}ListaAluno[60]; 
 
Marque a única alternativa CORRETA para atribuição de dado a um dos elementos do vetor ListaAluno[ ]: 
(X) ListaAluno[2].matricula=201101;
Considere o seguinte trecho na main : 
int v[ ] ={1,2,3,4,5}; 
descobrir(v,5);  
 e a definição da função : 
void descobrir(int v[ ], int n) { 
     for (int i = 0; i < n; i++)  
           if (i % 2 == 0)  
               v[i] = v[i] + i;  
          else  
               v[i] = v[i] – i; 
}
(X) 1    1    5    1    9
O protótipo da função que permitirá calcular o produto (multiplicação) entre dois números 
inteiros de acordo com o trecho da chamada : 
      cout << “Produto = “ << multiplicar(a,b); 
(X) int multiplicar(int, int);
Baseado na declaração do seguinte registro: 
struct teste{ 
char coisa[50]; 
int numero; 
}; 
Qual das opções cria respectivamente uma variável e um vetor de 30 posições para o registro 
declarado de forma correta: 
(X) struct teste variavel, vetor[30]; 
Na criação de uma função precisamos definir suas partes, sendo algumas obrigatórias e 
outras alternativas, na linguagem C temos: 
tipo nome ( tipo1 parâmetro1, tipo2 parâmetro2, ..., tipon parâmetroN) { corpo da 
função } 
Das opções apresentadas marque a que apresenta apenas partes obrigatórias de se digitar de 
forma que a função execute alguma tarefa, sem levar em consideração os símbolos (chaves, 
parêntese, etc). 
(X) Nome, Tipo e Corpo da função. 
Pilha é uma estrutura de dados.
(X) Cujo acesso aos seus elementos segue a lógica LIFO.
No contexto de estrutura de dados, uma pilha é:
(X) um tipo de lista linear em que as operações de inserção e remoção são realizadas na extremidade denominada topo.
Sobre o funcionamento da busca binária, é correto afirmar que dividindo seu vetor em duas metades.
(X) Se o item for igual ao item que está na metade do vetor, o item foi encontrado.
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.
(X) Lista Sequencial
Seja uma lista encadeada cujos nodos são formados pelo seguinte tipo de dado:
struct empregado{
 long int matricula;
 float salario;
 empregado *proximo;
};
Suponha que o ponteiro pont tenha o endereço de um nodo da lista, o qual se deseja atribuir um novo valor para o campo salario. Marque a alternativa que corretamente altera o valor do campo salario para 5000.00.
(X) salario=5000.00;
São métodos ou algoritmos conhecidos de ordenação de dados por troca:
(X) bubble sort e quicksort
Um aluno, sempre que tinha um tempo sobrando, estudava o conteúdo da disciplina de Estrutura de Dados.
Ao pesquisar sobre as funções usadas por Pilhas e Filas dinâmicas, percebeu que existe uma função que tanta pode ser usada com Pilha quanto por Fila.
 Assinale a alternativa onde se encontra a finalidade dessa função.
 (X) Exibir um elemento
Em uma aplicação se pode utilizar a “ordenação”?
(X) Busca, Par mais próximo, Unicidade de elementos, Distribuição de frequência, Seleção e Casco convexo.
Complete os espaços na afirmativa e assinale a alternativa que apresenta as respostas corretas: O escalonamento_________ é do tipo________, em que o processo que chega primeiro na fila de pronto é o escolhido para ser executado.
(X) FIFO, Não preemptivo.

Outros materiais