Buscar

ESTRUTURAS 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 15 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 15 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 15 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 
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. 
Compartilhamento de memória, maleabilidade e facilidade para inserção e remoção de 
componentes. 
 
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. 
 
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. 
 
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. pilha Lineares , 
vetor Lineares, grafo Não Lineares e lista Lineares 
 
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. Permitem agregar mais do que 
um valor em uma variável, existindo uma relação estrutural entre seus elementos. 
 
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. Lista 
 
1. A estrutura de dados que melhor representa os diretórios ou pastas de arquivos do 
computador é a árvore. 
2. O termo folha em uma estrutura de dados é usado para um nó sem filhos e que tem 
grau 0, 
3. O grau de uma árvore é definido pelo número de subárvores de um nó. 
4. Uma das aplicações da estrutura de dados grafo é a Computação Gráfica. 
 
8- 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 ? Grafo 
FUNÇÕES 
Assinale a alternativa que apresenta duas formas de passagem de parâmetros para uma rotina 
ou função: Por valor e por referência 
 
Qual será o valor impresso na tela quando o programa principal for executado? 
int main() { 
int n; 
n = 5; 
dobro(n); 
cout << n; 
return 0; 
} 5 
 
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; } 28 e 18 
 
Na passagem por _referência_, 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. 
 
Ao definirmos uma função, podemos afirmar: 
Quando nada retorna, o tipo é void 
 
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: Global 
 
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. 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. 
 
 
O programa executa perfeitamente independente da ordem das funções já que existem 
os seus protótipos. 
 
ESTRUTURAS HETEROGÊNEAS 
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; 
 
Qual das seguintes estruturas de dados é classificada como heterogênea? Registro 
 
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? Nome da estrutura ponto nome do 
campo 
 
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; 
 
Marque a opção correta, considerando 
struct Livro { 
int codigo; 
float preco; 
} liv; liv.preco = 30.70; 
 
 
Com relação à struct, é correto afirmar que : Cada elemento da struct é denominado 
membro ou campo, sendo que a struct pode armazenar elementos de tipos diferentes ou 
não. 
ORDENAÇÃO E PESQUISA 
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 2 
 
Qual papel do for mais interno na função ordena abaixo ? 
void ordena( int n, int v[]) { 
 int i, j, x; 
 for (j = 1; j < n; ++j) { 
 x = v[j]; 
 for (i = j-1; i >= 0 && v[i] > x; --i) 
 v[i+1] = v[i]; 
 v[i+1] = x; 
 } } Encontrar o ponto onde v[j] deve ser inserido em v[0..j-1]. 
 
Em uma pesquisa sequencial a lista deve estar? ordenada ou desordenada. 
 
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 
 
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. Bolha 
 
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". Inserção 
 
 Seja a seguinte função de ordenação: 
void ordena( int n, int v[]){ 
 int i, j, x; 
 for (j = 1; j < n; ++j) { 
 x = v[j]; 
 for (i = j-1; i >= 0 && v[i] > x; --i) 
 v[i+1] = v[i]; 
 v[i+1] = x; 
 } } Que utiliza o método inserção e realiza uma ordenação crescente nos elementos do 
vetor v. 
 
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 algoritmo de busca binária. 
 
A ESTRUTURA DE DADOS - LISTA 
 
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 : Inserção 
 
O que acontece ao se inserir uma informação quando já usamos toda a área disponível do 
vetor (topo = fim)? overflow 
 
Analisando o trecho do algoritmo abaixo, 
Inserção de um elemento em uma estrutura LIFO 
 
_Lista Linear Sequencial_ é 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. 
 
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 é: Vetor 
 
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 Sequencial 
 
 
for (int i = 0; i < n; i++) 
 cout << L[i].matricula << " " << L[i].nome << endl; 
 
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: 
tanto o sistema I, quanto o II, adotam o esquema FIFO de organização de dados. 
AV 1 
 
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 sequência de inteiros 
armazenada em um vetor inicialmente na seguinte ordem : 13, 23, 3, 8, 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 
 
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? Nome da estrutura ponto nome do 
campo 
 
