Você está na página 1de 24

ESTRUTURA DE DADOS

AULA 01

█Podemos dizer que estrutura de dados é:


►O meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as
modificações.

█A forma correta para imprimir o valor do último elemento de um vetor v com n


posições é:
►cout << v[n-1];

█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

█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.
►I, III, IV e VI são afirmativas verdadeiras

█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 II estão corretas

█Estão entre algumas das possíveis formas de estruturas de dados:


►Árvores binárias, pilhas, vetores

█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.

█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 é
...
►lista

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 strcpy();
//strcat concatena e strlen conta o número de caracteres.

----------------------------------------------------------------------

AULA 02

█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; n = 5; dobro(n); cout << n; return 0; }
►5

█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);

█O que será impresso pela função Eureka ? Assinale a opção correta.


void Eureka()
{
for (int i = 1; i <= 10; i++)
if (i % 2 == 0)
cout << i << " ";
else
if (i % 7 == 0)
return;
}
►2 4 6

█O processo de modulação de programam, utiliza funções a fim de tornar os códigos


mais inteligíveis e também possibilitar uma manutenção mais fácil. Analise o código
a seguir e marque a opção correta.
#include<iostream>
using namespace std;
float n1,n2,n3,med;
float media (float,float,float);
void entrada();
void saida();
int main()
{ entrada();
saida();
return 0; }
float media(float a, float b, float c)
{return (a+b+c)/3;}
void entrada ()
{ cout<<"Entre com a 1a. nota:";
cin>>n1;
cout<<"Entre com a 2a. nota:";
cin>>n2;
cout<<"Entre com a 3a. nota:";
cin>>n3; }
void saida()
{ cout<<"A media : "<<media(n1,n2,n3); }
►O programa executa perfeitamente independente da ordem das funções já que existem
os seus protótipos.

█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

█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; }
►2 e 13

█Considere a função abaixo:


void func (int a, int &b) {
a++;
b = a*2; }
e o seguinte trecho de código na função main :
int x=2, y=3;
func (x,y);
func (y,x);
cout << x << " ; " << y;
Após a execução do cout o que será impresso ?
►14; 6

█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,5,10

█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 mesmo tipo, é 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 está correta

█Caso uma estrutura homogênea (vetor) seja passada como parâmetro para uma função,
então:
►Essa passagem é "por referência"

█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.
►retorno nomeFuncao(parametros);

█No programa abaixo, diga em que área de memória serão alocados os elementos de
dados y e r, respectivamente.
#include
using namespace std;
int x, y;
float media( float a, float b )
{ float tmp;
tmp = (a + b ) / 2.0;
return ( tmp ); }
int main() {
float r;
cout<<"Informe 2 valores: ";
cin>>x>> y;
r = media( x, y );
cout<<"\nMedia = "<< r<<"\n";
system ("pause"); }
►( ) área de dados globais / área de pilha

█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:
►Nenhuma está correta

█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
█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.

█Diga, para o trecho do programa abaixo, qual a opção que representa a saída em
tela. Considere que o programa será compilado sem erros, e irá executar também sem
problemas.
void troca (int x, int *y){
int tmp;
tmp = *y;
*y = x;
x = tmp; }
int main() {
int a = 13, b = 10;
troca( a, &b );
cout<<"Valores: "<< a<<"\t"<< b<< endl;
system("pause");}
►Valores: 13 13

█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

█void func (int a, int &b) {


a++;
b = a*2; }
e o seguinte trecho de código na função main :
int x=2, y=3;
func (x,y);
func (y,x);
cout << x << " ; " << y;
► 14; 6





----------------------------------------------------------------------
AULA 03

█Marque a afirmativa correta para a "Inserção em lista linear sequencial ordenada".


►Consiste em adicionar um valor no vetor, mantendo a ordem existente e ajustando o
total de elementos.

█...marque corretamente a alternativa que apresenta o código do método de seleção.


►void...menor

█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;
█struct Livro {int codigo; float preco; } liv;
►liv.preco = 30.70;






----------------------------------------------------------------------
AULA 04

█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.

█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 Interna

█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 foi encontrado.

█decrescente
►if(vet[j-1] < vet[j] )

█misterio(v, 4); Marque a opção correta. Como ficará o vetor após a execução da
função misterio ?
►10, 20, 30, 40

