Buscar

Aula 6 a 10

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

1.
		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:
	
	
	
	Apenas com o dado A
	
	
	Com os dados A e B
	
	
	Com os dados A e D
	
	
	Vazio
	
	
	Apenas com o dado D
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		A estrutura de dados do tipo pilha (stack) é um tipo abstrato de dado baseada no princípio:
	
	
	
	Da localidade de referência.
	
	
	De dividir para conquistar.
	
	
	Da indiferença.
	
	
	Last In First Out (LIFO).
	
	
	First In First Out (FIFO).
	
Explicação:
A lógica da Pilha é: o último a entrar é o primeiro a sair logo, Last (último) In (dentro) First (primeiro) Out (fora) -> LIFO.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		3.
		Um programador recebeu a tarefa de construir um programa que receba uma cadeia de caracteres e verifique se esta cadeia de caracteres é um PALÍNDROME, sabendo-se que um PALÍNDROME apresenta a mesma sequência de caracteres da esquerda pra direita, quanto da direita para esquerda, marque a opção que possui a estrutura de dados mais adequada a este programa.
	
	
	
	Fila Sequencial
	
	
	Árvores
	
	
	Pilha Sequencial
	
	
	Grafos
	
	
	Lista Sequencial
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		A estrutura de dados linear que obedece o seguinte critério: o último elemento inserido será o primeiro elemento a ser retirado (LIFO) é:
	
	
	
	fila.
	
	
	árvore AVL.
	
	
	lista circular.
	
	
	árvore binária.
	
	
	pilha.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		5.
		É uma Lista Linear Ordenada em que as inserções e remoções seguem o critério LIFO (Last In First Out), ou seja, o último a entrar será o primeiro a sair. Estamos falando do(a) __________________________ .
	
	
	
	Fila Circular
	
	
	Árvore
	
	
	PILHA
	
	
	Busca de Alocação de Memória
	
	
	FILA
	
Explicação:
Por definição, a estrutura de dados pilha é uma lista ordenada em que as inserções e remoções seguem a lógica LIFO.
 
	
	
	
	 
		
	
		6.
		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 :
	
	
	
	10 3 5 8
	
	
	5 8 20
	
	
	20 3 10
	
	
	20 10 3
	
	
	20 3 5 8
	
Explicação:
 
Ao empilharmos 10, 3, 5 e 8  temos a seguinte sequência  10 3 5 8, onde 8 está no topo da pilha e 10 foi o primeiro valor empilhado. 
Ao ser executado desempilha(), o valor 8 é retirado da pilha, ficando o valor 5 no topo da pilha.
Ao ser executado mais um desempilha(), o valor 5 é retirado da pilha, ficando o 3 no topo da pilha.
Depois, a ser executado empilha(20), a pilha fica com a seguinte configuração :
10  3  20, onde 20 está no topo da pilha.
 
Para dar a sequência a partir do topo para baixo :   20  3   10
	
	
	
	 
		
	
		7.
		A técnica LIFO, utilizada em programação estruturada, é fundamentada no conceito de:
	
	
	
	Array.
	
	
	Pilha.
	
	
	Fila.
	
	
	Loop.
	
	
	Ponteiro.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		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.
	
	
	Apenas o 10
	
	
	Apenas o 2
	
	
	7 e 2
	
	
	10 e 2
		1.
		Observe a função que manipula uma pilha e assuma que TAM é uma constante definida com valor 5. Saiba que o nome da função já explícita a finalidade dela.
Considere a chamada da função conforme linha abaixo, sabendo-se que vet é um vetor de tamanho 5 e que não tem nenhum valor ainda:
Analise as afirmativas abaixo que sugerem correções, ou não, na definição na função e assinale a opção que contem as afirmativas corretas.
I Faltou & antes da variável vetor e irá acusar erro. 
II A variável topo está sem tipo.
III O teste está correto porque o índice do primeiro elemento do vetor em C++ é 1, obrigatoriamente. 
IV Na linha comentada deveria estar presente um comando de atribuição que decrementaria a variável topo. 
V A linha vetor[topo]=valor; está correta.
	
	
	
	I e II estão corretas
	
	
	I , III e V estão corretas
	
	
	I e III estão corretas
	
	
	I, II e IV estão corretas
	
	
	II e V estão corretas
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		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, 3, 5, 4, 3, 2 e 1.
	
	
	2 e a pilha terá os valores 6, 4 e 1.
	
	
	3 e a pilha terá os valores 6, 4 e 1.
	
	
	3 e a pilha terá os valores 6, 5, 4, 2 e 1.
	
	
	5 e a pilha terá os valores 6, 4 e 1.
	
Explicação:
Seguindo o fluxo do algoritmo, serão empilhados 1 e 2. Ao chegar no 3, o valor 2 será desempilhado e armazenado em x.
Continuando o loop, 4 é mepilhado, depois 5 é empilhado e ao chegar novamente em 3, o 5 é deempilhado e armazenado em x. Continuando o loop enquanto existe entrada, empilha-se o 6.
Dessa forma temos que o valor em 5 é 5 e a pilha possui os valors 6, 4 e 1, sendo 6 no topo da pilha.  
Logo, a opção correta é 5 e a pilha terá os valores 6, 4 e 1.
	
	
	
	 
		
	
		3.
		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 é:
	
	
	
	Ponteiro
	
	
	Fila
	
	
	Matriz
	
	
	Struct
	
	
	Pilha
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		Considere dados sendo manipulados em uma pilha sequencial em que as operações possíveis são: inserção - push(novo valor) ou remoção - pop().
Se realizarmos a seguinte sequencia de operações:
push(A),push(B),push(C),pop(),pop(),push(D),pop(),pop().
Pode-se dizer que o interior da pilha apresenta-se:
	
	
	
	Apenas com o dado D
	
	
	Com os dados A e D
	
	
	Apenas com o dado A
	
	
	Vazio
	
	
	Com os dados A e B
	
	
	
	 
		
	
		5.
		A estrutura de dados Pilha funciona de acordo com o seguinte fundamento básico:
	
	
	
	O primeiro a entrar é o último a sair.
	
	
	Tanto o primeiro como o último podem sair primeiro.
	
	
	O primeiro a entrar é o primeiro a sair.
	
	
	Quem estra no topo da pilha não sai mais.
	
	
	O último a entrar é o último a sair.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		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?
	
	
	
	Antes a operação de remoção decrementa a variável indicadora de posição.
	
	
	Antes da operação de remoção incrementa a variável indicadora de posição.
	
	
	Após a operação de remoção decrementa a variável indicadora de posição.
	
	
	Após a operação de remoção incrementa a variável indicadora de inicio.
	
	
	Após a operação de remoção incrementa a variável indicadora de posição.
	
	Gabarito
