Buscar

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 55 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 55 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 55 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

Apresentando as estruturas de dados 
 
Para organizar as fotos de minha família com os ancestrais de várias gerações, minha filha usou uma estrutura de 
dados que é ..... Assinale a opção certa. 
Ú lista 
Ú pilha 
Ú fila 
Ú árvore 
Ú grafo 
 
Diferentes tipos de estrutura de dados são adequadas a diferentes tipos de aplicação e algumas são altamente 
especializadas, destinando-se a algumas tarefas específicas. Dessa forma a definição de Estrutura de Dados está 
expressa na alternativa: 
Ú É um modo 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. 
Ú É um modo de utilização de dados nos programas de computador. 
Ú São os nomes dados as variáveis na montagem de uma rotina. 
Ú É um modo de deleção de dados em um computador. 
 
 
As estruturas de dados podem ser caracterizadas como sendo uma forma organizada de armazenar dados ou 
informações na memória, de modo a otimizar o acesso a estes. Muitas vezes existem algoritmos de manipulação 
dados associados a estas estruturas. Verifique as seguintes sentenças: 
 
I-Filas são estruturas que recuperam os dados na ordem direta em que estes foram armazenados. 
II-As Pilhas são estruturas que recuperam os dados na ordem reversa em que estes foram armazenados. 
III-As Pilhas são estruturas que recuperam os dados na ordem direta em que estes foram armazenados. 
IV-As Filas são estruturas que recuperam os dados na ordem reversa em que estes foram armazenados. 
 
Marque a alternativa CORRETA: 
 
As alternativas II e IV estão corretas. 
As alternativas III e IV estão corretas. 
As alternativas I e II estão corretas 
Todas as alternativas estão corretas. 
As alternativas I e III estão corretas. 
 
A forma correta para imprimir o valor do último elemento de um vetor v com n posições é: 
Ú cout << v[n+1]; 
Ú cout << v[n-1]; 
Ú cin >> v[-1]; 
Ú cout << v[ultimo]; 
Ú cout << v[n]; 
 
Das estruturas de dados a seguir aquela que NÃO é uma estrutura linear é : 
Ú Vetor. 
Ú Grafo. 
Ú Lista. 
Ú Fila. 
Ú Pilha. 
O que é estrutura de dados? 
Ú É uma forma determinada de armazenamento de dados em um banco de dados. 
Ú É 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. 
 
Ú É 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. 
Ú É um modo particular de armazenamento e organização de dados em um computador de modo que 
possam ser usados eficientemente. 
Ú É um conjunto de técnicas de programação. 
 
Observe o trecho do programa em C++ abaixo e, após, entrar com os valores sugeridos para sua execução 
assinale a alternativa que representa a resposta final. 
cin >> a; 
cin >> b; 
cin >> c; 
cin >> d; 
 
cout << a; 
cout << b; 
cout << c; 
cout << d; 
 
cout << d; 
cout << c; 
cout << b; 
cout << a; 
 
Ú Após a impressão dos valores pela ordem teremos uma fila e uma pilha. 
Ú Após a impressão dos valores pela ordem teremos duas pilhas. 
Ú Após a impressão dos valores pela ordem teremos uma pilha e uma fila. 
Ú Após a impressão dos valores pela ordem teremos uma fila e um grafo. 
Ú Após a impressão dos valores pela ordem teremos duas filas. 
 
Estão entre algumas das possíveis formas de se estruturar dados: 
Ú Lista encadeada, vetores, algoritmos. 
Ú Grafos, lista ordenada, vetores. 
Ú Grafos, lista ordenada, algoritmos. 
Ú Algoritmos, lista ordenada, vetores. 
Ú Grafos, algoritmos, fila. 
 
Assinale a alternativa correta sobre tipos abstratos de dados: 
Ú Um tipo abstrato de dados descreve, além do que se pode fazer com os dados, como as operações serão 
efetivamente implementadas. 
Ú Um tipo abstrato de dados deve sempre ser representado por meio dos recursos específicos de uma 
linguagem de programação. 
Ú Um tipo abstrato de dados é um modo particular de armazenamento e organização de dados em um 
computador de modo que possam ser usados eficientemente. 
Ú Um tipo abstrato de dados é composto por um modelo de dados e um conjunto de operadores definidos 
sobre esses dados. 
Ú É fundamental que os tipos abstratos de dados proponham um conjunto eficiente de algoritmos para 
realização de suas operações. 
 
Estão entre algumas das possíveis formas de estruturas de dados: 
Ú Listas, vetores, cin 
Ú Árvores binárias, pilhas, algoritmos 
Ú cout, Funções, vetores 
Ú Árvores binárias, pilhas, vetores 
Ú Grafos, funções, fila 
 
É um exemplo de TAD Não Linear: 
Ú Pilhas 
Ú Grafos 
 
Ú Listas 
Ú Filas de Prioridade 
Ú Filas 
 
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. 
Ú Lista Encadeada 
Ú Pilha Sequencial 
Ú Lista Sequencial 
Ú Pilha Encadeada 
Ú Fila Sequencial 
 
Podemos dizer que estrutura de dados é: 
Ú Uma sequência de passos computacionais que transforma uma entrada em uma saída previamente 
determinada. 
Ú É a saída, que satisfaz a quaisquer restrições impostas pelo problema, necessária para se calcular uma 
solução do problema. 
Ú O que permite o armazenamento e a recuperação de dados independentemente de seu conteúdo. 
Ú A entrada, que satisfaz a quaisquer restrições impostas pelo problema, necessária para se calcular uma 
solução do problema. 
Ú O meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificações. 
 
Leia com atenção as afirmativas abaixo e assinale a resposta correta. 
 
I A estrutura de dados que melhor representa os diretórios ou pastas de arquivos do computador é a árvore. 
II A estrutura de dados FILA é não linear assim como o Grafo. 
III O termo folha em uma estrutura de dados é usado para um nó sem filhos e que tem grau 0, 
IV O grau de uma árvore é definido pelo número de subárvores de um nó. 
V O grafo é uma estrutura de dados que tem limitação para o número de vértices. 
VI Uma das aplicações da estrutura de dados grafo é a Computação Gráfica. 
 
Ú II, IV, V e VI são afirmativas verdadeiras 
Ú I, III, IV e VI são afirmativas verdadeiras 
Ú II, IV e V são afirmativas verdadeiras 
Ú I, II, III e VI são afirmativas verdadeiras 
Ú I, II e V são afirmativas verdadeiras 
Os irmãos Silva irão viajar por vários países da Europa e por isso, traçaram no mapa o percurso que farão, de 
cidade a cidade. Qual a estrutura de dados mais adequada para modelar este problema ? 
Ú Pilha 
Ú Árvore 
Ú Grafo 
Ú Fila 
Ú Lista 
 
Preciso cadastrar todos os interessados em meu novo curso de programação. Qual a estrutura de dados mais 
adequada para modelar este problema, visto que não há qualquer preocupação com ordem de chegada ou saída 
de aluno da turma. 
Ú Árvore 
Ú Grafo 
Ú Lista 
Ú Pilha 
Ú Fila 
 
Qual estrutura de dados é mais adequada para armazenar a estrutura do diretório do sistema de arquivos de um 
sistema operacional? 
 
Ú Árvore 
Ú Grafo 
Ú Fila 
Ú Lista 
Ú Pilha 
 
Preciso fazer uma relação de tudo o que levar em minha viagem de mochila pela Europa. A estrutura de dados 
mais adequada para armazenar tudo que preciso levar é ... 
Ú Grafo 
Ú árvore 
Ú fila 
Ú lista 
Ú pilha 
 
A forma correta para imprimir o valor do último elemento de um vetor v com n posições é: 
Ú cout << v[n+1]; 
Ú cin >> v[-1]; 
Ú cout << v[ultimo]; 
Ú cout << v[n-1]; 
Ú cout << v[n]; 
 
Para organizar as fotos de minha família com os ancestrais de várias gerações, minha filha usou uma estruturade 
dados que é ..... Assinale a opção certa. 
Ú pilha 
Ú lista 
Ú fila 
Ú grafo 
Ú árvore 
 
Diferentes tipos de estrutura de dados são adequadas a diferentes tipos de aplicação e algumas são altamente 
especializadas, destinando-se a algumas tarefas específicas. Dessa forma a definição de Estrutura de Dados está 
expressa na alternativa: 
Ú É um modo de deleção de dados em um computador. 
Ú É um modo particular de armazenamento e organização de dados em um computador de modo que 
possam ser usados de modo eficiente. 
Ú 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 distribuição e organização de dados em uma rede de computador de modo que possam 
ser usados de modo eficiente. 
 
As estruturas de dados podem ser caracterizadas como sendo uma forma organizada de armazenar dados ou 
informações na memória, de modo a otimizar o acesso a estes. Muitas vezes existem algoritmos de manipulação 
dados associados a estas estruturas. Verifique as seguintes sentenças: 
 
I-Filas são estruturas que recuperam os dados na ordem direta em que estes foram armazenados. 
 
II-As Pilhas são estruturas que recuperam os dados na ordem reversa em que estes foram armazenados. 
 