█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:
►binário

█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



----------------------------------------------------------------------
AULA 05





----------------------------------------------------------------------
AULA 06

█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.
►Pilha Sequencial

█Pilhas são estruturas de dados que se utilizam do algoritmo LIFO, last in first
out, ou melhor, o último a entrar é o primeiro a sair. Desta forma pode-se abstrair
que existe apenas um local para a saída e a entrada de dados, ou seja o topo da
pilha.

Supondo que uma pilha seja implementada por um vetor de inteiros de tamanho 10 e
que exista uma variável global chamada topo para indexar esta posição de entrada e
saída de dados e ainda quando esta variável assume o valor -1 indica que a pilha
está vazia. Marque a opção que melhor ilustra a função de exclusão de um dado do
vetor pilha, supondo ainda que o vetor tenha sido declarado inicialmente de forma
global.
►void pop(){ if(topo != -1) topo--;}

█Qual das alternativas a seguir pode definir uma estrutura de pilha?


►Entrada e saída de dados pelo final.

█Respeitando as ordens de inserção e de retirada dos dados, uma estrutura de:


►pilha é também denominada LIFO ou FILO.

█Ao remover um elemento armazenado em uma pilha é necessário a atualização da


variável (Topo) indicadora de posição. Qual das alternativas abaixo está correta?
►Após a operação de remoção decrementa a variável indicadora de posição.

█A estrutura de dados do tipo pilha (stack) é um tipo abstrato de dado baseada no


princípio:
►Last In First Out (LIFO).

█A estrutura de dados Pilha funciona de acordo com o seguinte fundamento básico:


►O primeiro a entrar é o último a sair.

█Quando as inserções e as remoções ocorrem sempre no mesmo lado da lista, trata-se


de uma estrutura de dados denominada
►Pilha

█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

█O almoxarifado de um órgão pediu ao técnico de informática que elaborasse um


sistema de custeio que, para cada saída de material, considerasse o custo do mais
recente que houvera dado entrada no almoxarifado. O técnico deve desenvolver um
programa para tratar com uma estrutura de dados do tipo?
►LIFO

█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()
►2 5

█No contexto de estrutura de dados, uma pilha é:


►um tipo de lista linear em que as operações de inserção e remoção são realizadas
na extremidade denominada topo.

█Considere uma pilha sequencial de números reais representada por


struct Pilha {
int topo;
float v[10]; };
onde temos Pilha p;
Marque a opção que corretamente inicializa a pilha :
►p.topo = -1;

█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.
►I, II e IV estão corretas.

█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.

█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
►8

█Considere dados sendo manipulados em uma pilha sequencial em que as operações


possíveis são: inserção - push(novo valor) ou remoção - pop(). Se realizarmos a
seguinte sequencia de operações:
push(A),push(B),push(C),pop(),pop(),push(D),pop(),pop(),pop(). Pode-se dizer que
interior da pilha apresenta-se:
►Vazio

█ Quadros...
►SANTA_CATARINA

█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?
►Nenhum, a pilha estará vazia.

█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 :
►20 3 10

█Algoritmo Pilha
Inicio
IniciarPilha(s)
enquanto (não for o final das entradas) faca
leia (num)
se (num != 3) então
Empilhar (s, num)
senão
Desempilhar(s)
x := ElementoTopo(s)
fimse
fimenquanto
fimalgoritmo
Considere que, no trecho do algoritmo acima, representado por seu pseudocódigo,
seja fornecido para num, sucessivamente, os valores inteiros 1, 2, 3, 4, 5, 3 e 6.
Nesse caso, ao final da execução do algoritmo, o valor de x será igual a ...
►5 e a pilha terá os valores 6, 4 e 1.

█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 :
► 11 e 29

█Considere que existe uma rotina para inserir um valor inteiro em uma pilha de
inteiros com o protótipo abaixo:
int push (int pilha[], int valor, int &topo); //retorno: 1=empilhou; 0=não
empilhou
Considere que existe uma função que remove um valor de uma pilha, que possui o
protótipo abaixo:
int pop (int pilha[], int &valor, int &topo);//retorno: 1=desempilhou; 0=não
desempilhou
Considere ainda a execução do seguinte trecho do programa principal:
int primeira[5], topoP=-1, segunda[5], topoS=-1, numero;
push (primeira, 3, topoP);
push (primeira, 5, topoP);
pop (primeira, numero, topoP);
push (segunda, numero, topoS);
push (segunda, 7, topoS);
push (primeira, 1, topoP);
Ao final da execução do techo de código acima, responda, nesta ordem, quantos
valores haverá na pilha primeira, quantos valores haverá na pilha segunda, qual é
o valor no topo da pilha primeira e qual é o valor no topo da pilha segunda.
►2; 2; 1; 7