Coment.7.
		Qual das alternativas a seguir pode definir uma estrutura de pilha?
	
	
	
	Entrada e saída de dados pelo início.
	
	
	Entrada e saída de dados em qualquer local.
	
	
	Entrada de dados pelo início e saída pelo final.
	
	
	Entrada e saída de dados pelo final.
	
	
	Entrada de dados pelo final e saída pelo início.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		Ling Tang, estudante de computação, precisou implementar parte de um jogo de cartões com figuras de animais.  Alguns jogadores teriam que jogar os cartões na mesa, enquanto outros deveriam devolver os cartões  na sequência inversa à jogada.  Ling Tang  estudou o mecanismo do jogo e decidiu usar a melhor estrutura de dados  na sua implementação. Qual a estrutura escolhida ?
	
	
	
	fila 
	
	
	 pilha
	
	
	lista
	
	
	 árvore
	
	
	 grafo
Aula 7
		1.
		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.
	
	
	
	Circular, não-preemptivo.
	
	
	LIFO, não-preemptivo.
	
	
	FIFO, não-preemptivo.
	
	
	SJF (Shortest-Job-First), preemptivo.
	
	
	Por prioridades, preemptivo.
	
Explicação:
O algoritmo de escalonamento FIFO (First in, first out, em português: "O primeiro a entrar é o primeiro a sair, sigla PEPS), ou FCFS(First come, first served, em português: "O primeiro a chegar é o primeiro a ser servido") é conhecido popularmente por Algoritmo de Fila Simples, é uma estrutura de dados que apresenta o seguinte critério: O primeiro elemento a ser retirado é o primeiro que tiver sido inserido, é um algoritmo de escalonamento não preemptivo que entrega a CPU os processos pela ordem de chegada. Ele executa o processo como um todo do inicio ao fim não interrompendo o processo executado até ser finalizado, então quando um novo processo chega e existe um ainda em execução ele vai para uma fila de espera. Esta fila de espera nada mais é do que uma fila que organiza os processos que chegam até eles serem atendidos pela CPU.
Neste escalonamento todos os processos tendem a serem atendidos (por isso evita o fenômeno do starvation) ao menos que um processo possua um erro ou loop infinito. O loop infinito irá parar a máquina, pois com o FIFO não terá como dar continuidade a execução dos processos que estão aguardando na fila de espera.
O algoritmo FIFO não garante um tempo de resposta rápido pois é extremamente sensível a ordem de chegada de cada processo e dos antecessores (se existirem) e se processos que tendem a demorar mais tempo chegarem primeiro o tempo médio de espera e o turnaround acabam sendo aumentados.
	
	
	
	 
		
	
		2.
		         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.
	
	
	Fila de pessoas para tirar o visto e fila de pessoas para usar o caixa eletrônico.
	
	
	Fila de arquivos para impressão e fila de pessoas no caixa de um supermercado.
	
	
	Buffer para gravação de dados em mídia e fila de pessoas para comprar o ticket do metrô.
	
	
	Fila de documentos para xerox e fila de arquivos para impressão.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		3.
		IFMT - Técnico em Tecnologia da Informação - 2013
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?
	
	
	
	[3-4-6-8-10]
	
	
	[2-3-4-6-8-10]
	
	
	[4-6-8-10-1-2]
	
	
	[3-4-6-8-10-1]
	
	
	[2-1-3-4-6-8]
	
Explicação:
Temos a fila inicialmente 
  3 4 6 8  10
Após inserir 1, a fila ficará :  3 4 6  8 10 1
Após isnerir 2 : 3 4 6  8 10 1 2
Após uma remoção :  4 6  8 10 1 2
	
	
	
	 
		
	
		4.
		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:
 Pode-se concluir, então, que P corresponde à seguinte estrutura de dados?
	
	
	
	PILHA
	
	
	LISTA
	
	
	STRUCT
	
	
	CONJUNTO
	
	
	PONTEIRO
	
Explicação:
Pela estrutura apresentada verifica-se ser a de uma Pilha.
	
	
	
	 
		
	
		5.
		    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?
	
	
	
	Início 4 e fim 4
	
	
	inicio 2 e fim 0
	
	
	Início 1 e fim 4
	
	
	Início 0 e fim 0
	
	
	Nenhuma das opções
	
Explicação:
Inicialmente temos inicio em 0 e fim em 2, sendo A no início e C no fim  da fila.
Ao termos D inserido ->>>   A -> Z -> C -> D onde inicio é zero e fim é 3.
Ao termos H inserido ->>> A -> Z ->C -> D -> H onde inicio é zero e fim é 4
Ao ser deletado um valor, o A sai. Então Z->C -> D -> H, onde inicio é 1 e fim é 4.
Ao termos F  inserido :  Z->C -> D -> H -> F, onde inicio é 1 e fim é 0
Ao ser deletado um valor, o Z sai. Então C -> D -> H -> F, onde inicio é 2 e fim é 0
	
	
	
	 
		
	
		6.
		A estrutura de dados conhecida pela lógica  FIFO (First In First Out) é denominada  :
	
	
	
	Lista circular
	
	
	Vetor
	
	
	Fila
	
	
	Árvore
	
	
	Pilha
	
Explicação:
Fila é, por definição, uma lista linear ordenada em que as inserções e remoções seguem a lógica FIFO.
	
	
	
	 
		
	
		7.
		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:
 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".
 Marque a alternativa correta:
	
	
	
	II e Iv estão corretas
	
	
	I e IV estão corretas
	
	
	Apenas a IV está correta
	
	
	II e III estão corretas
	
	
	I e III estão corretas
	
	Gabarito
Coment.
	
	
	Gabarito
Coment.
	
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		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.
	
	
	Somente as afirmativas I e IV são corretas.
	
	
	Somente as afirmativas III e IV são corretas.
	
	
	Todas as afirmativas estão corretas
	
	
	Somente as afirmativas I, II e III são corretas.1.
		Ao treinar macacos, foi realizado um jogo para avaliar sua  memória. O cientista fornecia sequências de cartas com figuras geométricas e o macaco devia reproduzir a mesma sequência usando figuras geométricas reais.  Qual a estrutura de dados mais adequada para modelar esse jogo ?
	
	
	
	grafo
	
	
	fila
	
	
	pilha
	
	
	árvore
	
	
	lista
	
Explicação:
Fila é baseada na lógica FIFO, o primeiro a entrar será o primeiro a sair da fila. Portanto, como as cartas serão retornadas na mesma ordem da entrada, a resposta certa é fila.
Veja porque não podem ser as outras opções: 
Não pode ser pilha, pois pilha retorna os valores na ordem inversa à ordem  de entrada.
Não pode ser lista porque na lista insere-se ou retira-se de qualquer posição.
Não pode ser  Árvore ou Grafo pois são não lineares e o problema descrito é linear.
 
	
	
	
	 
		
	
		2.
		Ao inserirmos em uma estrutura de dados do tipo fila sequencial os seguintes elementos: A, B, C, D, exatamente nesta ordem. E em seguida realizarmos duas operações consecutivas de remoção na fila e imediatamente inserirmos dois novos elementos o X e o W. Podedmos afirmar que se realizarmos uma nova operação de remoção, o elemento que será removido desta fila sera o:
	
	
	
	A
	
	
	C
	
	
	X
	
	
	W
	
	
	D
	
	Gabarito
Coment.
	
	
	Gabarito
Coment.
	
	
	Gabarito
Coment.
	
	
	
	 
		
	
		3.
		Qual estrutura de dados é mais adequada para armazenar em um sistema operacional os processos que estão prontos para utilizar o processador?
	
	
	
	Pilha
	
	
	Árvore
	
	
	Grafo
	
	
	Lista
	
	
	Fila
	
Explicação:
Pode se ter uma fila de processos para a CPU (processador), visto que o primeiro processo a chegar à fila será atendido primeiro e sairá da fila primeiro, o que faz a  lógica FIFO, que rege a fila. Observe a característica linear do problema. Por tudo isso,  a resposta é fila.
 
Lista : linear e não segue FIFO. Insere-se em qualquer posição e retira-se de qualquer posição ou se mantém a ordem, se for ordenada.
 
Pilha : segue LIFO
 
Árvore e Grafo : estrutura de dados não linear.
	
	
	
	 
		
	
		4.
		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.
	
	
	Um vetor não pode ser usado na implementação de uma fila sequencial apenas em pilhas sequenciais.
	
	
	A estrutura fila não sofre esgotamento de memória, isto ocorre com as pilhas já que implementam o algoritmo LIFO.
	
	
	A estrutra sofrerá do fenômeno esgotamento de memória, mas se os dados estiverem ordenados isto não afetará a estrutura.
	
	
	Um vetor é uma estrutura base correta para esta implementação, já que está imune a fenômenos como esgotamento de memória.
	
	
	
	 
		
	
		5.
		Para organizar o acesso dos processos que demandam recursos do computador (uso da CPU, acesso ao disco rígido e a outros dispositivos de Entrada e Saída), o Sistema Operacional gerencia essas demandas colocando os processos requisitantes em:
	
	
	
	Filas
	
	
	Listas
	
	
	Árvores
	
	
	Pilhas
	
	
	Structs
	
Explicação:
Um exemplo de aplicação de fila : fila de processos para CPU. O primeiro processo a chegar fará uso da CPU. O mesmo para os dispostivos de I/O.
	
	
	
	 
		
	
		6.
		IFMT - Técnico em Técnologia da Informação - 2013
   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?
	
	
	
	[2-1-3-4-6-8]
	
	
	[2-3-4-6-8-10]
	
	
	[4-6-8-10-1-2]
	
	
	[3-4-6-8-10]
	
	
	[3-4-6-8-10-1]
	
Explicação:
Dada a Fila [3-4-6-8-10], executam-se os comandos na ordem: insere(1), insere(2), remove().  ?
Temos 3-4-6-8-10 e com a 1a. insere teremos 3-4-6-8-10 - 1
Com a segunda insere teremos 3-4-6-8-10- 1-2
E quando remover um valor, sairá o 1o. da fila. Então, a fila ficará assim : 4-6-8-10- 1-2
	
	
	
	 
		
	
		7.
		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:
	
	
	
	Um vetor não pode ser usado na implementação de uma fila sequencial apenas em pilhas sequenciais.
	
	
	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.
	
	
	A estrutura fila não sofre esgotamento de memória, isto ocorre com as pilhas já que implementam o algoritmo LIFO.
	
	
	Um vetor é uma estrutura base correta para esta implementação, já que está imune a fenômenos como esgotamento de memória.
	
	
	A estrutra sofrerá do fenômeno esgotamento de memória, mas se os dados estiverem ordenados isto não afetará a estrutura.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		Um conjunto ordenado de itens a partir do qual podem ser eliminados itens em uma extremidade e no qual podem ser inseridos itens na outra extremidade é denominado de
	
	
	
	lista simples.
	
	
	fila.
	
	
	pilha.
	
	
	lista encadeada.
	
	
	árvore.
Aula 8
		1.
		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); }
	
	
	
	5
	
	
	-2
	
	
	Nenhuma das anteriores. O programa possui um erro de sintaxe.
	
	
	2
	
	
	8
	
