Baixe o app para aproveitar ainda mais
Prévia do material em texto
AULA 1 1. Qual a diferença entre dado e informação? Você acertou! A. Dados não têm significado de forma isolada e servem de base para a informação. A informação é fruto do processamento dos dados. Os dados não têm significado relevante de maneira isolada e são considerados fundamentos da informação. A informação consiste na ordenação e na organização dos dados, para que seja possível compreender o seu significado, ou seja, ela é fruto do processamento dos dados. 2. O que é um índice? Resposta correta. B. É uma referência utilizada normalmente em estrutura de dados, que facilita o trabalho quando é feita uma consulta que envolve vários dados. Um índice é um tipo de referência, normalmente utilizado quando se trabalha com estruturas de dados, que serve para otimizar localizações de registros em consultas com muitos dados. 3. Qual a diferença entre estruturas de dados homogêneos e heterogêneos? Você acertou! E. Estruturas de dados homogêneas armazenam o mesmo tipo de dados, e estruturas heterogêneas armazenam tipos de dados diferentes. Quando uma estrutura de dados armazena elementos de tipos diferentes, é dito que é uma estrutura de dados heterogênea. Já uma estrutura de dados que armazene somente um tipo de dados é conhecida, então, como dados homogêneos. Os dados homogêneos são representados pelos vetores, ou estruturas de dados unidimensionais, e pelas matrizes, estruturas de dados bidimensionais. 4. Quais são as estruturas de dados que representam o tipo de estrutura de dados homogêneos? Você acertou! D. Vetores e matrizes. As estruturas de dados homogêneos são representadas pelos vetores, ou estruturas de dados unidimensionais, e pelas matrizes, estruturas de dados bidimensionais. 5. Por que um vetor é uma estrutura unidimensional, e uma matriz é uma estrutura bidimensional? Resposta correta. C. Porque o vetor armazena dados de forma sequencial, e a matriz armazena dados dispostos em linhas e colunas. O vetor é uma estrutura unidimensional porque armazena dados em uma dimensão só, de forma sequencial. A matriz é considerada uma estrutura bidimensional porque é formada de vários vetores, ou seja, armazena dados em linhas e colunas. AULA 2 1. Assinale a alternativa que representa corretamente o conceito de registro. Você acertou! A. É um tipo de dado construído, que pode ser composto por variáveis de diferentes tipos. É um agrupamento de variáveis relacionadas entre si, que constitui um tipo de dado composto e heterogêneo, formado por variáveis de diferentes tipos, que podem ser primitivas ou de outros registros. Um registro não tem índice como um vetor. 2. Considerando a seguinte estrutura que representa um registro de livro na linguagem C, marque a alternativa que declara corretamente um vetor 1000 posições deste registro. typedef struct { char isbn; char titulo[50]; char autor[50] float preco; int paginas; } Livro; Você acertou! C. Livro livro[1000]; Na linguagem C, é preciso informar o tipo de dado da variável antes de seu nome. Sendo “Livro” um tipo de dado composto construído, a forma correta de declarar um vetor de “Livro” é Livro livro[1000], em que “livro” (com letras minúsculas) pode ser qualquer expressão válida para o nome de uma variável. 3. Considerando um vetor de registros de uma estrutura nomeada como “aluno”, que tem o atributo “nome” como uma variável do registro, indique a alternativa que representa a forma correta de atribuição de “Joao” para essa variável na posição 1 do vetor, com base na linguagem C. typedef struct { long matricula; char nome[50]; int turma; } aluno; aluno a1[100]; Você acertou! C. strcpy(a1[1].nome, “Joao”); A forma correta, com base na linguagem C, para atualizar a variável “nome” do vetor de registros “a1” na posição 1 é strcpy(a1[1].nome, “Joao”). O indicador do vetor deve ficar ao lado da variável do vetor “a1” e não da variável que pertence ao registro “nome”. O uso da função strcpy é necessário porque a variável "nome" é uma cadeia de caracteres e não pode ser atribuída diretamente a uma variável do tipo array de char. 4. Analise o seguinte código baseado na linguagem C e marque a alternativa que representa o objetivo da função xxxxx. typedef struct { long matricula; int turma; } Aluno; Aluno aluno[100]; void xxxxx(long matricula, int turma) { int i; for (i= 0; i < 100; i++) { if (aluno[i].matricula == matricula) aluno[i].turma= turma; return 1; } } Return 0; } Você acertou! B. Alterar um registro a partir da matrícula que é passada por parâmetro. A função apresentada visa alterar o registro de um aluno a partir de sua busca no vetor de registros com base na matrícula que é passada por parâmetro. A função retorna 1 se houve a alteração e 0 caso o registro não seja encontrado no vetor. 5. Sendo um vetor de registros uma estrutura fixa, que reserva espaço na memória para a quantidade de elementos informados na sua declaração, o que é preciso fazer antes de utilizá-lo, visando manter a confiabilidade de dados para incluir, alterar e excluir registros? Você acertou! A. Inicializar o vetor com valores padrões, que devem ser diferentes dos dados que serão armazenados. Para um cadastro de vetor de registros, é recomendado inicializar todas as posições com valores padronizados que sejam diferentes dos dados que serão armazenados. Isso faz com que o sistema possa identificar quais posições estão livres para incluir dados e quais estão ocupadas para que possam ser alteradas. Além disso, faz com que o sistema atue na limpeza de possíveis sujeiras de memória que possam ocupar alguma posição no momento de sua criação. AULA 3 1. De acordo com a imagem, quais os valores de x e y ao fim da execução de código? Resposta correta. B. x= 3 e y = 4 Como armazena o conteúdo da variável apontada por p, x começa com 0 assim como y. Logo em seguida, é atribuído o valor 4 à variável x e y é modificado, pois o conteúdo apontado por p é incrementado, linha 10. Ao se decrementar o valor de x e fazer com que o conteúdo apontado da variável e apontada por p receba o valor existente acrescido do valor de x, chegamos aos valores x= 3 e y =4. 2- Qual o erro existente no seguinte código-fonte? Você acertou! B. Na linha 7, não pode ser atribuído a um ponteiro o valor de uma variável a. A variável b é um ponteiro, portanto ela deve armazenar o endereço da variável a, com a seguinte instrução b=&a. 3 - O seguinte código deve alocar dinamicamente o espaço para um vetor de inteiros. A quantidade de elementos do vetor é definida pela variável num_componentes. Qual instrução deve ser inserida na linha 13 para que esse completo esteja correto? Você acertou! E. ptr = (int*) malloc(num_componentes * sizeof(int)); Para alocar de forma dinâmica a memória para um vetor cujo tamanho é definido por uma variável, é possível usar a função malloc que tem a seguinte sintaxe: ponteiro= (tipo*)malloc(sizeof(tipo)) Como são necessários num_componentes espaços, basta adicionar essa variável e multiplicar pelo tamanho do tipo. 4- Assinale a opção correspondente ao resultado que será impresso para a variável valor, após a execução do trecho de código a seguir: Você acertou! A. Valor : 2007 Valor : 2008 Na linha 10, a variável a, que é um ponteiro, recebe o endereço da primeira posição do vetor. Na linha 11, são incrementadas duas posições do vetor, ou seja, agora o ano passa a apontar para a segunda posição do vetor. Na linha 13 é mostrado o conteúdo da variável apontada por esse ponteiro que é 2007, na linha 13. Na linha 14, o conteúdo da variável apontada por a é incremetnad, portanto, é impresso 2008. 5- Qual o resultado da execução do programa a seguir? Você acertou! B. 25 25 50 A varável pa é um ponteiro para inteiro que armazena o endereço da variável a. A variável b recebe o valor armazenado na variável apontada por pa acrescida do valor a. Assim a saída desse código é 25 25 50 . AULA 4 1. Considere o seguinte algoritmo em pseudocódigo e selecione a alternativa falsa. algoritmo "oquefaz" var valor : inteiroprocedimento faz(N : inteiro) inicio se (N=0) entao escreval(N) senao faz(N-1) escreval(N) fimse fimprocedimento inicio repita escreva("Digite: ") leia(valor) ate valor >= 0 faz(valor) fimalgoritmo Você acertou! D. O procedimento "faz" escreve o valor de N quando esse é igual a zero ou escreve o valor de N-1 quando N for maior que zero. O procedimento "faz" é recursivo. Conforme o valor de N que for passado como parâmetro, ele chama a si próprio diversas vezes, sendo que, a cada chamada, é reduzido o valor de N. Quando N chega a zero, escreve o valor e começa a retornar das chamadas recursivas. 2. Considere a implementação e o funcionamento de subprogramas (rotinas) recursivos. Analise as afirmativas a seguir e assinale a falsa. Resposta correta. E. Subprogramas recursivos não precisam ter condição de parada. Todo subprograma recursivo precisa ter uma condição de parada, pois ficará autochamando-se infinitamente até ocorrer stack overflow. 3. Analise as alternativas a seguir e selecione a que implementa corretamente um subprograma recursivo que calcula o somatório dos números inteiros no intervalo [1,N]. Você acertou! C. funcao Y(X :inteiro): inteiro inicio se X = 1 entao retorne (1) senao retorne(X + Y(X-1)) fimse fimfuncao A função Y recebe um valor inteiro; quando esse valor é 1, ela retorna 1, se não, ela retorna o valor de X + Y(X-1), calculando recursivamente o somatório. 4. Analise o seguinte subprograma em pseudocódigo: funcao M(X :inteiro): inteiro inicio se (X = 0) ou (X = 1) entao retorne (1) senao retorne(M(X-1)+M(X-2)) fimse fimfuncao As alternativas a seguir apresentam chamadas da função M e indicam o retorno conforme o valor passado como parâmetro. Selecione a alternativa correta. Você acertou! A. M(5) retornará o valor 8. M(7) = M(6) + M(5) = 21 M(6) = M(5) + M(4) = 13 M(5) = M(4) + M(3) = 8 M(4) = M(3) + M(2) = 5 M(3) = M(2) + M(1) = 3 M(2) = M(1) + M(0) = 2 M(1) = 1 M(0) = 1 5. Analise o seguinte algoritmo em pseudocódigo: algoritmo "oquefaz" var valor : inteiro funcao calcula(N : inteiro):real inicio se (N = 0) entao retorne(1) senao retorne((N / (N-1)) + calcula(N-1)) fimse fimfuncao inicio escreva("Digite Valor: ") leia(valor) escreval("Serie= ",serie(valor)) fimalgoritmo Considere que foi digitado 10 para a variável valor. Selecione a alternativa que representa corretamente a série implementada pela função calcula(valor). Resposta correta. C. Série = (1/1) + (2/1) + (3/2) + (4/3) + (5/4) + (6/5) + (7/6) + (8/7) + (9/8) + (10/9). Essa alternativa representa a série calculada pela função calcula quando o conteúdo da variável valor for 10. AULA 5 1. São métodos de ordenação simples que realizam o mesmo número de comparações, porém o primeiro realiza mais trocas que o segundo: Resposta correta. A. Bubblesort e Selectionsort. Os métodos de ordenação que realizam a mesma quantidade de comparações são Bubblesort e Selectionsort, sendo que o Bubblesort realiza mais trocas. Já o método Insertionsort realiza menos comparações. 2. Em relação ao método Bubblesort, assinale a alternativa correta: Você acertou! C. Realiza várias comparações e várias trocas a cada fase iterativa. O método Bubblesort realiza várias comparações e várias trocas a cada fase iterativa. O número de comparações não muda se o vetor estiver pré-ordenado, sendo ideal para vetores pequenos. 3. Assinale a alternativa que explica corretamente a técnica utilizada pelo método Selectionsort: Você acertou! D. Realiza várias comparações e apenas uma troca a cada fase iterativa. O método Selectionsort realiza várias comparações e apenas uma troca a cada fase iterativa. Sua técnica não reposiciona os elementos, apenas troca a posição de dois elementos, colocando o menor no lugar do maior, já na posição correta de classificação. Seu desempenho é melhor que o do Bubblesort porque realiza menos trocas e não pode ser considerado como uma variação do método bolha, visto que utiliza outra técnica. 4. Assinale a alternativa que representa as características do método de ordenação Insertionsort: Você acertou! B. Apresenta melhor desempenho que o Bubblesort e o Selectionsort em vetores pré-ordenados. 5. Indique a que método de ordenação simples se refere a seguinte explicação: "realiza a comparação de cada elemento do vetor com todos os elementos posteriores, com o objetivo de encontrar o menor valor para realizar apenas uma troca de posição a cada fase de iteração. Você acertou! C. Selectionsort. Os métodos de ordenação simples são Bubblesort, Selectionsort e Insertionsort. Contudo, o método Selectionsort é que realiza a ordenação de um vetor pela comparação de cada elemento com os demais subsequentes, com o objetivo de realizar apenas uma troca a cada fase iterativa. AULA 6 1. Que algoritmo de ordenação de dados utiliza um pivô, que é selecionado para dividir o vetor em dois outros? Você acertou! B. Quicksort. O funcionamento do Quicksort envolve basicamente a seleção de um pivô, e o vetor inicial passa a ser dividido em duas partições, separando todos os elementos maiores ou iguais ao pivô de um lado, ficando do outro lado os elementos menores que o pivô. 2. Em que consiste a estratégia da divisão e conquista? Você acertou! A. Dividir um problema maior em vários problemas menores, que serão resolvidos até que o problema inicial possa ser solucionado. A estratégia da divisão e conquista consiste em um projeto algorítmico que envolve dividir um problema maior, recursivamente, em outros problemas menores e solucioná-los até que o problema inicial possa ser resolvido. 3. Por que o algoritmo Mergesort tem esse nome? Você acertou! E. Por causa da mistura dos dois últimos vetores auxiliares, que é feita após o resultado da divisão do vetor inicial em pares e da sua ordenação, de forma recursiva, e da sua reunião em vetores auxiliares. O Mergesort, que significa ordenação por mistura, é chamado assim porque divide o vetor inicial em pares e os ordena, recursivamente, até quando for possível. Depois disso, ele começa a agrupá-los novamente, até que os dois últimos vetores são misturados para formar o vetor de resposta. 4. O que significa a recursividade na Ciência da Computação? Você acertou! C. Recursividade é a característica que uma função possui para fazer a chamada para si mesma. A recursividade é a característica que uma função, método ou sub-rotina possui para fazer a chamada para si mesma. É um artifício comum dos algoritmos baseados na estratégia de divisão e conquista, onde se divide um problema em problemas menores para poder resolvê-lo. 5. Os métodos de ordenação direta podem ser divididos em métodos simples e eficientes. Qual a diferença entre eles? Você acertou! E. Os métodos simples são melhores para ordenar listas pequenas e fazem mais comparações para ordenar o vetor. Já os métodos eficientes são melhores para ordenar listas grandes e fazem menos comparações para ordenar o vetor. Os métodos de ordenação simples são mais utilizados quando a lista de elementos a ser ordenada é pequena. Eles utilizam mais comparações e possuem códigos de programação menores, mais simplificados e mais fáceis de entender. O Selection Sort, o Insertion Sort e o Bubble Sort são exemplos de métodos simples. Já os métodos eficientes são mais recomendados quando a lista de elementos a ser ordenada é grande. Eles utilizam menos comparações mas, em compensação, precisam de um código de programação maior, mais complexo e mais detalhado para funcionar. O Quicksort e o Mergesort são exemplos e métodos eficientes. AULA 7 1. No contexto estrutura de dados, pilha é: Você acertou! C. Um tipo de lista linear em que o último elemento a ser inserido é o primeiro retirado. As pilhas são estruturas baseadas no princípio LIFO (last in, first out), no qual os dados que foram inseridos por último na pilha serão os primeiros removidos. 2. Em estruturas de dados, é encontrada a estrutura pilha. Avalie as assertivas abaixo e identifique a alternativa correta. I. Para excluir (remover ou desempilhar)o elemento da pilha, basta excluir o elemento para o qual aponta o ponteiro de início. Esta operação permite recuperar o dado no topo da pilha, e também removê-lo. II. Uma das possíveis utilizações de uma pilha é a implementação da sequência de desfazer (Ctrl + Z) de um editor de texto. III. Na estrutura pilha, o último elemento a entrar também é o último a sair. IV. Na pilha, as operações de exclusão e inclusão são realizadas na mesma extremidade, chamada topo. V. As operações de exclusão e inclusão são realizadas em qualquer parte da pilha. Assinale a alternativa correta: Você acertou! B. Somente a II e IV Uma das possíveis utilizações da pilha é a implementação da sequência de desfazer (Ctrl + Z) de um editor de texto. Na pilha, as operações de exclusão e inclusão são realizadas na mesma extremidade, chamada topo. 3. Assinale a opção correta relativa às operações básicas suportadas por pilhas. Você acertou! B. PUSH coloca um elemento no topo da pilha. Em estruturas de dados do tipo pilha, os elementos são colocados sempre no topo. 4. Considere os estados (inicial e final) da pilha a seguir, na qual top corresponde ao seu topo. Para atingir o estado final dessa pilha, deve-se usar a seguinte sequência de operações básicas: Você acertou! A. pop(), pop(), push(9), push(3). Primeiro foram removidos os dois últimos elementos da pilha, usando pop() e pop(), e após foram inseridos os números 9 e 3, usando o comando PUSH. 5. Considere que os itens W, X, Y, Z e K foram inseridos nessa ordem em uma pilha. Necessariamente, o último elemento é: Você acertou! E. K. O último elemento é K, pois foi o último a ser inserido, permanecendo no topo. AULA 8 1. Uma das estrutudas de dados utilizadas na programação de computadores funciona conforme o princípio conhecido como FIFO - First In First Out e LIFO - Last In First Out. Essas estruturas são denominadas, respectivamente: Resposta correta. E. Fila e pilha. Essas estruturas são denominadas, respectivamente, fila e pilha. 2. Suponha o seguinte cenário: Uma fila FIFO foi criada, e um nodo foi inserido a cada minuto, chegando a um total de dez elementos (dez minutos depois da criação da fila). A partir desse momento, decide-se remover um nodo. Qual deles será removido? Você acertou! A. O primeiro (inserido no minuto 1). O primeiro inserido, pois a fila utiliza FIFO: o primeiro a entrar é o primeiro a sair. 3. Considerando os conceitos de estrutura de dados, analise as afirmativas a seguir e marque verdadeiro (V) ou falso (F): ( ) As filas são utilizadas para controlar o acesso de arquivos que concorrem a uma única impressora. ( ) A pilha é uma estrutura de dados baseada no princípio LIFO, no qual os dados que foram inseridos primeiro na pilha serão os últimos a serem removidos. ( ) Para gerenciar processos, sistemas operacionais utilizam filas para organizar processos que aguardam processamento. Você acertou! A. V, V, V Filas são utilizadas no arquivo de Buffer da Impressora, pilhas são baseadas em LIFO, e sistemas operacionais utilizam as filas para gerenciar processos que aguardam processador. 4. 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 extremindade, é denominado: Você acertou! A. Filas É denominado Filas, pois em Pilhas a manipulação de itens acontece apenas no Topo. 5. Estrutura de Dados básicas como Fila são usadas em uma gama variada de aplicações computacionais. Marque a alternativa correta quanto a estas aplicações. Resposta correta. E. Buffer para gravação de dados em mídia. Buffer para gravação de dados em mídia utiliza de Filas, para manter a organização dos dados. AULA 9 1. Baseando-se no conceito de lista estática, marque a alternativa correta em relação à inclusão de elementos. Resposta correta. C. A inclusão de elementos pode ocorrer em qualquer posição da lista. Toda lista estática tem um limite máximo de itens, normalmente definido por um array. A inclusão pode ocorrer em qualquer posição da lista, mesmo uma que esteja ocupada. Nesse caso, deverá haver um reposicionamento dos itens para que nenhuma posição fique vazia. 2. Em relação às listas estáticas, leia as alternativas a seguir e indique a correta. Você acertou! B. Os itens estão dispostos em uma ordem sequencial, sem conter elementos nulos. Listas estáticas contêm um número fixo de elementos e os dispõem em uma ordem sequencial, não podendo ser redimensionadas em tempo de execução nem conter elementos nulos. São indicadas para listas pequenas, com poucos itens, e o custo computacional de acesso direto a determinada posição é uma vantagem, pois a lista é indexada. 3. Marque a alternativa correta em relação à interface de uma lista estática. Você acertou! C. Não existe uma definição de quais métodos devem ser implementados, embora alguns sejam esperados. Não existe uma definição de quais métodos devem ser implementados em uma lista estática, porém algumas funções são esperadas, como incluir e excluir itens, verificar se está cheia ou vazia e imprimir a relação de itens, sendo que o comportamento dessas funções pode ser diferente de pilhas e filas. No entanto, é uma característica importante a separação da estrutura de dados de sua implementação, uma vez que o programador não precisa conhecer os detalhes da implementação. 4. Analise o seguinte pseudocódigo baseado na linguagem C e marque a alternativa que representa o significado da função xxxxx. typedef struct { int dado[50]; //array de itens da lista int n; //total de elementos da lista } Lista; int xxxxx (Lista *L, int pos){ for (int i= pos; i <= (L->n)-1; i++) L->dado[i-1]= L->dado[i]; (L->n)--; } Você acertou! E. Remove o item da lista de posição igual a "pos" e reposiciona os demais. A função apresentada remove o item da lista de posição igual a “pos”, que é passada como segundo parâmetro, e realiza o reposicionamento dos demais itens, bem como decrementa o total de itens da lista. 5. Analise o seguinte código baseado na linguagem C indique a alternativa que o define. typedef struct { unsigned long CPF; char Ativo; } Documento; typedef struct { Documento Cadastro[1000]; int n; } Pessoas; Pessoas lista; Documento doc; Resposta correta. A. Define uma lista para armazenar 1000 elementos do tipo Documento. O código apresentado descreve uma lista do tipo Pessoas que armazena um TAD declarado como Documento. Isso significa que a lista é um array de 1000 elementos e que, em cada posição, será armazenado um item do tipo Documento, composto pelo número do CPF e da informação de atividade. AULA 10 1. Em relação às listas dinâmicas com encadeamento simples, leia as alternativas a seguir e indique a correta: Resposta correta. D. Alocam apenas a memória necessária para armazenar os elementos atuais da lista",serif">","sans-serif"">. Em uma lista dinâmica com encadeamento simples, cada elemento aponta apenas para o elemento posterior da cadeia, cuja pesquisa é sequencial e em um único sentido, não permitindo acesso direto a determinado componente, sem ter que percorrer a lista a partir do início. Por ser dinâmica, aloca apenas a memória necessária para armazenar os itens atuais da lista. 2. Baseando-se no conceito de lista dinâmica encadeada simples, marque a alternativa correta: Você acertou! B. Cada elemento possui um atributo do tipo ponteiro da lista, usado para referenciar o próximo elemento. Uma lista dinâmica encadeada simples não possui um limite máximo de itens, pois a alocação é feita em tempo de execução. Deve, ainda, permitir a inclusão em qualquer posição da lista, tanto para estruturas como para tipos primitivos, que farão a nova ligação a fim de manter a lista encadeada. O último item da lista deve apontar para NULL e cada elemento tem um atributo do tipo ponteiro da lista, que referencia o próximo elemento. 3. Analise o seguinte método e marque a alternativa que representa o seu significado: ",serif">"">struct Nodo{ ",serif">""> int valor; ",serif">""> structNodo *p; ",serif">"">}; ",serif">"">typedef struct Nodo node; ",serif">"">void metodo(node *lista, valor) { ",serif">"">node *n= (node *) malloc(sizeof(node)); ",serif">"">n->valor= valor; ",serif">""> n->p= lista->p; ",serif">""> lista->p= n; ",serif">"">} Você acertou! A. Adiciona um elemento no início da lista. O método descrito aloca memória para um novo elemento. Na sequência, faz o novo componente apontar para o primeiro da lista e este para o novo. Portanto, adiciona um elemento no início da lista. 4. Analise o seguinte método e selecione a opção que representa o seu objetivo: ",serif">"">struct Nodo{ ",serif">""> int valor; ",serif">""> struct Nodo *p; ",serif">"">}; ",serif">"">typedef struct Nodo node; ",serif">"">void metodo(node *lista) { ",serif">""> node *pr, *at; ",serif">"">at= lista; ",serif">""> while(at->p != NULL){ ",serif">""> pr= at->p; ",serif">""> at->p= NULL; ",serif">"">free(at); ",serif">""> at= pr; ",serif">""> } ",serif">"">} Você acertou! E. Exclui todos os elementos da lista. O método descrito realiza uma varredura na lista e exclui cada elemento a partir da primeira posição. Portanto, exclui todos os elementos da lista. 5. Analise o seguinte método e marque a alternativa que representa o seu significado: ",serif">"">struct Nodo{ ",serif">""> int valor; ",serif">""> struct Nodo *p; ",serif">"">}; ",serif">"">typedef struct Nodo node; ",serif">"">int metodo(nodo *lista) { ",serif">""> node *no= lista->p; ",serif">""> return no->valor; ",serif">"">} Resposta correta. A. Retorna o primeiro elemento da lista. O método descrito acessa a lista e captura o valor do primeiro elemento. Portanto, retorna o primeiro elemento da lista. AULA 11 1. Baseando-se no conceito de lista dinâmica encadeada, marque a alternativa correta em relação à inclusão de elementos: Você acertou! C. A inclusão de elementos deve ocorrer em qualquer posição da lista. Uma lista encadeada não tem um limite máximo de itens, pois a alocação é feita em tempo de execução, sendo que o limite é o tamanho da memória disponível no equipamento. Deve, ainda, permitir a inclusão em qualquer posição da lista, que fará a nova ligação para mantê-la encadeada. 2. Em relação às listas simplesmente encadeadas, leia as alternativas a seguir e indique a correta: Você acertou! D. Alocam apenas a memória necessária para armazenar os elementos da lista. Uma lista simplesmente encadeada aponta apenas para o elemento posterior da cadeia, cuja pesquisa é sequencial. Por isso, é mais lenta para encontrar elementos, visto que seu tempo de busca é crescente e varia conforme a quantidade de itens da lista. No entanto, é rápida para inserir/excluir e não requer posições contínuas na memória, pois a alocação é dinâmica e otimizada, utilizando apenas o necessário. 3. Marque a alternativa correta em relação às vantagens de uma lista dinâmica: Você acertou! A. Permitem aumento e redução do tamanho da lista em tempo de execução. Uma lista dinâmica permite o aumento e a redução do número de itens em tempo de execução, sem precisar alocar posições contínuas de memória, como os arrays e matrizes. Nesse tipo de lista, não existe busca indexada, pois toda pesquisa é sequencial a partir do primeiro elemento. São rápidas para inserir em qualquer posição da lista e não utilizam arrays para armazenar endereços de memória, pois usam ponteiros. 4. Analise o seguinte código baseado na linguagem C e marque a alternativa que representa o seu significado: nodo *item= (nodo *) malloc(sizeof(nodo)); nodo *no= L->prox; while(no->prox != NULL) { no= no->prox; } no->prox = item; Você acertou! B. Adiciona um novo elemento no final da lista. O código descrito faz uma varredura na lista até chegar à última posição. Na sequência, faz o último item apontar para o elemento que foi criado (*item). Portanto, adiciona um novo elemento no final da lista. 5. Levando em consideração os conceitos de uma lista simplesmente encadeada, assinale a alternativa que melhor representa a sua utilização: Você acertou! C. Listas grandes, com muitas inserções e em qualquer posição. Uma lista simplesmente encadeada é recomendada para listas grandes, que podem ter muitas inserções e exclusões, cujo tamanho pode ser indefinido. No entanto, não apresentam pesquisa indexada, e a varredura ocorre apenas em uma direção. AULA 12 1. Listas encadeadas duplas são estruturas com características específicas. Baseando-se no conceito de lista encadeada dupla, marque a alternativa correta: Você acertou! E. Cada elemento apresenta dois atributos do tipo ponteiro da lista, usados para referenciar o elemento anterior e próximo. Em uma lista encadeada dupla, cada elemento tem dois atributos do tipo ponteiro da lista. O anterior ao primeiro elemento e o posterior ao último apontam para NULL. Os elementos da lista não precisam necessariamente ser estruturas compostas, podendo também ser tipos primitivos. Deve, ainda, permitir a inclusão em qualquer posição da lista, e não apresenta um limite máximo de itens, pois a alocação é feita em tempo de execução. 2. O duplo encadeamento em listas permite que façamos operações onde a navegação é feita nos dois sentidos, como em um reprodutor de música. Em relação às listas com encadeamento duplo, leia as alternativas a seguir e indique a correta: Você acertou! E. Alocam apenas a memória necessária para armazenar os elementos atuais da lista. Em uma lista dinâmica com encadeamento duplo, cada elemento aponta para o elemento anterior e posterior da cadeia, cuja pesquisa é sequencial e pode ter ambos os sentidos, não permitindo acesso direto a determinado elemento sem ter que navegar na lista. Por ser dinâmica, alocando apenas a memória necessária para armazenar os elementos atuais da lista. 3. Cada estrutura de dados apresenta métodos diferentes para a inserção e exclusão de elementos. Baseando-se no conceito de lista encadeada dupla. Marque a alternativa correta em relação à inclusão de elementos: Você acertou! E. A inclusão de elementos pode ocorrer em qualquer posição da lista. Uma lista encadeada dupla deve permitir a inclusão em qualquer posição da lista, que fará a nova ligação para manter a lista encadeada, e não tem um limite máximo de itens, pois a alocação é feita em tempo de execução, sendo o limite o tamanho da memória disponível no equipamento. 4. Listas duplamente encadeadas se diferenciam de outros tipos de lista por causa de algumas características específicas. Sobre lista duplamente encadeada. Marque a alternativa correta em relação às suas características: Você acertou! E. Os elementos podem conter variáveis de um tipo primitivo ou estruturas compostas. Em uma lista duplamente encadeada, os elementos podem conter variáveis de um tipo primitivo ou estruturas compostas, sendo que o anterior do primeiro elemento e o posterior do último apontam para NULL, para indicar o início e o final da lista. A inclusão pode ser realizada em qualquer ponto da lista, e a exclusão de um elemento não a divide em duas. 5. Para cada tipo de manipulação de itens em uma lista encadeada dupla, nós precisamos desenvolver diferentes métodos, por exemplo para inclusão e exclusão de elementos. Analise o seguinte método e marque a alternativa que representa o seu significado: struct Node{ int numero; struct Node *ant; struct Node *prox; }; typedef struct Node node; struct Descritor{ int n; struct Node *prim; struct Node *ult; }; typedef struct Descritor descritor; void metodo(descritor *desc, node *list) { node *u= desc->ult; node *p= u->ant; p->prox= NULL; desc->ult= p; free(u); desc->n--; } Você acertou! E. Remove o último elemento da lista. O método apresentado recebe o endereço do último elemento e do penúltimo. Na sequência, faz o descritor apontar o final da lista para o penúltimo elemento e o próximo dele para NULL. Portanto, exclui o último elemento da lista. AULA 13 1. Tratando-se de estruturas de dados em árvore, qual das opções abaixo representa o conceito de folha? Você acertou! B.Um nó que não possui sub-árvores. Folha é um nó que possui grau zero, ou seja, não possui sub-árvores. 2. Dada a seguinte árvore, em relação ao nó 4 podemos afirmar que: Você acertou! E. O nó 4 é filho do nó 1 e pai dos nós 7, 8 e 9. O caminho da árvore é composto por uma sequencia de nós consecutivos seguindo a relação onde ni é pai de nj+1. Os nós 2 e 3 são nós irmãoes do nó 4. 3. Qual é a principal característica de uma árvore binária completa? Você acertou! A. Possuir todas folhas no mesmo nível. Uma arvore binária completa possui todas as folhas no mesmo nível k. Mesmo possuindo muitos nós, a distância entre a raiz e uma folha qualquer é relativamente curta. 4. Que grau possui a árvore abaixo? Você acertou! B. A árvore é grau 2. O grau da árvore é o maior valor de grau de nó entre todos os nós da árvore. 5. Quais são as folhas da árvore abaixo? Você acertou! D. D, G, H e I. O elemento que não possui galhos é conhecido como folha ou nó terminal. AULA 14 1. Qual das características a seguir representa uma árvore binária de busca? Você acertou! B. A subárvore à direita possui valores maiores que a raiz. Uma árvore binária de busca possui as mesmas propriedades de uma árvore binária comum, acrescida das seguintes características: os nós pertencentes à sua subárvore esquerda possuem valores menores que a chave; os nós pertencentes à sua subárvore direita possuem valores maiores que a chave; e um percurso em in-ordem, nessa árvore, resulta na sequência de valores em ordem crescente. 2. Uma das operações típicamente realizadas em árvores binárias de busca é a busca por um elemento da árvore. Na árvore a seguir, caso fosse necessário buscar o valor 8, quantas comparações deveriam ser realizadas até encontrá-lo? Você acertou! C. Três comparações. As comparações realizadas são: 1) 8>5; 2) 8>7 e 3) 8=8. Na realização de uma busca em árvore binária, é necessário examinar a raiz. Caso o valor seja igual à raiz, significa que o valor existe na árvore. Caso ele seja menor que a raiz, deve-se realizar uma busca na subárvore à esquerda e, assim, recursivamente em todos os nós da subárvore. 3. A árvore a seguir foi percorrida na seguinte sequência: DBGEHIFCA. Qual o tipo de percurso utilizado? Você acertou! A. Pós-ordem. Pós-ordem - o percurso inicia pelas folhas. No percurso realizado a partir do critério de pós-ordem, os filhos são processados antes do nó. 4. Qual o principal objetivo da organização de dados em estruturas de árvores binária de busca? Você acertou! E. Facilitar a busca de um determinado valor. Devido à organização da árvore, a busca por elementos é mais ágil. Desde a raiz, é possível percorrer a árvore em busca do valor desejado, para tanto, basta verificar se o valor procurado é maior, menor ou igual ao nó que está posicionado. 5. Quantas folhas existem na árvore a seguir? Você acertou! D. Duas folhas. Folha é um nó que não tem filhos, podendo ser chamada, também, de nó terminal, portanto, a árvore possui duas folhas. AULA 15 1. Qual a diferença entre uma árvore AVL e uma árvore binária em busca? Você acertou! A. A árvore AVL é uma árvore binária de busca balanceada, cuja altura das subárvores se difere no máximo em 1. A árvore AVL é uma árvore binária de busca balanceada em que, para cada nó, as alturas das subárvores diferem em 1, no máximo. Ela foi proposta em 1962, pelos matemáticos russos G.M. Adelson-Velskii e E.M. Landis, e o nome da árvore vem das iniciais dos seus nomes. 2. Inserindo os elementos 10, 3 e 2 em uma árvore binária, obtém-se a seguinte árvore desbalanceada: Em qual dos itens é posssível ver a rotação que foi feita e a árvore balanceada gerada a partir dessa rotação? Você acertou! E. ROTAÇÃO A DIREITA A árvore ficou desbalanceada com a inserção de um nó à esquerda da subárvore à esquerda, sendo preciso que se faça uma rotação à direita. Os passos para essa rotação são: O filho da esquerda vira a nova raiz. A raiz original se torna o filho à direita da nova raiz. 3. Quando inserimos um nó à direita da subárvore direita de uma árvore AVL, e essa inserção gera um desbalanceamento da árvore, qual a rotação que precisamos fazer para que a árvore fique balanceada novamente? Você acertou! C. Rotação simples à esquerda. Como a direção da subárvore e da inserção do nó é a mesma, precisamos fazer uma rotação simples. Nesse caso, é uma rotação simples à esquerda para arrumar o desbalanceamento à direita. 4. A operação representada pelas 3 árvores abaixo é uma operação de rotação, de onde se inicia com uma árvore desbalanceada e se chega a uma árvore balanceada (da esquerda para direita). Resposta correta. D. Rotação dupla esquerda. A árvore desbalanceada (árvore mais à esquerda), está visualmente em ziguezague, o que elimina as rotações simples. Como o nó P, gerador do desbalanceamento, foi inserido à esquerda de uma subárvore à direita, a rotação dupla que deve ser feita é uma rotação dupla à esquerda. 5. Uma rotação dupla é realizada, unindo duas rotações simples. Assim, uma rotação dupla à direita é realizada da seguinte forma: Você acertou! D. uma rotação simples à esquerda e uma rotação simples à direita. A rotação dupla é utilizada quando o desbalanceamento da árvore ocorreu, gerando uma ziguezague na estrutura desta. Nesses casos, não basta uma rotação simples. A rotação dupla à direita tem os seguintes passos: - Rotação à esquerda na subárvore à esquerda. - Rotação à direita na subárvore que foi gerada a partir da primeira rotação. AULA 16 1. Temos no contexto computacional diversas nomenclaturas e definições acerca dos conceitos e de suas respectivas aplicações. Assinale a alternativa que traz o conceito que define o que é um grafo. Você acertou! A. É um agrupamento formado por arestas e vértices. Grafo é um agrupamento formado por arestas e vértices que tem como principal função fazer a conexão entre os objetos dentro do contexto da estrutura de dados. Já o vértice é entidade de formação simples, a qual pode ter nomes e atributos. A responsabilidade de permitir que haja a conexão entre dois vértices é dada às arestas. As distâncias são os chamados pesos. 2. Os grafos, assim como outros elementos da estrutura de dados, têm diversos meios de representação. Assinale a alternativa que traz um exemplo prático de um grafo em nosso cotidiano. Você acertou! B. A cidade de São Paulo, a BR-116 e a cidade do Rio de Janeiro. Uma estrada remete apenas a uma aresta, tendo em vista que um grafo é formado por mais elementos. Podemos fazer uma analogia com os elementos de um grafo, em que as cidades seriam os vértices e as estradas seriam as arestas que fazem as ligações entre os vértices. Um círculo não remete ao uso dos elementos de um grafo, os quais formam outros tipos de representação gráfica. Um telefone, por si só, não remete ao exemplo de uso de um grafo, porém, podemos dizer que havendo a inserção dele em um contexto em que uma pessoa liga para outra, e esta também faz uma ligação, poderíamos ter um grafo. A bicicleta, por si só, não remete a ideia de um grafo. Dentro deste contexto, poderíamos dizer que caso a alternativa tivesse feito relação, por exemplo, ao aro da bicicleta, poderíamos visualizar a aplicação dos elementos de um grafo. 3. As arestas podem ser definidas tanto como dirigidas/orientadas quanto como não dirigidas/não orientadas. Dessa forma, assinale a alternativa que traz as definições corretas destes conceitos. Resposta correta. D. A orientação de um grafo é definida caso haja uma aresta de um ponto para outro indicando a direção da passagem do grafo. Enquanto um grafo não orientado pode ser definido apenas como sendo um grafo. A orientação dos grafos é útil, pois os vértices e arestas muitas vezes trazem mais informações ao contexto do algoritmo, principalmente quando são utilizados pesos, para definir a simplicidade ou não dessas ligações. Uma aresta (u,v) é dita dirigida de u para v se o par (u,v) for ordenado, com u precedendo v. Uma aresta (u,v) é ditanão dirigida se o par (u,v) não for ordenado. As arestas não dirigidas são por vezes denotadas como conjuntos {u,v}, mas, para simplificar, será utilizada a notação de pares (u,v), notando que no caso não dirigido (u,v) é o mesmo que (v,u). 4. A interligação dos vértices permite que haja diversas formas de acessá-los, uma delas possibilita que medidas sejam atendidas, como a marcação de vértices que foram ou não acessados. Assinale a alternativa que traz o tipo de estrutura de dados relacionado ao conceito citado. Resposta correta. C. Algoritmo de busca por profundidade. O grafo permite o uso de vértices e arestas, que podem, além de agir de formas diferentes, receber diversas outras nomenclaturas, principalmente relacionadas à maneira de acesso aos elementos e como este será realizado, podendo ser por meio de matrizes, listas e diversos algoritmos. De acordo com Szwarcfiter et al. (1986 apud ASCENCIOet al., 2010, p. 378), uma busca em profundidade é aquela que atende ao seguinte critério para explorar um vértice marcado: dentre os vários marcados e incidentes a alguma aresta ainda não explorada, escolher aquele vértice mais recentemente alcançado na busca. 5. Um grafo pode ser representado de forma adequada por meio de matrizes e listas, tendo cada uma delas uma maneira diferente de representação e acesso aos elementos. O armazenamento das arestas com um componente adicional acontece por meio de qual estrutura? Você acertou! A. Matriz de adjacência. As estruturas de dados para grafos usam coleções para realizar o armazenamento dos vértices do grafo. Cada estrutura acaba utilizando diferentes meios para armazenar e acessar as informações dos grafos. Dado um grafo G (V, E), uma matriz de adjacências M é formada por n linhas e n colunas, sendo n o número de vértices do grafo.
Compartilhar