█Quando executado, um programa tem acesso à áreas de memória. A área de memória que
se destina, principalmente, à alocação dos registros de ativação denomina-se:
►( ) área de pilha

█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:
►Somente a operação POP altera o estado da Pilha

█O que acontece quando tentamos retirar um elemento de uma pilha que já está vazia?
►Underflow

█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.
►ordenado - topo - topo - empilhar ou push - desempilhar ou pop

█TAM
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.
►II e V estão corretas



----------------------------------------------------------------------
AULA 07

█Fila
►Na fila insere-se no fim e retira-se do início.

█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á?
►9

█Considerando que uma fila seqüencial utiliza dois apontadores para indicar suas
posições de final e início da estrutura, supondo que a fila foi criada com os
apontadores apontando para a posição zero do vetor, qual das alternativas a seguir
pode caracterizar uma fila vazia?
►Quando o apontador de posição final for igual ao início.


Usa-se um vetor para se implementar uma fila sequencial, entretanto se nesta
estrutura ocorrer diversas operações de remoção e inserção podemos afirmar que:
►A estrutra sofrerá do fenômeno chamado esgotamento de memória e logo não poderá
mais ser utilizada. A solução é o uso da fila circular.

█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.
►FIFO, não-preemptivo.

█Considere a função insere(x: inteiro), que recebe como parâmetro um número


inteiro e o insere em uma Fila, e ainda, a função remove(), que retira um valor de
uma Fila.

Dada a Fila [3-4-6-8-10], executam-se os comandos na ordem: insere(1), insere(2),


remove().

Após a execução desses comandos, qual será a Fila resultante?


►[4-6-8-10-1-2]

█I- Uma fila guarda a ordem direta em que os elementos foram armazenados.
II- Uma fila guarda a ordem reversa em que os elementos foram armazenados.
III- O algoritmo que é implementado em uma fila é baseao no princípio: " O último a
entrar é o primeiro a sair".
IV- O algoritmo que é implementado em uma fila é baseao no princípio: " O primeiro
a entrar é o primeiro a sair".
►I e IV estão corretas

█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?
►inicio 2 e fim 0

█Uma fila duplamente terminada, isto é, uma estrutura linear que permite inserir e
remover de ambos os extremos é chamada de:
►Deque.

█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:
►PILHA

█ 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:
►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 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)
F.inicio++;

█Um aluno do EAD est...


►Fila Circular

█Marque a afirmativa que represente uma Lista Circular Simplesmente Encadeada:


►O ponteiro do "último" nó não é NULL, mas sim aponta de volta para o "primeiro" nó
da lista.

█Agentes espioes de novo...


►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;

█Sobre pilhas, lista e filas, considere as afirmativas a seguir.


I. As estruturas de dados pilhas, filas e listas armazenam coleções de itens. A
característica que as distinguem é a ordem em que podem ser retirados os itens
dessas coleções e a ordem em que foram inseridos.
II. Considere que os itens A, B, C, D, E foram inseridos nessa ordem em uma fila.
Necessariamente, o primeiro elemento a ser removido dessa fila é o elemento A.
III. Considere que os itens A, B, C, D, E foram inseridos nessa ordem em uma pilha.
Necessariamente, o último elemento a ser removido dessa pilha é o elemento E.
IV. Considere que os itens A, B, C, D, E foram inseridos nessa ordem em uma lista.
Necessariamente, o primeiro elemento a ser removido dessa lista é o elemento A.
►Somente as afirmativas I e II são corretas.





----------------------------------------------------------------------
AULA 08

█Considere
int *ptr, *qtr, *r;
int a = 10, b = 20;
Após executar cada instrução conforme a ordem dada a seguir :
ptr = &a;
qtr = &b;
*ptr = *ptr + *qtr;
++(*qtr);
r = qtr;
qtr = ptr;
assinale a opção que mostra, correta e respectivamente, os valores de *ptr, *qtr ,
*r , a e b .
►30 30 21 30 21