Explicação:
Analisando passo a passo : 
int main() {
int x, *p, y;
x = 2;
p = &x;   // p aponta para x, sendo que x recebeu 2
y = *p;   //y recebeu o conteúdo da área apontada por p, ou seja, y recebeu *p que é 2
y = 5;   //y recebeu 5
(*p)++;  //A área apontada por p recebeu 3 Ou seja, x recebeu 3
(*p) = (*p) - y;   //*p, que é x recebeu 3 - 5. Ou seja, *p recebeu -2
return(0);
}
Como p aponta para x e *p recebeu -2, então x recebeu -2
	
	
	
	 
		
	
		2.
		 
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 *lista=aux;
while(aux->prox)aux=aux->prox; 
	
	
	nodo *aux=lista;
while(aux)aux->prox=aux; 
	
	
	nodo *aux=lista;
while(aux->prox)aux=aux->prox; 
	
	
	nodo *aux=lista;
while(aux->prox)aux->prox=aux->prox;
	
	
	nodo *aux=lista;
while(lista->prox)aux=aux->prox;
	
Explicação:
nodo *aux=lista;
while(aux->prox)aux=aux->prox; 
	
	
	
	 
		
	
		3.
		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;
	
	
	no->chave = new int;
	
	
	no->proximo = -10;
	
	
	no.proximo = no;
	
	
	no.chave = 5;
	