Assinale a opção certa. Quando não se escreve o protótipo de uma função … É preciso 
definir a função antes do programa principal. 
 
Podemos dizer que estrutura de dados é: O meio para armazenar e organizar dados com o 
objetivo de facilitar o acesso e as modificações. 
 
As estruturas de dados podem ser caracterizadas como sendo uma forma organizada de 
armazenar dados ou informações na memória, de modo a otimizar o acesso a estes. Muitas 
vezes existem algoritmos de manipulação de dados associados a estas estruturas. 
Verifique as seguintes sentenças: 
1. Filas são estruturas que recuperam os dados na ordem direta em que estes foram 
armazenados. 
2. As Pilhas são estruturas que recuperam os dados na ordem reversa em que estes 
foram armazenados. 
A ESTRUTURA DE DADOS - PILHA 
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. Sequência: Push() / Push()/ Pop()/ 
Push()/Pop()/ Top() 
Números que deverão ser empilhados nessa ordem: 8/ 15/ 23/ 13 / 18 8 
 
Abaixo temos algumas afirmativas sobre o uso da estrutura pilha de forma estática e 
sequencial. Leia com muita atenção e assinale a opção correta. Não existe movimentação na 
pilha quando inserimos ou removemos um elemento. Apenas o valor da variável que 
controla o topo é alterado. Um dos fatores que limita o crescimento da pilha é a 
quantidade de memória alocada quando usamos matrizes. 
 
Tei Ping, estudante de computação, precisou implementar parte de um jogo que trabalhava 
com cartas especiais. Cada carta possui um número e uma letra. Alguns jogadores teriam que 
jogar as cartas na mesa, enquanto outros deveriam devolver as cartas na sequência inversa à 
jogada. Tei Ping estudou o mecanismo do jogo e decidiu usar a melhor estrutura de dados na 
sua implementação. Qual a estrutura escolhida ? pilha 
 
Existem vários tipos de estruturas de dados do tipo dinâmicas, entretanto, uma estrutura 
considerada simples são as listas. Pode-se implementar vários tipos de listas, entretanto, a 
estrutura que apresenta o conceito de LIFO é: Pilha 
 
A estrutura de dados Pilha funciona de acordo com o seguinte fundamento básico: O primeiro 
a entrar é o último a sair. 
 
As pilhas sequenciais são estruturas que guardam a ordem reversa dos dados neles 
armazenados, e isto em muitas ocasiões é muito vantajoso. A operação usada para inserir um 
elemento X na 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 implementar 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? Nenhum, a pilha está vazia. 
 
Na estrutura de dados tipo pilha, há duas operações básicas para empilhamento e 
desempilhamento. Essas operações são conhecidas como: PUSH e POP. 
A ESTRUTURA DE DADOS - FILA 
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 filae 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: C 
 
Pode-se citar os seguintes exemplos de aplicação da estrutura fila: Fila de arquivos para 
impressão: Atendimento de processos requisitados a um sistema operacional. Buffer para 
gravação de dados em mídia. O tratamento do armazenamento das teclas que estão sendo 
digitadas antes da tecla enter ser pressionada. Agora analise as seguintes afirmativas:Uma fila 
guarda a ordem direta em que os elementos foram armazenados. e O algoritmo que é 
implementado em uma fila é baseado no princípio: " O primeiro a entrar é o primeiro a 
sair". 
 
Assinale a opção que, corretamente, mostra exemplos em que a estrutura de dados fila é 
usada, de acordo com o critério de inserções e remoções que rege tal estrutura. Fila de 
arquivos para impressão e buffer para gravação de dados em fila. 
 
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) 
 cout << "Não há agentes para retirar. " << endl; 
 else { 
 cout << "Removido o agente " << F.v[F.inicio]; 
 F.inicio++; 
 } } 
 