█Em uma aplicação que usa processos de alocação estática e dinâmica de memória é
correto afirmar que
►A memória utilizada pela aplicação é inicialmente estática, mas pode mudar

█Qual das inicializações de ponteiros apresentadas abaixo está correta?


►int *p = new int;

█QUAL A SAÍDA DESTE PROGRAMA?


#include
main()
{ int i=10,*p;
p=&i;
cout << *p << " " << i + *p<< " " << *p**p << " " << i+**&p;
system("pause"); }
►10 20 100 20

█Tenho uma lista não ordenada de clientes em que registro apenas a matrícula, o
nome, o endereço e o telefone de cada cliente. Como não tenho limites para o
crescimento da minha lista, como posso implementar a inserção de um novo cliente na
lista, sabendo que cada cliente é do tipo Cliente e a lista é do tipo Lista assim
definidos :
struct Cliente {
long int matricula;
string nome, endereco, tel; };
struct Lista {
Cliente c;
struct Lista *link; };
►Lista * insereCliente(Lista *p, Cliente cl)
{ Lista *novo = new Lista;
novo->c = cl;
novo->link = p;
return novo; }

█Tem-se uma estrutura de dados do tipo lista encadeada com 10 elementos, em que o
primeiro e o último elemento estão ligados entre si. Trata-se de uma estrutura de
dados denominada Lista
►Encadeada Circular

█Podemos dizer que uma lista encadeada tem as seguintes características:


i) conhecida como lista ligada.
ii) seus nós são responsáveis para manter a sequência da lista.
iii) o último nó deve apontar para NULL.
►Todas as afirmativas estão corretas.

█Admita a seguinte estrutura de nó de uma lista simplesmente encadeada: struct tno


{ int chave; tno *proximo; }; Admita, agora, a seguinte declaração de uma variável
do tipo nó: tno *no; Qual das alternativas a seguir traz uma operação válida sobre
essa variável?
►no->proximo = new tno; (É correto porque o campo proximo é campo de ponteiro e
pode receber outro ponteiro, pode receber NULL ou pode receber endereço da área
alocada com new, como foi o caso.)

█I) Todos os nós são alocados de uma única vez.


II) Os nós não são alocados contiguamente na memória obrigatoriamente.
III) Os elementos de uma lista encadeada são ligados por dois ponteiros.
IV) Para que possamos percorrer toda a lista, precisamos armazenar o endereço do
próximo elemento para possibilitar o encadeamento.
►II e IV estão corretas

█Em uma rotina em que se pretenda inserir o primeiro dado em uma estrutura
dinâmica, é correto afirmar que:
►Não deve existir uma estrutura de repetição.

█Em uma aplicação que usa apenas o processo de alocação estática de memória é
correto afirmar que
►Toda a memória utilizada pela aplicação não muda durante toda a sua execução

█Considere uma lista simplesmente encadeada com placas de carros. Assinale a opção
que, corretamente, imprime todas as placas da lista. Considere :
struct no {
string placa;
struct no *link; };
no *p; //p aponta para o início da lista
►void imprimir(no *p) {
while (p != NULL) {
cout << p->placa;
p = p->link;

█A linguagem C++ oferece quatro meios de criação de tipos de dados: matrizes,


estruturas ou structs, uniões e classes. As estruturas, que passaremos a chamar
simplesmente de structs, são tipos de variáveis que agrupam dados geralmente
desiguais, enquanto matrizes são variáveis que agrupam dados similares. Devido a
esta característica as structs são utilizadas para modelar nodos (nós) de
estruturas dinâmicas. Portanto podemos afirmar que:
►As estruturas dinâmicas são assim chamadas, pois podem fazer alocação de memória
em tempo de execução e terem seus tamanhos alterados de acordo com a demanda.

█Uma estrutura de dados pode ser Estática ou Dinâmica. No primeiro caso os limites
são:
►Determinados pelo problema em que serão utilizados

█Seja uma lista encadeada cujo nodo é representado por:


struct nodo{ int valor; nodo prox; };
Esta estrutura possui um ponteiro de referência que aponta sempre para o primeiro
nodo da lista, sendo este declarado como: nodo *lista;
Numa lista encadeada seu último nodo possui o campo prox sempre igual a NULL.
Marque a opção que representa o trecho de código onde um ponteiro auxiliar é capaz
de percorre a lista até seu último nodo:
►nodo *aux=lista;
while(aux->prox)aux=aux->prox;

█Sobre listas encadeadas, é INCORRETO afirmar que:


►possuem tamanho fixo;

█Uma lista linear implementada através de encadeamento deve apresentar


obrigatoriamente:
i) um ponteiro para o primeiro nó da lista;
ii) encadeamento entre os nós, através de algum campo de ligação;
iii) não deve haver uma indicação de final da lista;
iv) um ponteiro para o final da lista.
Levando em consideração as afirmações apresentadas, qual das alternativas é a
correta?
►as afirmações i e ii estão corretas.