Explicação:
Analisando cada item :
	 
	no.chave = 5;
	>> Como no é ponteiro então temos que usar a seta para acessar os campos da área apontada por no.
	 
	no->proximo = -10;
	>> O campo proximo é de ponteiro então não pode receber inteiro.
	 
	no->chave = new int;
	>> O campo chave é de inteiro então não deve receber endereço de inteiro.  O operador new aloca memória e retorna o endereço da área alocada.
	 
	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.no.proximo = no;
>> Incorreto porque não pode se pode usar o ponto para acessar campo de struct apontada pelo ponteiro no.
	
	
	
	 
		
	
		4.
		Para simular uma lista encadeada simplesmente pode se utilizar as estruturas de ponteiros. Como pode ser definida uma estrutura do tipo ponteiro?
	
	
	
	Um objeto que não contém endereço de memória.
	
	
	Um objeto que contém um endereço de memória.
	
	
	Uma estrutura utilizada apontar erros de operações.
	
	
	Um objeto que armazena dado diretamente na memória.
	
	
	Uma estrutura que aponta para um objeto de arquivo.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		5.
		Sobre listas encadeadas, é INCORRETO afirmar que:
	
	
	
	são acessadas pelo primeiro nodo da lista;
	
	
	possuem tamanho fixo;
	
	
	o final da lista faz uma referência para NULL;
	
	
	pilhas e filas são versões limitadas de listas encadeadas, pois as inserções e remoções não ocorrem em qualquer parte.
	
	
	a memória é alocada dinamicamente;
	
Explicação:
Uma lista encadeada não tem tamanho fixo, pois usa-se alocação e desalocação dinâmica de memória.  As demais afirmativas estão corretas.
	
	
	
	 
		
	
		6.
		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.
	
	
	
	pont.salario=5000.00;
	
	
	salario=5000.00;
	
	
	pont->empregado->salario=5000.00;
	
	
	pont.empregado.salario=5000.00
	
	
	pont.empregado->salario=5000.00;
	
Explicação:
Criar a entrada:
salario=5000.00;
	
	
	
	 
		
	
		7.
		Marque a afirmativa que represente uma separação.
	
	
	
	Organizar os dados da lista em ordem crescente ou decrescente.
	
	
	Juntar duas listas, colocando uma lista no final de outra, obtendo, ao final, uma só lista resultante.
	
	
	Alterar a ordem dos dados da lista do final para o início, atualizando a lista.
	
	
	Intercalar a ordem dos dados da lista do final para o início, atualizando a lista.
	
	
	Consiste em dividir a lista em duas outras listas. A quantidade de nós que cada lista terá, depende da necessidade.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		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
	
	
	O conteúdo da variável a será impresso
	
	
	Nenhuma das opções anteriores
	
	
	O endereço da variável a será impresso
	
	
	O conteúdo da variável p será impresso
		1.
		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 tanto em tempo de execução quanto em tempo de compilação, mas não podem ter seus tamanhos alterados de acordo com a demanda.
	
	
	As estruturas dinâmicas são assim chamadas, pois não podem fazer alocação de memória em tempo de execução, mas mesmo assim conseguem ter seus tamanhos alterados de acordo com a demanda.
	
	
	As estruturas dinâmicas são assim chamadas, pois podem fazer alocação de memória em tempo de compilação e terem seus tamanhos alterados de acordo com a demanda.
	
	
	As estruturas dinâmicas são assim chamadas, pois podem fazer alocação de memória em tempo de compilação e entretanto seus tamanhos só são alterados na codificação de acordo com a demanda.
	
	
	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.
	
	
	
	 
		
	
		2.
		E C++, quando um ponteiro é declarado para uma struct, o acesso aos campos deste registro (struct) se dá pelo operador :
	
	
	
	-> (seta).
	
	
	, (vírgula).
	
	
	& (e comercial ou eitza).
	
	
	* (asterisco).
	
	
	∙ (ponto).
	