Usa-se um vetor para se implementar uma fila sequencial, entretanto se nesta estrutura ocorrer 
diversas operações de remoção e inserção podemos afirmar que: A estrutura 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. 
 
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) { 
 if (F.fim == 99) 
 cout << "Não há espaço na firma para mais agentes. " << endl; 
 else { 
 F.fim++; 
 F.v[F.fim] = codigo; 
 } } 
 
O que acontece quando se deseja inserir um elemento em uma FILA que já está cheia? 
Overflow. 
ALOCAÇÃO DINÂMICA/LISTAS ENCADEADAS - 
INTRODUÇÃO 
Marque a afirmativa que represente uma concatenação em listas. Juntar duas listas, 
colocando uma lista no final de outra, obtendo, ao final, uma só lista resultante. 
 
Em relação às 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: Encadeada. 
 
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: Ponteiro 
 
Em uma lista linear simplesmente encadeada. Cada nó possui um só ponteiro que 
referencia o próximo nó da lista. 
 
As funções abaixo tem objetivos de: A primeira faz uma busca retornando o endereço do 
nó ou NULL quando não encontrado, já a segunda insere um novo nó no início da LSE; 
 
Marque a afirmativa que representa uma separação. Consiste em dividir a lista em duas 
outras listas. A quantidade de nós que cada lista terá, depende da necessidade. 
 
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): Antes da inserção deve-se fazer o 
incremento da variável final 
 
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; 
 } } Posicionar o ponteiro no início da lista 
LISTAS ENCADEADAS - FINALIZANDO/PILHAS E 
FILAS DINÂMICAS 
Estava um aluno estudando Lista Simplesmente Encadeada quando encontrou em um site a 
definição da struct nodo e de uma função cujo nome você deverá escolher para substituir XXX 
nas opções abaixo depois que analisar a função, assumindo que teste foi realizado, permitindo 
que a operação fosse realizada. 
struct nodo { int info; struct nodo *prox;}; 
nodo* XXX(nodo *ptr, int valor) { 
 nodo *temp = new nodo; 
 ... 
 temp->info = valor; 
 temp->prox = ptr; 
 return temp; 
} InsereNoFrente 
 
Tínhamos declarado um ponteiro de nome ptr e precisávamos construir uma estrutura de 
repetição que pudesse repetir enquanto o ponteiro não fosse nulo. Observe os trechos abaixo e 
assinale qual a afirmativa correta. while (ptr !=NULL) e V while (ptr) 
 
Assinale a opção correta. Sobre pilha dinâmica podemos afirmar que : usa o critério LIFO e é 
implementada usando-se listas encadeadas. 
 
Sabendo que uma fila encadeada possui seus nós definidos pela : 
struct no { 
int x; 
no *prox; 
}; Marque a alternativa que representa corretamente a criação ou alocação do nó na sintaxe do 
C++ para utilização na fila. no *p=new no; 
 
Sobre uma estrutura de dados do tipo LIFO, observe as seguintes afirmações: É uma pilha e É 
uma estrutura onde o primeiro elemento a entrar é o último a sair. 
 
Para converter de decimal para binário usamos a estrutura de dados pilha. Assinale a opção 
que, corretamente, indica as ações corretas para empilhar o resto da divisão gerado no 
processo de conversão, considerando uma lista simplesmente encadeada. Considere o tipo 
definido abaixo: 
struct no { 
int dado; 
struct no *link; 
}; É preciso alocar memória com new, armazenar o resto da divisão do número por 2 no 
campo dado do novo nó, apontar o link do novo nó para o início da lista e enfim, retornar 
o ponteiro para o novo nó. 
LISTAS DUPLAMENTE ENCADEADAS 
 Em uma lista linear duplamente encadeada. Além do campo relativo ao dado, cada nó possui 
dois ponteiros. O ponteiro do "primeiro" nó não é NULL, mas sim aponta de volta para o 
"primeiro" nó da lista, formando um ciclo. 
 
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: Y, logo após o Z, e X, 
logo após o Y. 
 
Uma estrutura de dados em lista duplamente encadeada permite na cadeia movimentos para: 
 frente e para trás, apenas. 
 