III-As Pilhas são estruturas que recuperam os dados na ordem direta em que estes foram armazenados. 
 
IV-As Filas são estruturas que recuperam os dados na ordem reversa em que estes foram armazenados. 
 
Marque a alternativa CORRETA: 
Ú As alternativas I e III estão corretas. 
Ú Todas as alternativas estão corretas. 
Ú As alternativas I e II estão corretas 
Ú As alternativas II e IV estão corretas. 
Ú As alternativas III e IV estão corretas. 
 
 
Das estruturas de dados a seguir aquela que NÃO é uma estrutura linear é : 
Ú Vetor. 
Ú Fila. 
Ú Pilha. 
Ú Lista. 
Ú Grafo. 
Explicação: 
Lineares : lista, pilha, fila, deque. Com ou sem vetor, que é linear. 
Não lineares: árvore e grafo. 
 
Funções 
 
Considere a função Adivinhe , n = 4 e que X é formado pela sequência "algoritmo". Assinale a opção que 
corretamente mostra o vetor Y ao fim da execução da função Adivinhe. 
void Adivinhe (char X[ ], char Y [ ], int n) { 
 int i, j; 
 j = 0; 
 for ( i = n; i >= 0; i--) 
 { 
 Y[j] = X[i]; 
 j++; 
 } 
 Y[j] = '\0'; 
} 
Ú algor 
Ú algo 
Ú Ocorre erro, pois a função, que é do tipo void, não retorna o vetor Y. 
Ú Rogla 
Ú ogla 
 
Considere o trecho de um programa escrito em C++. 
int func1 (int vtx[], int tam) { 
 int soma=0; 
 for (int i=0 ; i < tam; i++) { 
 if (i % 2 !=0) 
 soma += vtx[i]; 
 } 
 return soma; 
} 
int main() { 
 int vt[5] = {10,20,30,40,50}; 
 cout << func1 (vt,5); 
} 
 
Marque a opção correta que mostra o que é impresso na tela. 
Ú 60 
Ú 40 
Ú 20 
Ú 30 
Ú 50 
 
Qual será a saída para o seguinte trecho de código? 
 
void FUNC1() 
{ 
int B = -100; 
cout << "Valor de B dentro da função FUNC1: " << B; 
 
} 
void FUNC2() { 
int B = -200; 
cout << "Valor de B dentro da função FUNC2: " << B; 
} 
int main() { 
int B = 10; 
cout << "Valor de B: " << B; 
B = 20; 
FUNC1(); 
cout << "Valor de B: " << B; 
B = 30; 
FUNC2(); 
cout << "Valor de B: " << B; 
} 
 
Ú Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -200 
Valor de B: 30 
Ú Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -400 
Valor de B: 30 
Ú Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 10 Valor de B dentro da função FUNC2: -200 
Valor de B: 30 
Ú Valor de B: 10 Valor de B dentro da função FUNC1: -100 Valor de B: 20 Valor de B dentro da função FUNC2: -200 
Valor de B: 20 
Ú Valor de B: 10 Valor de B dentro da função FUNC1: -200 Valor de B: 20 Valor de B dentro da função FUNC2: -200 
Valor de B: 30 
 
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: 
Ú Passagem por valor. 
Ú Registro. 
Ú Ponteiros. 
Ú Envio de valor. 
Ú Envio de inteiro. 
 
Considere a função abaixo: 
 
int func (int a, int& b){ 
 
 a = b - a; 
 b = a * 2; 
 a = b * 2; 
 return a; 
} 
 
Considere o seguinte código na função main: 
 int x = 2, y = 3, z; 
 z = func (x, y); 
 cout << x << "; " << y << "; " << z; 
 
O que será impresso? 
Ú 2; 2; 4 
Ú 2; 2; 1 
Ú 1; 3; 1 
Ú 4; 2; 4 
 
Ú 1; 2; 4 
a recebeu o valor de x que era 2 
b recebeu 3, a partir de y, que foi passado por referência. 
 
 
Executando a função, passo a passo, tem-se : 
a recebeu 1 
b recebeu 2 
a recebeu um novo valor, que é 4. 
Daí a função retorna o valor de a, que é 4. 
Voltando para a main temos que z recebeu o retorno da função que é 4, x não se alterou, valendo 2 e y recebeu 4, 
devido a alteração na função no parâmetro b, passado por referência. 
Daí, na tela será impresso : 2; 2; 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: 10 13 
Ú Valores: 31 01 
Ú Valores: 10 10 
Ú Valores: 13 13 
Ú Valores: 13 10 
 
Considere o trecho de um programa escrito em C++ : 
int func1 (int n1, int n2) { 
 int soma=0; 
 for ( ; n1 < n2 ; n1 += 2) { 
 soma += n1; 
 } 
 return soma; 
} 
main() { 
 cout << func1(1.20); 
} 
 
Marque a opção correta que mostra o que é impresso na tela. 
Ú 80 
Ú 104 
Ú 90 
Ú 100 
Ú 102 
 
Considera a FUNÇÃO abaixo: 
void inverte(int &x, int &y) 
{ int aux = x; 
x = y; 
 
y = aux; } 
Quais valores serão impressos na tela quando o seguinte programa principal for executado? 
int main() 
{ int a = 18, b = 28; 
inverte(a, b); 
cout << a <<" e "<< b; 
return 0; } 
 
Ú 18 e 28 
Ú 28 e 18 
Ú 08 e 18 
Ú 18 e 18 
Ú 28 e 08 
 
Assinale a opção certa. 
Quando não se escreve o protótipo de uma função ... 
Ú A chamada da função poderá ser feita em qualquer hipótese. 
Ú A chamada da função não poderá ser feita em qualquer hipótese. 
Ú A definição da função deverá ser escrita, obrigatoriamente, após o programa principal. 
Ú É preciso definir a função antes do programa principal. 
Ú O programa não funcionará de forma alguma. 
 
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 pilha / área de registro 
Ú ( ) área de registro / área de pilha 
Ú ( ) área de registro / área de dados globais 
Ú ( ) área de dados globais / área de pilha 
Ú ( ) área de dados globais / área de registro 
 
Considere a função a seguir e a chamada da mesma efetuada no programa principal abaixo. Indique a opção que 
contem o que será impresso. 
int executar (int x, int &y) { 
 x = y * 2; 
 y = ++x; 
 return x + y; 
} 
int main () { 
int a=2, b=2, c=2; 
 
c = executar (a, b); 
cout << a << ", " << b << ", " << c; 
} 
 
Ú 2, 2, 9 
Ú 4, 5, 9 
Ú 3, 2, 8 
Ú 3, 5, 8 
Ú 2, 5, 10 
 
Uma função possui um valor de retorno inteiro, recebe por valor um inteiro como primeiro parâmetro e por 
referência um inteiro como segundo parâmetro.Qual das respostas abaixo poderia representar o protótipo dessa 
função: 
Ú int func (int a, int &b); 
Ú int func (&int, int); 
Ú void func (int &a, int &b); 
Ú int func (int &a, int b); 
Ú void func (int a, int &b); 
 
Considere o trecho de um programa escrito em C++. 
 int func1 (int n1, int n2) { 
 int aux = n1 % n2; 
 while ( aux != 0) { 
 n1 = n2; 
 n2 = aux; 
 aux = n1 % n2; 
 } 
 return n2; 
} 
int main() { 
 cout << func1 (27, 18); 
} 
 
Marque a opção correta que mostra o que é impresso na tela. 
 
Ú 3 
Ú 27 
Ú 6 
Ú 9 
Ú 18 
 
Na passagem por ____________________ , o endereço da variável da função chamadora é passado para a função 
chamada e, dessa forma, o valor poderá ser alterado, ou não. 
Ú número 
Ú caracter 
Ú valor 
Ú void 
Ú referência 
 
Considere o trecho de um programa escrito em C++ : 
long func1 (int n1) { 
 int ft=1, i = 1; 
 while ( i <= n1) { 
 ft *= i; 
 i++; 
 } 
 return ft; 
} 
 
main() { 
 cout << func1 (5); 
} 
 
Marque a opção correta que mostra o que é impresso na tela. 
Ú 120 
Ú 60 
Ú 5 
Ú 24 
Ú 1 
 
O processo de modulação de programa , utiliza funções afim de tomar os códigos mais inteligentes e também 
possibilitar uma manutenção mais fácil. Analise o código a seguir e marque a opção correta: 
 