Explicação:
Por definição, o operador é o seta, pois se tem, no caso, ponteiro para struct. 
	
	
	
	 
		
	
		3.
		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:
 
	
	
	
	9 100 200
	
	
	100 100 200
	
	
	100 9 200
	
	
	9 9 200
	
	
	200 9 100
	
Explicação:
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
	
	
	
	 
		
	
		4.
		Numa Lista Encadeada, podemos afirmar que:
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
	
	
	I, II, III e IV estão corretas
	
	
	I , II e III estão corretas
	
	
	I, III e IV estão corretas
	
	
	Só a II está correta
	
	Gabarito
Coment.
	
	
	
	 
		
	
		5.
		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->próximo->valor=5.60;
	
	
	pt->valor=5.60;
	
	
	pt->próximo.valor=5.60;
	
	
	pt->5.60;
	
	
	pt.valor->5.60;
	
Explicação:
O codigo será:
pt->valor=5.60;
	
	
	
	 
		
	
		6.
		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;
	
	
	p = &matricula;
	
	
	char *p;
	
	
	p->matricula = 20170562;
	
	
	p.matricula = 20170562;
	
Explicação:
 
Analisando na sequência :
  Falsa. Declara um ponteiro para char.
  Falsa. Acessa o campo de uma struct apontada por um ponteiro p.
 Falsa. Acessa o campo de uma struct, sem usar ponteiro.
Verdadeira. Faz um ponteiro p receber o endereço de uma variável matricula.
 Falsa.  ACessa a área apontada por um ponteiro e atribui o valor de matricula.
	
	
	
	 
		
	
		7.
		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.
Assinale a alternativa que informa as afirmativas corretas.
	
	
	
	Somente a afirmativa iii esta correta.
	
	
	Todas as afirmativas estão incorretas.
	
	
	Todas as afirmativas estão corretas.
	
	
	Somente a afirmativa i esta correta.
	
	
	Somente as afirmativas i eii estão corretas.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		Assumindo que um valor do tipo inteiro ocupa 4 bytes na memória, e se baseando nas linhas de código abaixo, marque a alternativa correta:
int *p;
p = (int *)malloc(20*sizeof(int));
	
	
	
	Atribuição ao ponteiro ¿p¿ de um endereço estático de memória
	
	
	Alocação dinâmica de espaço de memória suficiente para armazenar 20 x 4 valores inteiros
	
	
	A operação é inválida
	
	
	Alocação dinâmica de 80 bytes na memória
	
	
	Alocação dinâmica 20 bytes na memória
Aula 9
		1.
		A pilha é uma estrutura de dados que permite a inserção/ remoção de itens dinamicamente seguindo a norma de último a entrar, primeiro a sair. Suponha que para uma estrutura de dados, tipo pilha, são definidos os comandos:
- PUSH (p, n): Empilha um número "n" em uma estrutura de dados do tipo pilha "p";
- POP (p): Desempilha o elemento do topo da pilha.
Considere que, em uma estrutura de dados tipo pilha p, 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.
	
	
	11 e 80.
	
	
	7 e 40.
	
	
	4 e 80.
	
	
	7 e 29.
	
Explicação:
Passo a Passo:
entra 10 // 10
entra 5 // 5 / 10
entra 3 // 3 / 5/ 10
entra 40 // 40 / 5 /10
retira 40 // 3 / 5 /10
entra 11 // 11 / 3 / 5 /10
entra 4 // 4 /11 / 3 / 5 /10
entra 7 // 7 / 4 / 11 / 3 / 5 /10
retira 7 // 4 / 11 / 3 / 5 /10
retira 4 // 11 / 3 / 5 / 10
Resultado da pilha: 11 / 3 / 5 / 10
Topo: 11
Somatorio da pilha é: 29
	
	
	
	 
		
	
		2.
		Sobre as estruturas de dados existentes podemos afirmar que:
	
	
	
	Na estrutura das Pilhas a manipulação dos dados sempre se dá no topo.
	
	
	Encadeamento estático e dinâmico apresentam o mesmo funcionamento de alocação na estrutura do tipo PILHA.
	
	
	Na estrutura do tipo LIFO, as informações são inseridas no início e removidas do final.
	
	
	A estrutura do tipo LIFO sempre realiza a remoção do elemento mais antigo inserido.
	
	
	Na estrutura do tipo FIFO, as informações são inseridas no início e removidas do final.
	
Explicação:
	
	Na estrutura do tipo FIFO, as informações são inseridas no início e removidas do final.
	Falso.  Fila segue a lógica FIFO, ou seja, o primeiro a entrar será o primeiro a sair. Logo, insere no fim e retira do início da fila.
	
	Na estrutura do tipo LIFO, as informações são inseridas no início e removidas do final.
	Falso.  Pilha segue a lógica LIFO, o último a entrar será o primeiro a sair.  Insere-se no topo   e retira-se do topo , ou seja, da mesma extremidade.
	
	Na estrutura das Pilhas a manipulação dos dados sempre se dá no topo.
	Verdade. SEgue-se a lógica LIFO.
	
	Encadeamento estático e dinâmico apresentam o mesmo funcionamento de alocação na estrutura do tipo PILHA.
	Falso.  No encadeamento estático a alocação é contígua e ocorre antes da execução.  No encadeamento dinâmico a alocação de memória ocorre em tempo de execução e o armazenamento é encadeado.
	
	A estrutura do tipo LIFO sempre realiza a remoção do elemento mais antigo inserido.
 
	
	