█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.

█Qual é o resultado do código abaixo:


int a =10;
int *p = &a;
cout<< &p << endl;
►O endereço da variável p será impresso

█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;

█As variáveis são na verdade trecho de memórias que armazenam dados de diversas
naturezas, portanto sempre que declara-se uma variável, na linguagem C++, é
necessário informar o tipo de dado que esta irá armazenar. Um tipo especial de
variáveis são os ponteiros, isto é, variáveis que armazenam apenas os endereços de
outras variáveis. Assim os ponteiros são usados para que se possa acessar de forma
indireta uma outra variável. Sabendo-se disto e supondo que o endereço na memória
da variável "a" é 100 e o endereço da memória da variável ponteiro é 200, analise o
trecho de código abaixo e marque a alternativa que representa a saída do programa:
cout<<ponteiro<<" "<<*ponteiro<<" "<<&ponteiro;
►100 9 200 (100 ===> endereço da memória da variável a 9 ===> valor da
variável a 200 ===> endereço da memória da variável ponteiro)

█Seja uma lista encadeada cujos nodos são formados pelo seguinte tipo de dado:
struct empregado {
long int matricula;
float salario;
empregado *proximo; };
Suponha que o ponteiro pont tenha o endereço de um nodo da lista, o qual se deseja
atribuir um novo valor para o campo salario. Marque a alternativa que corretamente
altera o valor do campo salario para 5000.00.
►salario=5000.00;

█I A variável ponteiro não precisa ser declarada.


II A variável ponteiro armazena endereço.
III Quanto se usa &nomeDaVariávelPonteiro com o comando cout, é exibido o endereço
da variável apontada pela variável ponteiro.
IV Quando se usa nomeDaVariávelPonteiro com o comando cout, é exibido o endereço da
variável ponteiro.
V Quando se usa *nomeDaVariávelPonteiro com o comando cout, é exibido o conteúdo da
variável apontada pela variável ponteiro.
►II e V estão corretas

█Assinale a alternativa correta sobre alocação de memória.


►Na alocação dinâmica de memória, a memória é alocada sob demanda, apenas quando
necessário.

█Qual o valor de x no final do programa? int main() { int x, *p, y; x = 2; p = &x;


y = *p; y = 5; (*p)++; (*p) = (*p) - y; return(0); }
►-2

█Considerando a afirmação: "Ponteiro é uma variável que armazena o endereço de


outra variável", a forma correta de se atribuir ao ponteiro p o endereço de uma
variável é
►p = &matricula;

