Escolar Documentos
Profissional Documentos
Cultura Documentos
AULA 01
█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
█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
█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
----------------------------------------------------------------------
AULA 02
█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);
█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
█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
█
►
█
►
█
►
█
►
----------------------------------------------------------------------
AULA 03
█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
█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
█
►
----------------------------------------------------------------------
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--;}
█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
█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
█ 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.
█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 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
█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.
█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
█Uma fila duplamente terminada, isto é, uma estrutura linear que permite inserir e
remover de ambos os extremos é chamada de:
►Deque.
█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++;
█
►
█
►
█
►
█
►
----------------------------------------------------------------------
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
█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
█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;
█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
█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.
█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;
█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;
█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
█#include
main() {
int x=5,*p;
p=&x;
cout << x - *p << " " << **&*&p + 1 << " " << *p*2+*p << " " << x+**&p;
system("pause"); }
►0 6 15 10
█ 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;
█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).
█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
█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
█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
//█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.
█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.
█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);
█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.
█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ó.
█
►
█
►
█
►
█
►
█
►
█
►
█
►
█
►
█
►
█
►
█
►
█
►
█
►
█
►
█
►
█
►
█
►
█
►