Falso.  A remoção se dá no último inserido, ou seja, o mais novo inserido na pilha.
 
 
	
	
	
	 
		
	
		3.
		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;
	
	
	no p -> new no;
	
	
	p *no=new no;
	
	
	no *p -> new no;
	
	
	p *no -> new no;
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		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;         
}
	
	
	
	RemoveNo
	
	
	InsereNoFrente
	
	
	BuscaNaLista
	
	
	InsereNoFim
	
	
	ListaNo
	
	Gabarito
Coment.
	
	
	
	 
		
	
		5.
		Sobre uma estrutura de dados do tipo LIFO, observe as seguintes afirmações: 
(1) É uma pilha. 
(2) Pode ser uma fila com prioridades 
(3) É uma estrutura onde o primeiro elemento a entrar é o último a sair.
Sobre estas afirmações marque a opção correta:
	
	
	
	Todas as afirmações são falsas
	
	
	Todas as afirmações são verdadeiras
	
	
	Apenas a afirmação (3) é verdadeira
	
	
	Apenas as afirmações (1) e (3) são verdadeiras
	
	
	Apenas a afirmação (1) é verdadeira
	
	
	
	 
		
	
		6.
		Em termos da estrutura de dados do tipo FILA  (fila encadeada com alocação dinâmica), a sequência de ações
             insere(10), insere(3), insere(5), insere(8), remove(), remove(), insere(20),
promoveria a configuração da estrutura:
	
	
	
	10 3 5 8 20
	
	
	5 8 20
	
	
	5 8
	
	
	10 3 20
	
	
	20 5 8
	
Explicação:
 insere(10), insere(3), insere(5), insere(8), remove(), remove(), insere(20),
10-> 3 -> 5 -> 8 após inserir 10,3,5 e 8. Inserção no fim
Depois do 1o. remove, temos 3->5->8
Depois do 2o. remove temos 5 -> 8
Ao ocorrer o último insere temos  : 5 -> 8 - > 20, sendo que 5 esta no início e 20 no fim
	
	
	
	 
		
	
		7.
		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)
	
	
	
	III está correta
	
	
	III e V estão corretas
	
	
	I e II estão corretas.
	
	
	IV e V estão corretas.
	
	
	I e IV estão corretas
	
	Gabarito
Coment.
	
	
	
	 
		
	
		8.
		Assinale a característica que NÃO está relacionada às estruturas de dados encadeadas:
	
	
	
	A memória para armazenar seus elementos é, em geral, alocada com o uso de new.
	
	
	Em geral, marca-se o último elemento com um ponteiro de valor NULL.
	
	
	A memória ocupada por seus elementos é, em geral, liberada com o uso de delete.
	
	
	Consomem memória de maneira permanente, só sendo liberadas ao fim do programa.
	
	
	Cada elemento guarda pelo menos um ponteiro para outro elemento da estrutura.
	
		1.
		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; 
}; 
	
	
	
	Basta alocar memória com new e armazenar o resto da divisão do número por 2 no campo dado do novo nó .
	
	
	Basta alocar memória com new, armazenar o resto da divisão do número por 2 no campo dado do novo nó e aterrar o link do novo nó.
	
	
	Não é necessário alocar memória com new. Basta criar uma struct do tipo no, armazenar o resto da divisão número por 2 no campo dado e aterrar o campo link.
	
	
	É preciso armazenar o resto da divisão do número por 2 no campo dado do primeiro nó da lista e retornar o ponteiro para este nó.
	
	
	É 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ó.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		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 últimonó 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 != null)pt=pt->próximo;
	
	
	while(próximo)pt=próximo;
	
	
	while(pt->próximo->proximo)pt=pt->próximo;
	
	
	while(pt->próximo)pt=pt->próximo;
	
	
	while(pt->próximo != null)pt=pt->próximo->proximo;
	
Explicação:
O código será:
while(pt->próximo)pt=pt->próximo;
	
	
	
	 
		
	
		3.
		Assinale a opção correta.  Sobre pilha dinâmica podemos afirmar que :
	
	
	
	é recomendada para qualquer tipo de aplicação em que insere-se no final e retira-se do início.
	
	
	usa o critério LIFO e é implementada usando-se listas encadeadas.
	
	
	insere-se em qualquer posição, antes ou após qualquer nó, visto que é dinâmica.
	
	
	só pode ter seus dados impressos no sentido do último nó para o primeiro nó.        
	
	
	usa o critério FIFO, visto que é dinâmica.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		4.
		Sobre uma estrutura de dados do tipo LIFO, observe as seguintes afirmações: 
(1) É uma pilha. 
(2) Pode ser uma fila com prioridades 
(3) É uma estrutura onde o primeiro elemento a entrar é o último a sair.
Sobre estas afirmações marque a opção correta:
	
	
	
	Apenas as afirmações (1) e (3) são verdadeiras
	
	
	Apenas a afirmação (3) é verdadeira
	
	
	Todas as afirmações são falsas
	
	
	Todas as afirmações são verdadeiras
	
	
	Apenas a afirmação (1) é verdadeira
	
	
	
	 
		
	
		5.
		Em termos da estrutura de dados do tipo FILA  (fila encadeada com alocação dinâmica), a sequência de ações
             insere(10), insere(3), insere(5), insere(8), remove(), remove(), insere(20),
promoveria a configuração da estrutura:
	
	
	
	10 3 20
	
	
	5 8 20
	
	
	5 8
	
	
	10 3 5 8 20
	
	
	20 5 8
	
Explicação:
 insere(10), insere(3), insere(5), insere(8), remove(), remove(), insere(20),