#included<ioatream> 
Using namespace std; 
float n1,n2,n3,med; 
float medial( float, float, float) ; 
void entranda( ) ; 
void saida ( ) ; 
int main() 
{ 
 entrada() ; 
 saida() ; 
 retorn 0; 
} 
float medial( float a, float b, float c) 
{ retorn (a+b+c)/3;} 
Void entrada() 
{ 
 cout<<”Entre com a 1a. nota:”; 
 
Ú 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 não executa corretamente, pois o protótipo da função media( ) não apresenta a identificação 
dos parâmetros, mas apenas os tipos dos mesmos. 
Ú O programa executa perfeitamente independente da ordem das funções já que existem os seus 
protótipos. 
Ú O programa não executa corretamente pois as funções devem ser descritas antes da função main(), para 
que o compilador consiga reconhecê-las. 
Ú O programa não executa corretamente, pois os protótipos estão fora da ordem em que as funções são 
descritas. 
 
Assinale a opção certa. 
 Quando não se escreve o protótipo de uma função ... 
 
Ú A definição da função deverá ser escrita, obrigatoriamente, após o programa principal. 
Ú É preciso definir a função antes do programa principal. 
Ú O programa não funcionará de forma alguma. 
Ú A chamada da função não poderá ser feita em qualquer hipótese. 
Ú A chamada da função poderá ser feita em qualquer hipótese. 
 
 
 
 
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 pilha / área de registro 
Ú ( ) área de dados globais / área de pilha 
Ú ( ) área de dados globais / área de registro 
Ú ( ) área de registro / área de dados globais 
Ú ( ) área de registro / área de pilha 
 
Considere a função a seguir e a chamada da mesma efetuada no programa principal abaixo. Indique a opção que 
contem o que será impresso. 
 
int executar (int x, int &y) { 
 
 x = y * 2; 
 
 y = ++x; 
 
 return x + y; 
 
} 
 
int main () { 
 
int a=2, b=2, c=2; 
 
c = executar (a, b); 
 
cout << a << ", " << b << ", " << c; 
 
} 
 
Ú 4, 5, 9 
Ú 3, 2, 8 
Ú 2, 2, 9 
Ú 2, 5, 10 
Ú 3, 5, 8 
 
 
Uma função possui um valor de retorno inteiro, recebe por valor um inteiro como primeiro parâmetro e por 
referência um inteiro como segundo parâmetro. Qual das respostas abaixo poderia representar o protótipo dessa 
função: 
Ú void func (int a, int &b); 
 
Ú int func (&int, int); 
Ú int func (int a, int &b); 
Ú void func (int &a, int &b); 
Ú int func (int &a, int b); 
 
Considere o trecho de um programa escrito em C++. 
 
 int func1 (int n1, int n2) { 
 int aux = n1 % n2; 
 while ( aux != 0) { 
 n1 = n2; 
 n2 = aux; 
 aux = n1 % n2; 
 } 
 return n2; 
} 
int main() { 
 cout << func1 (27, 18); 
} 
 
Marque a opção correta que mostra o que é impresso na tela. 
 
Ú 6 
Ú 9 
Ú 18 
Ú 3 
Ú 27 
 
Na passagem por ____________________ , o endereço da variável da função chamadora é passado para a função 
chamada e, dessa forma, o valor poderá ser alterado, ou não. 
referência 
caracter 
valor 
número 
void 
 
Considere o trecho de um programa escrito em C++ : 
 
long func1 (int n1) { 
 int ft=1, i = 1; 
 while ( i <= n1) { 
 ft *= i; 
 i++; 
 } 
 return ft; 
} 
main() { 
 cout << func1 (5); 
} 
 
Marque a opção correta que mostra o que é impresso na tela. 
 
Ú 5 
Ú 24 
Ú 60 
Ú 120 
Ú 1 
 
 
Considere a seguinte função: void dobro(int x) { x = 2 * x; } Qual valor será impresso na tela quando o seguinte 
programa principal for executado? int main() { int n = 3; n = n + 2; dobro(n); cout << n; return 0; } 
Ú 10 
Ú 0 
Ú 5 
Ú 20 
Ú 3 
 
Para compararmos vetores de char, usaremos a função _____________________ . Para copiarmos o conteúdo de um 
vetor de char nas posições ocupadas por outro vetor de char, usaremos a função ______________________ . 
Ú strcmp(); e strlen() ; 
Ú strcmp(); e strcpy(); 
Ú strcmp(); e strcat(); 
Ú strcmp(); e strcmpi (); 
Ú strcat(); e strcpy() ; 
 
O que será mostrado na tela pelo programa abaixo ? 
#include < iostream > 
using namespace std; 
int a,b; 
void dobro(int x){ //x passado por valor 
 x=2*x; 
} 
int triplo(int y){ //y passado por valor 
 return 3*y; 
} 
void altera(int x, int &y) { //x passado por valor e y passado por referencia 
 x=x+a; 
 y=x+b; 
} 
 
int main (){ 
 a=2; 
 b=3; 
 dobro(a); 
 b=triplo(b); 
 altera(a,b); 
 cout<< a << " e " << b << endl; 
} 
 
Ú 4 e 9 
Ú 2 e 13 
Ú 4 e 12 
Ú 9 e 16 
Ú 2 e 9 
 
Sobre funções, é correto afirmar: 
Ú Obrigatoriamente devem retornam algum valor. 
Ú Não podem ser chamadas dentro de outras funções. 
Ú Obrigatoriamente devem possuir parâmetros. 
Ú Não devem conter variáveis locais em seu código. 
Ú São blocos de instruções que são executados quando são chamadas em alguma parte do programa. 
 
Considere as seguintes afirmativas : 
 
I) Os vetores em C++, quando passados como parâmetros de funções, são obrigatoriamente passados "por 
valor" e não "por referência". 
 
 
II) Variáveis globais são um recurso adequado para troca de informações entre funções distintas. 
 
III) Caso uma função necessite retornar mais de um valor ao programa que a chamou, deve fazê-lo usando 
parâmetros passados "por valor". 
 
As afirmativas corretas são: 
Ú Apenas I 
Ú Apenas II 
Ú Apenas III 
Ú Nenhuma está correta 
Ú Apenas I e II 
 
Funções são semelhantes aos procedimentos, exceto que uma função sempre retorna um valor. Um exemplo de 
função seria o conjunto de instruções para calcular o fatorial de um número e após a função ser executada, ela 
deve retornar o fatorial do número pedido. Marque a opção que representa um protótipo de função válido. 
Ú tipo parametros(parametros); 
Ú tipo parametros(int a, int b); 
Ú retorno nomeFuncao(parametros); 
Ú nome tipo(parametros); 
Ú void float(int a, int b); 
 
Blocos únicos de códigos que realizam diversas tarefas distintas são de difícil manutenção. Portanto, utiliza-se a 
técnica da modularização de programas, a fim de facilitar a implementação e a manutenção dos programas. Esta 
técnica tem como principal elemento: 
Ú Os Vetores 
Ú As funções 
Ú As Estruturas de Dados 
Ú Os Grafos 
Ú As Filas 
 
Ao definirmos uma função, podemos afirmar: 
 
I Toda função tem parâmetros 
II Quando nada retorna, o tipo é void 
III Quando todos os parâmetros são do mesmotipo, é suficiente usar o tipo uma vez e separar os nomes dos 
parâmetros por vírgulas 
IV Na passagem por valor, o endereço da variável da função chamadora é passado para a função chamada 
 
Após uma análise das afirmativas acima, escolha a opção correta. 
Ú Somente II e IV estão corretas 
Ú Somente II e III estão corretas 
Ú Somente II III e IV estão corretas 
Ú Somente I e II estão corretas 
Ú Somente II está correta 
 