Em relação às estruturas de dados, é correto afirmar: Guardar endereço de memória em 
"nós",normalmente identificados por previous ou next, é uma característica presente 
nas listas duplamente encadeadas. 
 
Uma estrutura de dados em lista duplamente encadeada permite na cadeia movimentos para 
frente e para trás, apenas. 
 
Em uma lista duplamente encadeada, seus nodos são compostos por campos cujos tipos 
podem ser de diferentes naturezas, entretanto dois de seus campos devem ser ponteiros para 
o mesmo tipo do nodo, são estes os ponteiros ant e prox, que apontam, respectivamente, para 
o nodo anterior e para o próximo nodo. Esta característica permite que a estrutura seja 
percorrida em ambos os sentidos. Assim analisando as operações a seguir: 
p->ant->prox=p->prox; 
p->prox->ant=p->ant; 
Sendo p um ponteiro que aponta para um dos nodos da lista, pode-se afirmar que: As 
operações removem o nodo apontado pelo ponteiro p. 
 
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? Em uma lista simplesmente encadeada 
cada nó aponta para um único nó enquanto a lista duplamente encadeada aponta para 
mais de um nó. 
 
Com relação à lista duplamente encadeada, é correto afirmar que: A lista pode ser 
percorrida com igual facilidade para a direita ou para a esquerda, pois existem dois 
ponteiros. 
AV2 
Considere a struct: struct Boneco { int codigo; string nome; float preco; }; 
e faça uma função em C++, de acordo com o protótipo abaixo, para criar um boneco de código 
12345, nome Darth Vader e preço 130,00. Protótipo : Boneco criarBoneco( int cod, string nome, 
float valorPreco ); 
Boneco criarBoneco(int cod, string nome, float valorPreco) { 
Boneco b; 
b.codigo = cod; 
b.nome = nome; 
b. preco = valorPreco; 
return b; } 
 
Uma fila é um tipo especial de Lista Linear em que as inserções são realizadas num extremo, 
ficando as remoções restritas ao outro. O extremo onde os elementos são inseridos é 
denominado final da fila, e aquele de onde são removidos é denominado começo da fila. As 
filas sequenciais, implementadas por vetores, sofrem com as inserções e remoções de dados, 
pois estas operações levam a um fenômeno chamado esgotamento de memória. Qual a 
solução para este fenômeno? O esgotamento de memória em filas sequenciais simples é 
totalmente resolvido com a adoção do conceito de fila circular. Essa abstração garante 
que a estrutura preserve a mesma quantidade de espaço definida na sua criação, 
independentemente das operações de inserção e remoção de dados. 
 
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 Sequencial 
 
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. 
 
Qual das seguintes estruturas de dados é classificada como heterogênea? Registro 
 
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 é: Pesquisa binária 
 
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 : Inserção 
 
Respeitando as ordens de inserção e de retirada dos dados, uma estrutura de: pilha é também 
denominada LIFO ou FILO. 
 
As structs (estruturas) são utilizadas para modelar os nodos de estruturas dinâmicas como, por 
exemplo, as listas encadeadas, seja o seguinte exemplo de nodo de uma lista de produtos: 
struct nodo{ float valor; string produto; nodo * proximo; }; Suponha que um determinado 
ponteiro pt esteja apontando para um nodo desta lista, e que se queira alterar o conteúdo do 
campo valor deste nodo, que está sendo apontado por pt, para 5.60. Marque a alternativa que 
corretamente possibilita esta operação: pt->valor=5.60; 
 
Sobre uma estrutura de dados do tipo LIFO, observe as seguintes afirmações: 
É uma pilha. , Pode ser uma fila com prioridades e É uma estrutura onde o primeiro 
elemento a entrar é o último a sair. 
 
http://estacio.webaula.com.br/salaframe.asp?curso=1937&turma=634317&topico=810953 
http://estacio.webaula.com.br/salaframe.asp?curso=1937&turma=634317&topico=810954

Outros materiais