10-> 3 -> 5 -> 8 após inserir 10,3,5 e 8. Inserção no fim
Depois do 1o. remove, temos 3->5->8
Depois do 2o. remove temos 5 -> 8
Ao ocorrer o último insere temos  : 5 -> 8 - > 20, sendo que 5 esta no início e 20 no fim
	
	
	
	 
		
	
		6.
		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.
	
	
	III e V estão corretas
	
	
	III está correta
	
	
	I e IV estão corretas
	
	
	I e II estão corretas.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		7.
		Assinale a característica que NÃO está relacionada às estruturas de dados encadeadas:
	
	
	
	Consomem memória de maneira permanente, só sendo liberadas ao fim do programa.
	
	
	Cada elemento guarda pelo menos um ponteiro para outro elemento da estrutura.
	
	
	A memória ocupada por seus elementos é, em geral, liberada com o uso de delete.
	
	
	A memória para armazenar seus elementos é, em geral, alocada com o uso de new.
	
	
	Em geral, marca-se o último elemento com um ponteiro de valor NULL.
	
	
	
	 
		
	
		8.
		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;         
}
	
	
	
	ListaNo
	
	
	InsereNoFim
	
	
	BuscaNaLista
	
	
	RemoveNo
	
	
	InsereNoFrente
Aula 10
		1.
		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 inserem novo nodo, após o nodo apontado pelo ponteiro p.
	
	
	As operações possibilitam o percurso do ponteiro p da esquerda para direita.
	
	
	As operações possibilitam o percurso do ponteiro p da direita para esquerda.
	
	
	As operações removem o nodo apontado pelo ponteiro p.
	
	
	As operações possibilitam a busca de um nodo apontado pelo ponteiro p.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		Em uma lista linear duplamente encadeada.
	
	
	
	Além do campo relativo ao dado, cada nó possui dois ponteiros.
	
	
	Cada ponteiro possui um só endereço que referencia o primeiro nó da lista.
	
	
	O ponteiro do "primeiro" nó não é NULL, mas sim aponta de volta para o "primeiro" nó da lista, formando um ciclo.
	
	
	O ponteiro do "último" nó não é NULL, mas sim aponta de volta para o "primeiro" nó da lista.
	
	
	Cada nó possui um só ponteiro que referencia o próximo nó da lista.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		3.
		As estruturas de dados lineares (fila, pilha e lista) são muito utilizadas para resolver problemas computacionais. Cada uma dessas estruturas pode ser implementada com diferentes características e atendem a diferentes tipos de problemas. Sobre as características dessas estruturas de dados, atribua V (verdadeiro) ou F (falso) para as afirmativas a seguir. - Em uma pilha, o último elemento a entrar é o primeiro a sair. - Em uma fila, o primeiro elemento a entrar é o último a sair. - Uma lista permite que as inserções possam ser feitas em qualquer lugar (posição), mas as remoções, não. - Em uma lista circular com encadeamento simples, o primeiro elemento aponta para o segundo e para o último. - Para remover um elemento de uma lista duplamente encadeada, deve-se alterar o encadeamento dos elementos anterior e próximo ao elemento removido. Assinale a alternativa que contém, de cima para baixo, a sequência correta:
	
	
	
	F, V, V, F, F.
	
	
	V, F, F, V, F.
	
	
	F, F, V, V, V.
	
	
	V, F, V, F, V.
	
	
	V, F, F, F, V.
	
Explicação:
Analisando cada afirmativa :
Em uma pilha, o último elemento a entrar é o primeiro a sair.
Resposta : Verdadeiro. Segue a lógica LIFO.
- Em uma fila, o primeiro elemento a entrar é o último a sair.
Resposta : Falso. O primeiro a entrar é o primeiro a sair.
- Uma lista permite que as inserções possam ser feitas em qualquer lugar (posição), mas as remoções, não.
Resposta : FAlso. Tanto inserções quanto remoções podem ocorrer em qualquer posição
- Em uma lista circular com encadeamento simples, o primeiro elemento aponta para o segundo e para o último.
Resposta : Falso. O link do último nó aponta para o 1o. nó da lista.
- Para remover um elemento de uma lista duplamente encadeada, deve-se alterar o encadeamento dos elementos anterior e próximo ao elemento removido.
Resposta : Verdadeiro
 
Logo, a resposta certa é V - F- F - F - V
	
	
	
	 
		
	
		4.
		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.
	
	
	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 circular é toda lista, independente do tipo de alocação, em que é formado um ciclo entre seus elementos. Por exemplo, quando o últimoelemento da lista aponta para o primeiro.
	
	
	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 simplesmente encadeada é adequada para a resolução de problemas em que os elementos da lista devem ser percorridos em apenas uma direção.
	
Explicação:
Analisando cada item.
	>> 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.
	      Afirmativa correta, que segue a definição de lista duplamente encadeada.  Não marcar o item.
	 >> 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.
	 
	     Afirmativa correta.  Em uma lista simplesmente encadeada existe ponteiro para o início da lista. Por isso, não dá para percorrer tal lista  do fim para o início.  Nâo marcar o item.
	>> 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.
	 
	     Afirmativa correta. O vetor pode até ser dinâmica, mas usualmente usa alocação estática de memória e é o recurso usado na implementação das listas sequenciais. Não marcar o item.
	>> 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.
	 
	     Afirmativa correta. 
	>> 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.
      Afirmativa falsa porque as listas encadeadas não ocupam menos espaço que as listas sequencias. Cada nó de uma lista simplemente encadeada, por exemplo, tem um campo de dado e um campo que é ponteiro.
Marcar esta afirmativa.
	 
	
	
	
	 
		
	
		5.
		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 duplamente encadeada cada nó aponta para nó seguinte e para o primeiro nó da fila.
	
	
	Em uma lista simplesmente encadeada cada nó aponta para nó seguinte e para o nó anterior.
	
	
	Em uma lista duplamente encadeada, cada nó aponta para um nó enquanto a lista simplesmente encadeada aponta para mais de um nó.
	
	
	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 duplamente encadeada cada nó aponta para nó seguinte.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		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; 