█Dr. Pei Tam possui uma lista não ordenada de pacientes de seu consultório em que
registra apenas o nome endereço e o telefone de cada paciente. Como não há limites
para o crescimento de sua lista, como se pode implementar a inserção de um novo
paciente na lista, sabendo que cada paciente é do tipo Paciente e a lista é do tipo
List assim definidos :
►List * inserePac(List *i, Paciente pt)
{ List *novo = new List;
novo->p = pt;
novo->link =i;
return novo;

█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
█Sou uma empresária que quer crescer e por isso, tenho que aumentar
progressivamente a minha lista de clientes, sem limitar este crescimento. Assim, à
medida que novos clientes são cadastrados, posso, se necessário, contratar mais e
mais empregados. Marque a opção que especifica o tipo de lista e o tipo de alocação
de memória mais adequados para este problema.
►lista encadeada e alocação dinâmica de memória

█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

█Considere a função em C++ que manipula uma lista simplesmente encadeada :


void imprime (Lista *l) {
Lista* p;
for (p = l; p != NULL; p = p->prox)
cout <<"Info = " << p->info; }
sendo
struct Lista {
int info;
struct Lista *prox; };
►Função que percorre os elementos da lista

█Qual o valor de x no final do programa? int main() { int x, *p, y; x = 3; p = &x;


y = *p; y = 7; (*p)++; (*p) += y; return(0); }
►11

█Na Alocação dinâmica, temos alguma regras a considerar. Leia atentamente as


afirmativas abaixo e assinale a correta.
I Alocou com new, desaloca com free
II Alocou com new[], desaloca com delete
III Alocou com new[], desaloca com delete[]
IV Alocou com new[], desaloca com free[]
V Alocou com new, desaloca com delete
►III e V estão corretas

█Considere
int *p, *q, *r;
int x = 10, y = 20;
Após seguir cada instrução na ordem dada a seguir :
p = &x;
q = &y;
*p = *p + *q;
(*q)++;
r = q;
q = p;
identifique a opção que fornece correta e respectivamente, os valores de *p, *q ,
*r , x e y :
►30 30 21 30 21

█Considerando a afirmação: "Ponteiro é uma variável que armazena o endereço de


outra variável", a forma correta de se atribuir ao ponteiro p o endereço de uma
variável é
►p = &matricula;

█#include
main() {
int x=5,*p;
p=&x;
cout << x - *p << " " << **&*&p + 1 << " " << *p*2+*p << " " << x+**&p;
system("pause"); }
►0 6 15 10

█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.

█ Tei Ping , famosa cabeleireira das estrelas, possui uma lista não ordenada de
clientes em que registra apenas o nome, endereço e o telefone de cada cliente. Como
não se pode pré-definir um limite para o tamanho da lista, como se pode implementar
a inserção de um novo cliente na lista ? Sabe-se que cada cliente é do tipo
Cliente e a lista é do tipo List assim definidos :
►List * insereCliente(List *i, Cliente c){
List *novo = new List;
novo->p = c;
novo->link =i;
return novo;

█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

█Qual das instruções abaixo é correta para declarar um ponteiro para inteiro?
►int *pti;

█E C++, quando um ponteiro é declarado para uma struct, o acesso aos campos deste
registro (struct) se dá pelo operador :
►-> (seta).

█Sobre listas simplesmente encadeadas, é INCORRETO afirmar que :


►possuem tamanho fixo

█I- Na alocação estática de memória a quantidade de memória alocada é feita em


tempo de compilação.
II- Na alocação dinâmica de memória a quantidade de memória alocada é feita em
tempo de execução.
III- Na alocação estática de memória a quantidade de memória alocada é fixa durante
a execução do programa.
IV- Na alocação dinâmica de memória a quantidade de memória alocada é fixa durante
a execução do programa.
►Apenas a IV está errada

█Montei uma biblioteca popular que aceita doações sem limites. Marque a opção que
especifica o tipo de lista e o tipo de alocação de memória mais adequados para este
problema.
►lista encadeada e alocação dinâmica de memória

█Marque a afirmativa que represente uma separação.



----------------------------------------------------------------------
AULA 09
█Seja o seguinte exemplo de nodo de uma lista de encadeada:
struct nodo{
float valor;
string produto;
nodo * proximo; };
Sabendo-se que nesta lista o último nó ou nodo possui o campo próximo nulo (null),
marque a alternativa que representa corretamente a operação de busca do último
nodo, a partir de um ponteiro pt apontado para o primeiro nodo da lista.
►while(pt->próximo)pt=pt->próximo;

█ insere(10), insere(3), insere(5), insere(8), remove(), remove(), insere(20),


►5 8 20

█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.
I if (ptr !=NULL)
II if( !ptr )
III if(ptr)
IV while (ptr !=NULL)
V while (ptr)
►IV e V estão corretas.

█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ó.

█Sabendo que uma fila encadeada possui seus nós definidos pela :
struct no {
int x;
no *prox; };
►no *p=new no;





















----------------------------------------------------------------------
AULA 10

█Assinale a alternativa que traz uma afirmação incorreta sobre as diversas


implementações da estrutura de dados lista.
►Listas encadeadas em geral são preferíveis em relação às listas sequenciais,
especialmente por serem mais eficientes e sempre utilizarem menos espaço de
armazenamento na memória.

//█korrect
//►A estrutura do nó da lista duplamente encadeada deve, obrigatoriamente, possuir
um ponteiro para o nó anterior e outro para o nó seguinte, permitindo movimentação
para frente e para trás.
//►A lista simplesmente encadeada é adequada para a resolução de problemas em que
os elementos da lista devem ser percorridos em apenas uma direção.
//►A lista sequencial deve ser implementada com o uso de estruturas de vetor, pois
essas essas estruturas utilizam o conceito de alocação estática e dispõem seus
elementos de forma contígua na memória.
//►A lista circular é toda lista, independente do tipo de alocação, em que é
formado um ciclo entre seus elementos. Por exemplo, quando o último elemento da
lista aponta para o primeiro.

█Sobre as estruturas de dados lineares, assinale V ou F:


I - Em uma pilha, o último elemento a entrar é o primeiro a sair.
II - Em uma fila, o primeiro elemento a entrar é o último a sair.
III - Uma lista permite que as inserções possam ser feitas em qualquer lugar
(posição), mas as remoções, não.
IV - Em uma lista circular com encadeamento simples, o primeiro elemento aponta
para o segundo e para o último.
V - Para remover um elemento de uma lista duplamente encadeada, deve-se alterar o
encadeamento dos elementos anterior e próximo ao elemento removido.
►V,F,F,F,V

█Ao criarmos uma rotina para inserir um dado em uma LISTA de dados duplamente
encadeada e circular, nos deparamos com as seguintes cuidados:
►Posso inserir no começo, no meio ou no fim.

█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;
►As operações removem o nodo apontado pelo ponteiro p.

█Considere uma lista duplamente encadeada não circular em que


struct nodupla {
int dado;
struct nodupla *dlink; // aponta p/ o nó à direita
struct nodupla *elink; // aponta p/ o nó à esquerda };
sendo nodupla *p; //ponteiro para o início da lista
►nodupla *novo;
novo = new nodupla;
novo->dado = valor;
novo->dlink = p;
novo->elink = NULL;
if (p != NULL)
p->elink = novo;
p = novo;

█Observe a struct, definida globalmente, e um trecho de uma função que manipula uma
Lista Duplamente Encadeada.
struct listaDE {
int info;
struct listaDE* ant;
struct listaDE* prox;};
...
listaDE* novo = new listaDE;
novo->info = valor;
novo->prox = LISTA;
novo->ant = NULL;
►listaDE *insereInicio(listaDE *LISTA, int valor);

█Um tipo de estrutura de dados é declarada em C como:


typedef struct no *apontador;
struct no{
int valor;
apontador esq, dir; }
►t=p->dir;
p->dir = p->esq;
p->esq = t;

█Uma estrutura de dados em lista duplamente encadeada permite na cadeia movimentos


para
►frente e para trás, apenas.

█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;
►Y, logo após o Z, e X, logo após o Y.

█Geralmente em algumas situações é necessário fazer a desalocação do espaço


utilizado na memória. Porém, isso depende de como a reserva de uma quantidade de
espaço de memória é feita, pois em alguns casos, o próprio compilador faz a
desalocação. Quando o compilador não faz esta desalocação a memória foi reservada
utilizando______.
►Alocação dinâmica de memória

█O armazenamento de dados na memória do computador é feito de forma ordenada,


utilizando-se estruturas e regras de operações. Das alternativas a seguir, assinale
a correta:
►Em uma lista linear com alocação duplamente encadeada os nós da estrutura ocupam
espaços aleatórios na memória e cada nó armazena além da sua informação os
endereços do nó anterior e do próximo nó da estrutura.

█Os registros também conhecidos como estruturas, são estruturas de dados do tipo
heterogêneo, ou seja, permitem que valores de tipos diferentes possam ser
armazenados em uma mesma estrutura. Analisando a estrutura abaixo, a mesma pode ser
utilizada para qual tipo de estrutura de dados, marque a alternativa correta.
struct nomeRegistro{
int info;
struct nomeRegistro* ant;
struct nomeRegistro* prox;};
typedef struct nomeRegistro NOMEREGISTRO;
►listas duplamente encadeadas

█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ó.

█Em uma lista linear duplamente encadeada.


►Além do campo relativo ao dado, cada nó possui dois ponteiros.




















Você também pode gostar