ESTRUTURAS HETEROGÊNEAS 
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){ 
 for (int i = 0; i < n; i++) 
 
o if (v[i] == valor) 
 return i; 
 return -1; 
} 
 int ordena(float v[], float valor, int n) { 
 int ini = 0, fim = n-1, meio; 
 while (ini >= fim){ 
 meio = ini/2; 
 
o if (v[meio] == valor) 
 return meio; 
 if (valor < v[meio]) 
 fim = meio -1; 
 else 
 ini = meio+1; 
} 
 void ordena (int v[], int n){ 
 int i, j, aux; 
 for (j = 1; j < n; j++) 
 for (i=j; i > 0 && v[i-1]> v[i]; i--){ 
 aux = v[i-1]; 
 v[i-1] = v[i]; 
 v[i] = aux; 
 } 
} 
 int ordena(float v[], float valor, int n) { 
 int ini = 0, fim = n -1, meio; 
 while (ini <= fim){ 
 meio = (ini + fim)/2; 
 if (v[meio] == valor) 
return meio; 
 
o if (valor < v[meio]) 
 fim = meio -1; 
 else 
 ini = meio+1; 
 } 
 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! 
 
Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob 
uma lógica e associados por um nome. 
 
Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma 
estrutura como: 
 
 struct aluno { 
 string nome; 
 float nota; 
}; 
 
Suponha ainda que exista um vetor desta estrutura, definido como: 
 aluno vet [ 100]; 
 
Marque a alternativa em que é atribuída de forma correta a nota 5.7 para o décimo primeiro elemento deste 
vetor. 
Ú vet[10].aluno.nota=5.7 ; 
Ú aluno.vet[10]=5.7; 
Ú aluno.vet[10].nota=5.7; 
Ú vet[10]=aluno.5.7; 
Ú vet[10].nota=5.7; 
 
Qual das seguintes estruturas de dados é classificada como heterogênea? 
Ú Loop 
Ú Fila 
Ú Pilha 
Ú Registro 
Ú Vetor 
 
Explicação: 
Registro permite agregar dados de tipos diferentes. 
Vetor permite agregar dados do mesmo tipo. 
Pilha e fila implementadas com vetor ou lista encadeada. 
Loop : termo genérico para repetições. 
 
 
Marque a opção correta, considerando 
 
struct Livro { 
int codigo; 
float preco; 
} liv; 
Ú liv.preco = 30.70; 
Ú Livro.liv.codigo = 12345; 
Ú liv->preco = 30.70; 
Ú Livro->liv.codigo = 12345; 
Ú Livro.codigo = 12345; 
 
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; 
Ú aluno[10]=6.0; 
Ú vet[3].aluno=6.0; 
Ú aluno[3].10=6.0; 
 
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. 
Ú É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente. 
Ú Consiste em fazer uma busca em um vetor desordenado, dividindo o espaço de busca ao meio e 
verificando se o dado está no meio ou, antes do meio ou depois do meio. 
 
Pode-se definir uma estrutura heterogênea como sendo um conjunto de elementos, geralmente, agrupados sob 
uma lógica e associados por um nome. 
Esses elementos podem ser variáveis simples, matrizes ou ainda outras estruturas. Seja a definição de uma 
estrutura como: 
 
struct aluno { 
string nome; 
float nota; 
}; 
 
Suponha ainda que exista um vetor desta estrutura, definido como: 
 
aluno vet [100]; 
 
Marque a alternativa em que é atribuída de forma correta a nota 5.7 para o décimo primeiro elemento deste 
vetor. 
Ú vet[10].nota=5.7; 
Ú aluno.vet[10].nota=5.7; 
Ú vet[10]=aluno.5.7; 
Ú vet[10].aluno.nota=5.7 ; 
Ú aluno.vet[10]=5.7; 
 
 
Em C++, quando uma variável é declarada como uma struct, o acesso para atribuição e leitura dos membros 
(campos) deste registro se dá pelo operador : 
 
Ú (asterisco). 
Ú , (vírgula). 
Ú ∙ (ponto). 
Ú & (e comercial ou eitza). 
Ú (seta). 
 
Os algoritmos de busca são muito utilizados em estrutura de dados. Sendo assim, o algoritmo que realiza a busca 
em vetores e que exige acesso aleatório aos elementos do mesmo e que parte do pressuposto de que o vetor 
está ordenado e realiza sucessivas divisões do espaço de busca comparando o elemento que se deseja com o 
elemento do meio do vetor, é chamado de: 
Ú Pesquisa binária 
Ú Pesquisa sequêncial 
Ú Pesquisa ordenada 
Ú Tabela Hash 
Ú Pesquisa de seleção 
 
Nos métodos de ordenação interna, quais são aqueles classificados como tipo método simples? 
Ú Shell Sort, Quick Sort e Heap Sort 
Ú Selection Sort, Insert Sort e Bubble Sort 
Ú Insert Sort, Bubble Sort e Quick Sort 
Ú Selection Sort, Shell Sort e Bubble Sort 
Ú Insert Sort, Bubble Sort e Shell Sort 
 
 
Sabendo-se que o método de ordenção bolha ou bubble sort realiza a troca de elementos adjacentes até que 
todos os elementos de um vetor esteja ordenado. Então, se submetermos a sequencia de inteiros armazenada em 
um vetor inicialmente na seguinte ordem : 4, 2, 5, 1. 
 
Pode-se dizer que quando o maior elemento do vetor alcançar sua posição final, a ordenação apresentada no 
vetor é: 
 
Ú 2,1,4,5 
Ú 1,2,4,5 
Ú 4,1,2,5 
Ú 1,4,2,5 
Ú 2,4,1,5 
 
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 
 
Ú Mergesort 
Ú Bublesort 
Ú Shellsort 
Ú Heapsort 
Ú Quicksort 
 
Marque a afirmativa correta para a "Busca ou pesquisa binária". 
Ú Consiste em fazer uma busca em um vetor já ordenado, dividindoo espaço de busca ao meio e 
verificando se o dado está no meio ou, antes do meio ou depois do meio. 
Ú Consiste em adicionar um valor no vetor, alterando a ordem existente e ajustando o total de elementos. 
Ú Consiste em fazer uma busca em um vetor desordenado, dividindo o espaço de busca ao meio e 
verificando se o dado está no meio ou, antes do meio ou depois do meio. 
Ú Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. 
Ú É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente. 
 
Marque a afirmativa correta para a "Ordenação em Listas Lineares Sequenciais". 
Ú É o processo pelo qual um conjunto de dados é colocado em uma ordem crescente ou decrescente. 
Ú Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. 
 
Ú Consiste em fazer uma busca em um vetor desordenado, dividindo o espaço de busca ao meio e 
verificando se o dado está no meio ou, antes do meio ou depois do meio. 
Ú Consiste em adicionar um valor no vetor, alterando a ordem existente e ajustando o total de elementos. 
Ú Consiste em fazer uma busca em um vetor já ordenado, dividindo o espaço de busca ao meio e 
verificando se o dado está no meio ou, antes do meio ou depois do meio. 
 
Existem vários algoritmos de busca em estruturas de dados, um destes realiza a busca em vetores, e requer 
acesso aleatório aos elementos desta estrutura e parte do pressuposto de que os dados do vetor estejam 
ordenados e utiliza a técnica de divisão e conquista comparando o elemento desejado com o elemento do meio 
do vetor. Esta técnica ainda verifica se o elemento do meio do vetor for o desejado, a busca termina. Caso 
contrário, se o elemento do meio vier antes do elemento buscado, então a busca continua na metade posterior 
do vetor. E se o elemento do meio vier depois da chave, a busca continua na metade anterior do vetor. O 
algoritmo que utiliza esta metodologia é: 
Ú Bolha 
Ú Seleção 
Ú Inserção 
Ú Pesquisa binária 
Ú Pesquisa sequencial 
 
Considere a seguinte função busca escrita em linguagem C++ : 
 
bool busca(int vetor[ ], int n, int tam) 
{ 
 int ini=0, mid; 
 while (ini <= tam) 
 { 
 cout << " x "; 
 mid = (ini + tam)/2; 
 if (vetor[mid] == n) 
 return true; 
 else if (n > vetor[mid]) 
 ini = mid+1; 
 else 
 tam = mid-1; 
 } 
 return false; 
} 
 
Qual a quantidade total de impressões da letra x nas buscas pelos números n = 4, n = 2 e n = 0 no vetor 
[1,2,3,4,5,6,7,8], sendo tam = 7 ? 
 
int vetor[] = {1,2,3,4,5,6,7,8}; 
busca(vetor, 4, 7); 
busca(vetor, 2, 7); 
busca(vetor, 0, 7); 
 
Ú 5 
Ú 6 
Ú 9 
Ú 4 
Ú 8 
 
Analisando o trecho de código a seguir: 
 
inicio=0; 
fim= tamanho - 1; 
meio=(inicio+fim)/2; 
while(procura != nomeVetor[meio] && inicio != fim) 
 
{ 
 if(procura > nomeVetor[meio]) 
 inicio=meio+1; 
 else 
 fim=meio; 
 meio=(inicio+fim)/2; 
} 
if(nomeVetor[meio]==procura) 
 cout<<"\n....: "< < outroVetor[meio]<else 
 cout<<"\nDado nao encontrado\n"; 
 
Pode-se afirmar que: 
 
Ú trata-se da implementação do algortimo de busca binária. 
Ú trata-se da implementação do algortimo de ordenação bolha. 
Ú trata-se da implementação do algortimo de ordenação por seleção. 
Ú trata-se da implementação do algortimo de ordenação por inserção. 
Ú trata-se da implementação do algortimo de busca sequencial 
 
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. 
Ú 6 e 4 
Ú 5 e 5 
Ú 6 e 2 
Ú 7 e 1 
Ú 6 e 1 
"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 : 
 
Ú SelectionSort 
Ú InsertionSort 
Ú BubbleSort 
Ú QuickSort 
Ú MergeSort 
 
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 
Ú 5 e 5 
Ú 6 e 4 
Ú 6 e 2 
 
 
 
Considere a função misterio e o trecho abaixo. 
 
void misterio(int v[ ], int n) { //n é o número de elementos de v 
 int i, j, m, aux; 
 for (j = 0; j < n-1; j++) { 
 m = j; 
 for (i = j+1; i < n; i++) { 
 if (v[i] < v[m]) 
 m = i; 
 } 
 aux = v[j]; 
 v[j] = v[m]; 
 v[m] = aux; 
 } 
} 
Trecho na main : 
int v[4] = {40,30,10,20}; 
misterio(v, 4); 
 
Marque a opção correta. Como ficará o vetor após a execução da função misterio ? 
 
Ú 10 20 40 30 
Ú 10 30 40 20 
Ú 10 30 20 40 
Ú 10 20 30 40 
Ú 5 10 20 30 
 
Estude atentamente o código a segir: 
int deciframe(int v[ ], int tam, int e){ 
int i = 0, f = tam -1, m; 
while ( i <= f ){ 
m = ( i + f ) / 2; 
if ( v[m] == e ) { return m; } 
if ( e < v[m] ) { f = m - 1; } 
else { i = m + 1; } 
} 
return -1; 
} 
 
Sabendo que a chamada da mesma foi feita com os parâmetros recebendo os seguintes valores, o que ela 
retornaria? 
v[10] = {0, 2, 4, 6, 8, 10, 20, 100} 
tam = 8 
e = 0 
Ú -1 
Ú 0 
Ú 2 
Ú 1 
Ú -2 
 
Sobre o funcionamento da busca binária, é correto afirmar que dividindo seu vetor em duas metades. 
Ú 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. 
Ú 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 foi encontrado. 
Ú Se o item for menor que o item que está na metade do vetor, procure na segunda metade, ou seja, a da 
direita. 
 
 
Qual a importância de se entender a "ordenação" de dados ? 
Ú A ordenação é a base na qual, muitos algoritmos são construídos. Entendendo a ordenação, tem-se 
conhecimento para manter outros problemas. 
Ú A ordenação é a base na qual, muitos sistemas são construídos. Entendendo a ordenação, tem-se 
conhecimento para resolver outros problemas. 
Ú A ordenação é a base na qual, muitos programas são construídos. Entendendo a ordenação, tem-se 
conhecimento para manter outros problemas. 
Ú A ordenação é a base na qual, muitos algoritmos são construídos. Entendendo a ordenação, tem-se 
conhecimento para resolver outros problemas. 
Ú A ordenação é a base na qual, muitos sistemas são construídos. Entendendo a ordenação, tem-se 
conhecimento para manter outros problemas.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 elementos do 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 I e II são corretas. 
Ú Somente as afirmativas II, III e IV são corretas. 
Ú 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. 
 
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: 
Ú Seleção 
Ú Hash 
Ú Binária 
Ú Bolha 
Ú Inserção 
 
Estude atentamente o código a segir: 
int deciframe(int v[ ], int tam, int e){ 
int i = 0, f = tam -1, m; 
while ( i <= f ){ 
m = ( i + f ) / 2; 
if ( v[m] == e ) { return m; } 
if ( e < v[m] ) { f = m - 1; } 
else { i = m + 1; } 
} 
return -1; 
} 
Sabendo que a chamada da mesma foi feita com os parâmetros: 
v[10] = {0, 2, 4, 6, 8, 10, 20, 100} 
tam = 8 
e = -6 
 
É sabido que a mesma retornaria o valor -1, porque: 
Ú É o módulo do valor de e 
Ú Porque ele não achou o elemento na coleção 
Ú Seria o retorno do while 
Ú É a posição do elemento e no vetor v 
Ú Seria o retorno do segundo if 
 
Caso seja empregada uma busca binária em uma lista sequencial ordenada com 2048 valores, qual seria o 
número máximo de comparações para encontrar um valor que esteja na lista? 
Ú 12 
Ú 10 
Ú 11 
Ú 9 
Ú 8 
 
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". 
Ú MergeSort 
Ú QuickSort 
Ú Bolha 
Ú Inserção 
Ú Seleção 
 
Para consultarmos uma estrutura de dados, normalmente, empregamos um tipo de pesquisa de dados. O trecho 
de programa a seguir refere-se a uma pesquisa por um elemento único (sua primeira ocorrência), em um 
conjunto de elementos de dados armazenado em uma estrutura de acesso indexado e aleatório. Selecione a 
opção correspondente ao algoritmo utilizado, no programa, para a referida pesquisa: 
 
int busca(float v[], float valor, int n) { 
int ini = 0, fim = n -1, meio; 
while (ini <= fim) { 
meio = (ini + fim)/2; 
if (v[meio] == valor) return meio; 
if (valor < v[meio]) fim = meio -1; 
 else ini = meio+1; 
} 
return -1; 
} 
 
Ú pesquisa binária 
Ú pesquisa cadeias indexada 
Ú pesquisa de cadeias 
Ú pesquisa sequencial 
Ú pesquisa indexada 
 
Em uma pesquisa sequencial a lista deve estar? 
Ú desordenada somente da metade da lista até o final. 
Ú sempre desordenada. 
Ú ordenada somente o primeiro da lista. 
Ú ordenada ou desordenada. 
Ú ordenada somente do início até a metade da lista. 
 
 
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. 
Ú Hash 
Ú Seleção 
Ú Bolha 
Ú Binária 
Ú Inserção 
 
Sabendo-se que o método de seleção também é um método de ordenação que baseia seu algoritmo em trocas 
entre os elementos de um vetor, se submetermos a sequencia de inteiros armazenada em um vetor inicialmente 
na seguinte ordem : 13, 23, 3, 8, 1. Pode-se dizer que quando o menor elemento do vetor alcançar sua posição 
final, a ordenação apresentada no vetor é: 
Ú 1,23,3,8,13 
Ú 1,23,13,8,3 
Ú 1,8,3,23,13 
Ú 1,3,23,8,13 
Ú 1,13,23,8,3 
 
Considere a ordenação abaixo: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Este vetor foi ordenado pelo método: 
 
Ú Quicksort. 
Ú Ordenação por seleção (selection sort). 
Ú Método da bolha (bubble sort). 
Ú Ordenação por inserção (insertion sort). 
Ú Mergesort. 
 
Em relação à classificação do método de ordenação, assinale abaixo aquele que, durante o processo de 
ordenação, só usa a memória principal: 
Ú Ordenação Simples Externa 
Ú Ordenação Eficiente 
Ú Ordenação Simples 
Ú Ordenação Externa 
Ú Ordenação Interna 
 
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; 
} 
Ú Retorna a posição de v se o valor vl foi encontrado. 
Ú Retorna -1 se o valor de vl estiver dentro de v. 
Ú Retorna -1 se o valor de n foi encontrado. 
Ú Resulta em erro, se o valor de vl não estiver dentro de v. 
Ú Retorna o valor de vl se o valor n foi encontrado. 
 
Marque a afirmativa correta para a "inserção incremental". 
Ú Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o total de elementos. 
Ú A técnica é boa quando os dados ficam uniformemente distribuídos entre os seus compartimentos. 
Ú Os pivôs são escolhidos aleatoriamente. 
Ú É um tipo de sequenciação por intercalação. 
Ú É um tipo de ordenação por intercalação 
 
Considere as seguintes afirmações: I. Só podemos ter uma matriz de no máximo duas dimensões. Exemplo: 
C[100][100]. II. Ao declararmos um vetor int A[10], se escrevemos A[2] acessamos o segundo elemento do vetor. 
III. Uma string declarada como char B[30] armazena no máximo 30 caracteres. Escolha a alternativa correta: 
Ú Está correta apenas a afirmativa II. 
Ú Estão corretas apenas as afirmativas I e II. 
Ú Está correta apenas a afirmativa I. 
Ú Estão corretas apenas as afirmativas I e III. 
Ú Nenhuma afirmação está correta. 
 
__________________________ é uma lista linear em que a alocação de memória pode ser estática, e que a forma de 
armazenamento é contígua ou sequencial na memória. Usamos este tipo de lista quando se tem em mente um 
tamanho pré-definido, ou seja, quando se sabe até onde a lista pode crescer. 
Ú Lista Linear de Alocação de Memória 
Ú Lista Não Linear 
Ú Lista Linear Não Alocada 
Ú Lista Linear Sequencial 
Ú Lista Linear Não Sequencial 
 
Considere uma lista sequencial L com n fichas de professores, sendo que cada ficha de professor é modelada pela 
struct : 
struct professor { 
int matricula; 
char titulo[30]; 
}; 
e a lista L é assim declarada : professor L[n]; 
 
Assinale o trecho que corretamente exibe todas as matrículas e titulações de todos os n professores de L . 
 
Ú for (int i = 0; i < n; i++) 
 cout << L[i] << endl; 
 
Ú for (int i = 0; i < n; i++) 
 cout << L[i].matricula << " " << L[i].titulo[30] << endl; 
 
Ú for (int i = 0; i < n; i++) 
 cout << L.matricula << " " << L.titulo << endl; 
 
Ú for (int i = 0; i < n; i++) 
 cout << L[i].matricula << " " << L[i].titulo << endl; 
 
Ú for (int i = 0; i < n; i++) 
 cout << L.matricula[i] << " " << L.titulo[i] << endl; 
 
 
As estruturas de dados em programaçãosã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 é: 
Ú Registro 
Ú Matriz 
Ú Vetor 
Ú Função 
Ú Variável 
 
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 
Ú 6 
Ú -1 
Ú 0 
Ú 3 
Ú 4 
 
 
Considere uma lista sequencial L com n fichas de alunos, onde cada ficha de aluno é caracterizada pela struct: 
 
struct aluno ( 
 
int matricula; 
 
char nome[30]; 
 
e a lista é assim declarada: aluno t[n]; 
 
Assinale a trecho que corretamente exibe todas as matriculas nomes de todos os n alunos de L 
 
for (int i = 0; i < n; i++) 
 cout << L[i].matricula << " " << L[i].nome << endl; 
 
for (int i = 0; i < n; i++) 
 cout << L[i] << endl; 
 
for (int i = 0; i < n; i++) 
 cout << L.matricula[i] << " " << L.nome[i] << endl; 
 
for (int i = 0; i < n; i++) 
 cout << L[i].matricula << " " << L[i].nome[30] << endl; 
 
 
for (int i = 0; i < n; i++) 
 cout << L.matricula << " " << L.nome << endl; 
 
 
Quanto a Pesquisa ou Busca Binária julgue os itens em V (VERDADEIRO) ou F (FALSO): 
(V) A Pesquisa Binária consiste em fazer uma busca em um vetor 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, comparando o valor de busca com o 
elemento da lista. 
(F) A Busca Binária é mais eficiente quando o vetor não está ordenado. 
(F) Na operação de remoção de um valor do vetor passado como parâmetro, não é necessário primeiro verificar 
se a lista está vazia. 
(F) Na operação de inserção de um valor do vetor passado como parâmetro, não é necessário primeiro verificar se 
a lista está cheia. 
(V) O protótipo abaixo é válido para uma função de busca binária: int buscaBinaria(float v[], float valor , int n); 
 
Considere uma lista com n livros, em que cada livro é modelado pela struct : 
 
struct Livro { 
 string titulo, editora, autor; 
 float preco; 
}; 
 
A função X abaixo 
 
void X (Livro v[ ], int &n, Livro L) 
{ 
 v[n] = L; 
 n++; 
 cout << "Operação realizada com sucesso."; 
} 
 
implementa a operação de : 
Ú Substituição 
Ú Ordenação por inserção 
Ú Inserção 
Ú Inicialização 
Ú Busca 
 
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-se o 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, IV 
Ú I, III, IV 
Ú I, II, III, IV 
Ú I, II 
Ú I, II, III 
 
 
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 
Ú Lista Sequencial 
Ú Fila Sequencial 
Ú Lista Encadeada 
Ú Pilha Sequencial 
 
São métodos ou algoritmos conhecidos de ordenação de dados por troca: 
Ú ordenação shell e hashing. 
Ú quicksort e hashing. 
Ú hashing e bubble sort. 
Ú bubble sort e quicksort. 
Ú busca por ordenação e ordenação shell. 
 
Quanto a Pesquisa ou Busca Binária julgue os itens em V (VERDADEIRO) ou F (FALSO): 
(F) Na operação de inserção de um valor do vetor passado como parâmetro, não é necessário primeiro 
verificar se a lista está cheia. 
(V) O protótipo abaixo é válido para uma função de busca binária: int buscaBinaria(float v[], float valor , int 
n); 
(F) Na operação de remoção de um valor do vetor passado como parâmetro, não é necessário primeiro 
verificar se a lista está vazia. 
(V) A Pesquisa Binária consiste em fazer uma busca em um vetor 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, comparando o valor de 
busca com o elemento da lista. 
(F) A Busca Binária é mais eficiente quando o vetor não está ordenado. 
 
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 : 
 
o Inserção 
o Inicialização 
o Ordenação por inserção 
o Busca 
o Substituição 
 
As estruturas de dados em programação são muito utilizadas para tornar o acesso aos dados mais eficiente e 
organizado. A estrutura de dados considerada mais simples e tem como característica apresentar apenas uma 
dimensão é: 
o Variável 
o Vetor 
o Registro 
 
o Matriz 
o Função 
 
Estude atentamente o código a segir: 
int deciframe(int v[ ], int tam, int e){ 
int i = 0, f = tam -1, m; 
while ( i <= f ){ 
m = ( i + f ) / 2; 
if ( v[m] == e ) { return m; } 
if ( e < v[m] ) { f = m - 1; } 
else { i = m + 1; } 
} 
return -1; 
} 
Sabendo que a chamada da mesma foi feita com os parâmetros recebendo os seguintes valores, o que ela 
retornaria? 
v[10] = {0, 2, 4, 6, 8, 10, 20, 100} 
tam = 8 
e = -6 
o 6 
o 0 
o 4 
o -1 
o 3 
 
Considere uma lista sequencial I com n fichas de alunos, onde cada ficha de alune é 
caracterizada pela struct 
 
struct aluno ( 
 
int matricula 
 
char nome 201 
 
Assinale a trecho que contamente cobe todas as matriculas nomes de todos 
alunos de L 
 
o for (int i=0;i<n;i++) 
cout <<< endl; 
o for (int 9;<n; i++) 
cout Lmatricula <<<<Lnome<< end) 
o for (int 0:04) 
coute matricula <<<< nome[30] << end 
o for (int i=0;i<n;i++) 
cout <<Ematricula[i]<<"* << Lome[] << endi 
o for (int Di<H+). 
cout << matricula <<<<nome << end 
 
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: 
o Está correta apenas a afirmativa I. 
o Está correta apenas a afirmativa II. 
o Nenhuma afirmação está correta. 
o Estão corretas apenas as afirmativas I e III. 
o Estão corretas apenas as afirmativas I e II. 
 
 
__________________________ é uma lista linear em que a alocação de memória pode ser estática, e que a forma de 
armazenamento é contígua ou sequencial na memória. Usamos este tipo de lista quando se tem em mente um 
tamanho pré-definido, ou seja, quando se sabe até onde a lista pode crescer. 
o Lista Não Linear 
o Lista Linear de Alocação de Memória 
o Lista Linear Não Alocada 
o Lista Linear Não Sequencial 
o Lista Linear Sequencial 
 
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 todasas matrículas e titulações de todos os n professores de L . 
 
o for (int i = 0; i < n; i++) 
cout << L[i] << endl; 
o for (int i = 0; i < n; i++) 
cout << L[i].matricula << " " << L[i].titulo[30] << endl; 
o for (int i = 0; i < n; i++) 
cout << L[i].matricula << " " << L[i].titulo << endl; 
o for (int i = 0; i < n; i++) 
cout << L.matricula[i] << " " << L.titulo[i] << endl; 
o for (int i = 0; i < n; i++) 
cout << L.matricula << " " << L.titulo << endl; 
 
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 é: 
o Registro 
o Vetor 
o Função 
o Variável 
o Matriz 
 
Quanto a Pesquisa ou Busca Binária julgue os itens em V (VERDADEIRO) ou F (FALSO): 
(V) A Pesquisa Binária consiste em fazer uma busca em um vetor 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, comparando o valor de busca com o 
elemento da lista. 
(V) O protótipo abaixo é válido para uma função de busca binária: int buscaBinaria(float v[], float valor , int n); 
(F) Na operação de remoção de um valor do vetor passado como parâmetro, não é necessário primeiro verificar 
se a lista está vazia. 
(F) Na operação de inserção de um valor do vetor passado como parâmetro, não é necessário primeiro verificar se 
a lista está cheia. 
(F) A Busca Binária é mais eficiente quando o vetor não está ordenado. 
 
A ESTRUTURA DE DADOS – PILHA 
O que acontece quando tentamos retirar um elemento de uma pilha que já está vazia? 
o Overflow. 
o Underflow. 
o Ordenação. 
o Remoção. 
o Inclusão. 
 
 
Considere que, em uma estrutura de dados p do tipo pilha, 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 : 
 
o 7 e 40 
o 4 e 80 
o 11 e 29 
o 7 e 29 
o 11 e 80 
 
Em termos da estrutura de dados do tipo PILHA, a sequência de ações empilha(10), empilha(3), empilha(5), 
empilha(8), desempilha(), desempilha(), empilha(20), promoveria a configuração da estrutura a partir do topo : 
 
o 10 3 5 8 
o 20 10 3 
o 20 3 10 
o 5 8 20 
o 20 3 5 8 
 
Na estrutura de dados tipo pilha, há duas operações básicas para empilhamento e desempilhamento. Essas 
operações são conhecidas como: 
 
o PUSH e POP. 
o PUSH e PULL; 
o Base e Topo; 
o PULL e POP; 
o HEAP e POP; 
 
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? 
 
o 10 e 2 
o Apenas o 10 
o Nenhum, a pilha estará vazia. 
o 7 e 2 
o Apenas o 2 
 
 
Um dos conceitos muito úteis na ciência da computação é a estrutura de dados chamada pilha. Uma pilha é um 
conjunto________ de itens, no qual novos itens podem ser inseridos no(a) ________ e itens podem ser retirados 
do(a)________ da pilha, por meio das operações________ e _________, respectivamente. Assinale a alternativa que 
completa corretamente as lacunas. 
 
o desordenado - base - topo - down - up 
o desordenado - topo - base - push ou empilhar - pop ou desempilhar 
o ordenado - topo - topo - empilhar ou push - desempilhar ou pop 
o ordenado - topo - topo - pop ou desempilhar - push ou empilhar 
o ordenado - final - início - up - down 
 
 
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: 
o A operação TOP remove um elemento e altera o estado da Pilha 
o Somente a operação POP altera o estado da Pilha 
o Somente a operação TOP altera o estado da Pilha 
o Ambas alteram o estado da Pilha 
o Nenhuma das operações altera o estado da Pilha 
 
Quando as inserções e as remoções ocorrem sempre no mesmo lado da lista, trata-se de uma estrutura de dados 
denominada 
o Lista Encadeada 
o Lista Circular 
o Fila 
o Vetor 
o Pilha 
 
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. 
 
o pilha 
o árvore 
o grafo 
o lista 
o fila 
 
Qual das alternativas a seguir pode definir uma estrutura de pilha? 
o Entrada e saída de dados em qualquer local. 
o Entrada de dados pelo final e saída pelo início. 
o Entrada e saída de dados pelo final. 
o Entrada e saída de dados pelo início. 
o Entrada de dados pelo início e saída pelo final. 
 
Observe a função que manipula uma pilha e assuma que TAM é uma constante definida com valor 5. Saiba que o 
nome da função já explícita a finalidade dela. 
 
oid empilha (int vetor[], &topo, int valor) 
 if(topo TAM) 
 cout<o InCHEIA\n; 
 else 
 -ets:/eteA 
 //0 que entra aqui? 
 
 vetor[topo]=valor; 
 
 
Considere a chamada da função conforme linha abaixo, sabendo-se que vet é um vetor de tamanho 5 e que não 
tem nenhum valor ainda: 
Analise as afirmativas abaixo que sugerem correções, ou não, na definição na função e assinale a opção que 
contem as afirmativas corretas. 
 
I Faltou & antes da variável vetor e irá acusar erro. 
II A variável topo está sem tipo. 
III O teste está correto porque o índice do primeiro elemento do vetor em C++ é 1, obrigatoriamente. 
IV Na linha comentada deveria estar presente um comando de atribuição que decrementaria a variável topo. 
V A linha vetor[topo]=valor; está correta. 
o I e II estão corretas 
o I, II e IV estão corretas 
o I e III estão corretas 
o I , III e V estão corretas 
o II e V estão corretas 
 
A estrutura de dados do tipo pilha (stack) é um tipo abstrato de dado baseada no princípio: 
o Last In First Out (LIFO). 
o Da localidade de referência. 
o Da indiferença. 
o De dividir para conquistar. 
o First In First Out (FIFO). 
 
Assumindo que estamos com uma estrutura de dados do tipo LIFO, as operações abaixo vão resultar em que 
elementos na mesma: PUSH(2), PUSH(3), PUSH(4), POP(), POP(), PUSH(5), PUSH(7), POP() 
o 3 4 5 
o 5 7 
o 2 3 4 
o 2 5 
o 2 4 7 
 
Inseriu-se em uma pilha os valores A,B,C e D, seguindo essa ordem. Se logo após são executadas duas operações 
de remoção, pode-se dizer que: 
 
o Os valores removidos serão C e D, nessa ordem 
o Os valores removidos serão D e C, nessa ordem 
o A resposta depende da chave de busca, pois a remoção depende da chave fornecida 
o Os valores removidos serão A e B, nessa ordem 
o Nenhuma das alternativas anteriores 
 
Sabe-se que Push() coloca um elemento na pilha, Pop() remove um elemento da pilha e Top() exibe o elemento 
que se encontra no topo. 
Assinale a opção que indica o número que aparecerá após a execução das funções abaixo. 
Sequencia: Push() / Push()/ Pop()/ Push()/Pop()/ Top() 
Números que deverão ser empilhados nessa ordem: 8/ 15/ 23/ 13 / 18 
o 13 
o 8 
o 15 
o 23 
o 18 
 
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 umaestrutura de dados do tipo? 
o TABLE 
 
o LIFO 
o RECORD 
o FIFO 
o ARRAY 
 
No contexto de estrutura de dados, uma pilha é: 
o uma lista do tipo FIFO. 
o um tipo de lista linear em que as operações de inserção e remoção são realizadas na extremidade 
denominada topo. 
o um tipo de lista linear em que as operações de inserção e remoção são realizadas aleatoriamente. 
o um tipo de lista linear em que as operações de inserção são realizadas em uma extremidade e as 
operações de remoção são realizadas em outra extremidade. 
o uma lista do tipo LILO. 
 
Sobre as pilhas, marque a alternativa correta: 
o Pilhas são menos restritivas do que Listas, pois esta última impõe mais restrições às operações de 
inserção/remoção do que as primeiras. 
o A operação de desempilhar um item de uma pilha e logo em seguida empilha-lo em outra pilha mantem 
a mesma ordem dos dados da primeira pilha na segunda pilha. 
o Pilhas não podem ser implementadas usando vetores, pois não será possível reproduzir a inserção e 
remoção pela mesma extremidade. 
o Pilhas são estruturas de dados do tipo FIFO e permitem que os dados sejam manipulados diretamente no 
meio da estrutura. 
o A característica principal que define uma Pilha diz respeito às operações de inserção e remoção, que 
devem ser realizadas exclusivamente na mesma extremidade. 
 
Assinale a opção que apresenta uma estrutura de dados embasada no princípio last in, first out (LIFO) ¿ último a 
entrar, primeiro a sair ¿, na qual, conforme a inserção, os dados inseridos primeiramente na estrutura são os 
últimos a serem removidos. 
o vetores 
o filas 
o árvores 
o listas 
o pilhas 
 
Considere dados sendo manipulados em uma pilha sequencial em que as operações possíveis são: inserção - 
push(novo valor) ou remoção - pop(). 
Se realizarmos a seguinte sequencia de operações: 
push(A),push(B),push(C),pop(),pop(),push(D),pop(),pop(). 
Pode-se dizer que o interior da pilha apresenta-se: 
o Apenas com o dado D 
o Apenas com o dado A 
o Com os dados A e B 
o Vazio 
o Com os dados A e D 
 
Analise as afirmativas sobre uma pilha estática e assinale a opção correta. 
 
I Ordenar é uma operação que não se faz com pilha. 
II Inserir dados é uma operação que se faz com a pilha. 
III Remover dados em qualquer posição é uma operação que se faz com a pilha. 
IV Verificar se a Pilha está cheia é necessário quando se deseja inserir nela. 
V Inicializar uma pilha significa zerar todas as variáveis do vetor. 
o I, II e V estão corretas. 
o I, II e IV estão corretas. 
o I e II estão corretas. 
o I e IV estão corretas. 
o II e III estão corretas. 
 
 
Um jogo de memória fornece sequências de números e o jogador deve dizer qual a sequência inversa para cada 
nova sequência fornecida pelo jogo. Qual a estrutura de dados mais adequada para modelar esse jogo ? 
o grafo 
o lista 
o pilha 
o árvore 
o fila 
 
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 
a ordem reversa dos de armazenamento de dados e alocação destes de forma contínua na memória. 
o Pilha Encadeada 
o Fila Sequencial 
o Pilha Sequencial 
o Lista Encadeada 
o Lista Sequencial 
 
Para uma aplicação em que deseja-se recuperar a ordem reversa de armazenamento dos dados em um vetor, a 
estrutura de dados mais apropriada a ser utilizada na implementação da aplicação é: 
o Fila 
o Árvore 
o Grafo 
o Pilha 
o Lista 
 
Explicação: 
Pilha é uma estrutura de dados linear que segue a lógica LIFO, em que o último a entrar será o primeiro a sair. 
Portanto, trabalha com a ordem reversa. 
 
Fila: segue a lógica FIFO. Trabalha na ordem direta. 
 
Lista: insere-se e retira-se de qualquer posição. 
 
Árvore e grafo: estrutura de dados não lineares. 
 
A ESTRUTURA DE DADOS – FILA 
 
Assumindo que estamos com uma estrutura de dados do tipo FIFO, as operações abaixo vão resultar em que 
elementos na mesma: ENFILEIRAR(4), ENFILEIRAR(5), ENFILEIRAR(6), DESENFILEIRAR(), DESENFILEIRAR(), 
ENFILEIRAR(5), ENFILEIRAR(7), DESENFILEIRAR() 
o 5 7 
o 4 5 6 
o 4 5 
o 4 6 7 
o 7 5 
 
As filas sequenciais são estruturas de dados utilizadas em diversas aplicações, tais como fila de processo, fila de 
impressão, sistemas de senha etc. Entretanto, nas aplicações onde há muita movimentação de dados, inserções e 
remoções de dados na fila, surgem espaços ociosos que podem levar ao fenômeno chamado de esgotamento de 
memória. Para sanar este problema pode-se substituir a fila sequencial por: 
 
o pilha sequencial 
o lista circular 
o lista sequencial 
o fila circular 
 
o pilha circular 
 
Considere uma fila circular de tamanho 5, contendo os valores A, Z e C. Assim, o início está na posição 0 (zero) e o 
fim na posição 2 (dois). Dica: O vetor inicia na posição 0 (zero). Supondo agora que as seguintes operações 
ocorrerão na lista: 
 
1. D é inserido 
2. H é inserido 
3. Um elemento é deletado 
4. F é inserido 
5. Um elemento é deletado 
Qual os valores de início e fim ao final dessas operações? 
 
o inicio 2 e fim 0 
o Início 4 e fim 4 
o Início 0 e fim 0 
o Nenhuma das opções 
o Início 1 e fim 4 
 
Analisando a figura abaixo, marque a alternativa correta que apresenta o tipo de estrutura de dados utilizado. 
 
 
 
 
3 
 
 
3 7 
 
 
3 7 5 
 
 
 7 5 
 
 
o Matriz 
o Fila 
o Pilha 
o Hash 
o Struct 
 
Sobre pilhas, lista e filas, considere as afirmativas a seguir. I. As estruturas de dados pilhas, filas e listas armazenam 
coleções de itens. A característica que as distinguem é a ordem em que podem ser retirados os itens dessas 
coleções e a ordem em que foram inseridos. II. Considere que os itens A, B, C, D, E foram inseridos nessa ordem 
em uma fila. Necessariamente, o primeiro elemento a ser removido dessa fila é o elemento A. III. Considere que 
os itens A, B, C, D, E foram inseridos nessa ordem em uma pilha. Necessariamente, o último elemento a ser 
removido dessa pilha é o elemento E. IV. Considere que os itens A, B, C, D, E foram inseridos nessa ordem em uma 
lista. Necessariamente, o primeiro elemento a ser removido dessa lista é o elemento A. 
o Somente as afirmativas I e IV são corretas. 
o Todas as afirmativas estão corretas 
o Somente as afirmativas I e II são corretas. 
o Somente as afirmativas III e IV são corretas. 
o Somente as afirmativas I, II e III são corretas. 
 
 
 
Seja Q uma estrutura de 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á? 
 
o 5 
o 0 
o 6 
o 9 
o 15 
 
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? 
o Quando o apontador de final menos um (final-1) for igual ao inicio. 
o Quando os apontadores de final e início apontarem para zero. 
o Quando o apontador de final apontar para zero. 
o Quando o apontador de posição final for igual ao início. 
o Quando o apontador de início apontar para zero. 
 
Complete os espaços na afirmativa abaixo e assinale a alternativa que apresenta as respostas corretas: O 
escalonamento .................... é do tipo.................., em que o processo que chegar primeiro na fila de pronto é o 
escolhido para ser executado. 
o FIFO, não-preemptivo. 
o LIFO, não-preemptivo. 
o Por prioridades, preemptivo. 
o Circular, não-preemptivo. 
oSJF (Shortest-Job-First), preemptivo. 
 
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: 
 
o Pilhas 
o Listas 
o Structs 
o Filas 
o Árvores 
 
Escolha a opção verdadeira : 
 
o Em uma estrutura de dados que segue a lógica LIFO, os dados são excluídos na ordem inversa em que 
foram incluídos. 
o Pilhas e filas não podem ser implementadas através do uso de listas encadeads 
o Uma estrutura de dados que segue a lógica FIFO permite inclusões apenas no topo da estrutura de dados. 
o Uma pilha, a depender de sua configuração, pode funcionar como uma fila 
o Uma estrutura de dados que segue a lógica FIFO equivale a uma estrutura de dados que segue a lógica 
LIFO. 
 
 
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: 
 
questg5 
 
 Pode-se concluir, então, que P corresponde à seguinte estrutura de dados? 
 
o STRUCT 
o LISTA 
o PILHA 
o PONTEIRO 
o CONJUNTO 
 
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 
o lista simples. 
o pilha. 
o árvore. 
o lista encadeada. 
o fila. 
 
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: 
o 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. 
o Um vetor não pode ser usado na implementação de uma fila sequencial apenas em pilhas sequenciais. 
o A estrutra sofrerá do fenômeno esgotamento de memória, mas se os dados estiverem ordenados isto não 
afetará a estrutura. 
o A estrutura fila não sofre esgotamento de memória, isto ocorre com as pilhas já que implementam o 
algoritmo LIFO. 
o Um vetor é uma estrutura base correta para esta implementação, já que está imune a fenômenos como 
esgotamento de memória. 
 
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? 
 
o [3-4-6-8-10-1] 
o [4-6-8-10-1-2] 
o [2-1-3-4-6-8] 
o [2-3-4-6-8-10] 
o [3-4-6-8-10] 
 
Assinale a opção que, corretamente, mostra exemplos em que a estrutura de dados fila é usada, de acordo com o 
critério de inserções e remoções que rege tal estrutura. 
 
o Fila de pessoas para tirar o visto e fila de pessoas para usar o caixa eletrônico. 
o Fila de arquivos para impressão e buffer para gravação de dados em fila. 
o Fila de arquivos para impressão e fila de pessoas no caixa de um supermercado. 
o Fila de documentos para xerox e fila de arquivos para impressão. 
o Buffer para gravação de dados em mídia e fila de pessoas para comprar o ticket do metrô. 
 
 
Considere uma fila simples F de inteiros, do tipo Fila definido abaixo. Tal fila deverá armazenar códigos de 
agentes de uma firma de espionagem, desde que haja espaço para um novo agente. Assinale a opção que 
 
corretamente enfileira o código de um agente, sabendo que a fila F foi inicializada de acordo com o trecho de 
código abaixo. 
 
struct Fila { in t v[100], inicio, fim; } ; 
Fila F; 
F. inicio = 0; 
F.fim = -1; 
void enfileirar(Fila &F, int codigo) { 
 
o F.v[F.fim] = codigo; 
 F.fim++; 
} 
void enfileirar(Fila &F, int codigo) { 
 if (F.fim == 99) 
 cout << "Não há espaço na firma para mais agentes. " << endl; 
 else 
 F.fim++; 
 F.v[F.fim] = codigo; 
} 
void enfileirar(Fila F, int codigo) { 
 
o F.fim++; 
 F.v[F.fim] = codigo; 
} 
 
o void enfileirar(Fila &F, int codigo) { 
 if (F.fim == 99) 
 cout << "Não há espaço na firma para mais agentes. " << endl; 
 else { 
 F.fim++; 
 F.v[F.fim] = codigo; 
 } 
} 
void enfileirar(Fila F, int codigo) { 
 if (F.fim == 100) 
 cout << "Não há espaço na firma para mais agentes. " << endl; 
 else { 
 
o F.fim++; 
 F.v[F.fim] = codigo; 
 } 
} 
 
 
Uma fila duplamente terminada, isto é, uma estrutura linear que permite inserir e remover de ambos os extremos 
é chamada de: 
 
o Árvore. 
o Deque. 
o Shift-and. 
o Boyer-Moore. 
o Autômato. 
 
Um aluno do EAD estava estudando para a prova de Estrutura quando viu o trecho do programa abaixo em uma 
apostila. 
 
struct incognita 
{ 
 
 float descobre[5]; 
 int total, inicio, final; 
 }; 
 int main() 
 { 
 incognita EDa; 
… 
 EDa. inicio = 0; // posição do item a ser recuperado 
 EDa. total = 0: //total de elemento inseridos 
 EDa.final=0; // posição do fim da fila 
… 
 void entra(incognita &ED) 
{ 
 float valor; 
 if(ED. total ==5) 
 cout<<"InAtencao. Cheialn": 
 else 
{ 
 cout<<" InDigite valor: cin>>valor; 
 ED.descobre[ED.final]=valor; 
 ED.final++, 
 if(ED. final==5)ED.final=0; 
 ED. total++; 
 } 
} 
 
Como não estava com seu micro, começou a analisar a função entra(...), ficando atento a alguns membros da 
struct. 
 
Quando finalizou, virou a página da apostila e viu a resposta. Então, ficou muito feliz por ter identificado a 
estrutura 
 
Assinale a alternativa onde está presente a resposta correta. 
 
o Fila 
o Fila Circular 
o Lista Linear 
o Lista simplesmente encadeada 
o Pilha 
 
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: 
o X 
o C 
o W 
o D 
o A 
 
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: 
o tanto o sistema I, quanto o II, adotam o esquema LIFO de organização de dados. 
o tanto o sistema I, quanto o II, adotam o esquema vetor de organização de dados. 
o o sistema I, adota o esquema LIFO de organização de dados e o II, o esquema FIFO. 
o o sistema I, adota o esquema FIFO de organização de dados e o II, o esquema LIFO. 
o tanto o sistema I, quanto o II, adotam o esquema FIFO de organização de dados. 
 
 
Considere uma fila simples F de inteiros, do tipo Fila definido abaixo. Tal fila deverá armazenar códigos de 
agentes de uma firma de espionagem, desde que haja espaço para um novo agente. Assinale a opção que 
corretamente desenfileira o código de um agente, sabendo que a fila F foi inicializada de acordo com o trecho de 
código abaixo. 
 
struct Fila { in t v[100], inicio, fim; } ; 
Fila F; 
F. inicio = 0; 
F.fim = -1; 
 
void desenfileirar(Fila &F) { 
 
 if (F.inicio > F.fim) 
 
o cout << "Não há agentes para retirar. " << endl; 
 
 else { 
 
 cout << "Removido o agente " << F.v[F.inicio]; 
 
 } 
 
} 
void desenfileirar(Fila &F) { 
 
 if (F.inicio > F.fim) 
 
 cout << "Não há agentes para retirar. " << endl; 
 
o else { 
 
 cout << "Removido o agente " << F.v[F.inicio]; 
 
 F.inicio++; 
 
 } 
 
} 
 
void desenfileirar(Fila F) { 
 
o cout << "Removido o agente " << F.v[F.inicio]; 
 
 F.inicio--; 
 
 } 
void desenfileirar(Fila &F) { 
 if (F.fim == -1 && F.inicio == 0) 
 cout << "Não há agentes para retirar. " << endl; 
o else { 
 cout << "Removido o agente " << F.v[F.inicio]; 
 F.inicio++; 
 } 
} 
 
void desenfileirar(Fila

Outros materiais