Assinale a alternativa que apresenta o protótipo dessa função
	
	
	
	listaDE *insereFim(listaDE *LISTA, int valor);
	
	
	void exibeIpF(listaDE *LISTA);
	
	
	listaDE *remove(listaDE *LISTA, int valor);
	
	
	listaDE *busca (listaDE *LISTA, int valor);
	
	
	listaDE *insereInicio(listaDE *LISTA, int valor); 
	
	Gabarito
Coment.
	
	
	
	 
		
	
		7.
		Um tipo de estrutura de dados é declarada em C como:
typedef struct no *apontador;
       struct no{
       int valor;
       apontador esq, dir;
}
onde esq e dir representam ligações para os dados da esquerda e direita, respectivamente. Qual das seguintes alternativas é uma implementação correta da operação que inverte as posições dos dados da esquerda e da direita uma estrutura p, onde t é um apontador auxiliar.
	
	
	
	t=p->dir;
p->dir = p->esq;
p->esq = t;
	
	
	p->dir=t;
p->esq = p->dir;
p->dir = t;
	
	
	t=p;
p->esq = p->dir;
p->dir = p->esq;
	
	
	p->esq = p->dir;
t = p->esq;
p->dir = t;
	
	
	t=p->dir;
p->esq = p->dir;
p->dir = t;
	
Explicação:
O código pedido é:
t=p->dir;
p->dir = p->esq;
p->esq = t;
	
	
	
	 
		
	
		8.
		Uma estrutura de dados em lista duplamente encadeada permite na cadeia movimentos para:
	
	
	
	frente e para trás, apenas.
	
	
	trás, apenas.
	
	
	cima e para baixo, apenas.
	
	
	frente, apenas.
	
	
	cima e para baixo ou para frente e para trás.
		1.
		Com relação à lista duplamente encadeada, é correto afirmar que :
	
	
	
	Consome  menos memória do que uma lista simplesmente encadeada, se tivermos uma mesma aplicação.
	
	
	Não pode haver remoções no meio da lista.
	
	
	A lista pode ser  percorrida com igual facilidade para a direita ou para a esquerda, pois existem dois ponteiros.
	
	
	          A lista precisa ter sempre um ponteiro apontando para o 1º. nó
	
	
	Não pode ser vazia.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		2.
		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.
	
	
	Só poderei inserir no final da lista e nunca no começo ou no meio.
	
	
	Só poderei inserir no final da lista e no começo somente se ela estiver cheia.
	
	
	Só poderei inserir no final da lista e no começo somente se ela estiver vazia.
	
	
	Só poderei inserir no começo ou no fim, mas não no meio.
	
Explicação:
Em uma lista duplamente encadeada circular ou não, podemos inserir ou remover de qualquer parte da lista. Não há problema na inserção se a lista estiver vazia.   
	
	
	
	 
		
	
		3.
		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______.
	
	
	
	Declaração de vetor
	
	
	Alocação estática de memória
	
	
	Declaração de função
	
	
	Declaração de matriz
	
	
	Alocação dinâmica de memória
	
Explicação:
Se for necessário liberar a memória ocupada por essas variáveis, é preciso recorrer à função free.
A função free desaloca a porção de memória alocada por malloc.
A instrução free (ptr) avisa ao sistema que o bloco de bytes apontado por ptr está disponível para reciclagem.
	
	
	
	 
		
	
		4.
		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. A sequência correta de cima para baixo:
	
	
	
	V,F,V,F,V
	
	
	F,V,V,F,F
	
	
	V,F,F,V,F
	
	
	V,F,F,F,V
	
	
	F,F,V,V,V
	
Explicação:
Vamos analisar cada afirmativa.
Analisando a afirmativa I : Correto, pois a estrutura pilha segue a lógica LIFO.
 
Analisando a afirmativa II : Falso. Na estrutura de dados fila, o primeiro a entrar é o primeiro a sair, pois segue a lógica FIFO.
 
Analisando a afirmativa III : Falso. Em uma lista tanto as inserções quanto as remoções podem ser feitas em qualquer posição.
 
Analisando a afirmativa IV : Falso. Em uma lista circular, o1o. elemento aponta para o segundo elemento, mas o último elemento aponta para o 1º. elemento da lista.
 
Analisando a afirmativa V :  Está correta.
 
Logo, a opção correta é V, F, F, F, V5.
		Uma estrutura de dados em lista duplamente encadeada permite na cadeia movimentos para
	
	
	
	cima e para baixo, apenas.
	
	
	frente e para trás, apenas.
	
	
	frente, apenas.
	
	
	trás, apenas.
	
	
	cima e para baixo ou para frente e para trás.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		6.
		 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.
	
	
	Y, antes do Z, e X, logo após o Z.
	
	
	X, antes do Z, e Y, logo após o Z.
	
	
	Y, antes do Z, e X, antes do Y.
	
	
	X, logo após o Z, e Y, logo após o X.
	
	Gabarito
Coment.
	
	
	
	 
		
	
		7.
		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 inserem novo nodo, após o nodo apontado pelo ponteiro p.
	
	
	As operações possibilitam o percurso do ponteiro p da direita para esquerda.
	
	
	As operações possibilitam o percurso do ponteiro p da esquerda para direita.
	
	
	As operações removem o nodo apontado pelo ponteiro p.
	
	
	As operações possibilitam a busca de um nodo apontado pelo ponteiro p.
	
	
	
	 
		
	
		8.
		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;
	
	
	
	Fila
	
	
	Lista encadeada
	
	
	Matriz
	
	
	Pilha
	
	
	Lista duplamente encadeada

Outros materiais