Buscar

Manipulação de Listas Simplesmente Encadeadas

Prévia do material em texto

24/05/2021 EPS 
 ESTRUTURA DE DADOS 
a Lupa 
8 aula 
 
Exercício: CCT0826_EX_A8_ 02/05/2021 
Aluno(a): 2021.1 EAD 
Disciplina: CCT0826 - ESTRUTURA DE DADOS 
 
Considere a função em C++ que manipula uma lista simplesmente encadeada : 
void imprime (Lista *l) { 
Lista* p; 
for (p = l; p != NULL; p = p->prox) 
cout <<"Info = " << p->info; 
} 
sendo 
struct Lista { 
int info; 
struct Lista *prox; 
}; 
 
Função que retira um elemento da lista 
Função para liberar a lista 
Função de busca 
 Função que percorre os elementos da lista 
Função que verifica se lista está vazia 
Respondido em 02/05/2021 15:54:14 
 
 
Explicação: 
Veja que existe um loop em que o ponteiro é inicializado e a cada rodada do for, imprime o dado da lista e passa a 
apontar para o próximo nó da lista. Logo, a função percorre a lista. 
>> Não poderia ser verificar lista vazia porque para isso teríamos que testar se o ponteiro é NULL. 
>> Não pode ser busca, pois seria preciso testar cada elemento da lista. Se encontrasse deveria retornar o endereço do 
nó, caso contrário deveria retornar NULL. 
>> Para retirar elemento teríamos que usar delete, para liberar memória, entre outros. Logo, não pode ser. 
>> PAra liberar a lista teríamos que repetidamente usar delete, em um loop. Não pode ser. 
 
 
1/4 
 
24/05/2021 EPS 
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 = 20170562; 
p->matricula = 20170562; 
 p = &matricula; 
 *p = matricula; 
char *p; 
Respondido em 02/05/2021 15:55:07 
 
 
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. 
 
 
Marque a afirmativa que represente uma concatenação em listas. 
 Juntar duas listas, colocando uma lista no final de outra, obtendo, ao final, uma só lista resultante. 
Alterar a ordem dos dados da lista do final para o início, atualizando a lista. 
Organizar os dados da lista em ordem crescente ou decrescente. 
Consiste em dividir a lista em duas outras listas. A quantidade de nós que cada lista terá, depende da 
necessidade. 
Intercalar a ordem dos dados da lista do final para o início, atualizando a lista. 
Respondido em 02/05/2021 15:55:35 
Gabarito 
Comentado 
 
 
Sobre listas simplesmente encadeadas, é INCORRETO afirmar que : 
os nós da lista são alocados dinamicamente. 
 possuem tamanho fixo 
podem implementar pilha e fila dinâmicas 
o ponteiro do último nó é NULL 
são acessadas através de um ponteiro para o primeiro nó da lista 
Respondido em 02/05/2021 15:58:59 
 
 
Explicação: 
Por definição, uma lista encadeada não tem tamanho pré-definido, pois os nós da lista são alocados em tempo de 
execução, de acordo com a demanda. 
 
 
O espaço necessário para a representação dos dados pode ser alocado à medida que se torne necessário, através da 
alocação dinâmica. Uma estrutura armazenada através de encadeamento apresenta seus nodos alocados em posições 
aleatórias na memória, e não lado a lado. Dessa forma, existem várias vantagens no uso de representar os dados por 
encadeamento. Marque a alternativa correta que apresenta estas vantagens. 
2/4 
 
24/05/2021 EPS 
 Acesso, representação, compartilhamento de memória. 
 Compartilhamento de memória, maleabilidade e facilidade para inserção e remoção de componentes. 
Previsão de espaço físico, estruturas complexas, procedimentos menos intuitivos. 
Proteção de memória, transferência de dados, estruturas simples. 
Transferência de dados, gerenciamento de memória e procedimentos menos intuitivos. 
Respondido em 02/05/2021 16:00:49 
 
 
Explicação: 
FALSO . Previsão de espaço 
físico, estruturas complexas, 
procedimentos menos intuitivos. 
 
Acesso, representação, 
FALSO 
compartilhamento de memória. 
 
Proteção de memória, transferência 
FALSO de dados, estruturas simples. 
 
Transferência de dados, 
FALSO gerenciamento de memória e 
procedimentos menos intuitivos. 
 
Compartilhamento de memória, 
VERDADEIRO maleabilidade e facilidade para 
inserção e remoção de componentes. 
Gabarito 
Comentado 
 
 
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->empregado->salario=5000.00; 
 pont.empregado.salario=5000.00 
 salario=5000.00; 
pont.empregado->salario=5000.00; 
pont.salario=5000.00; 
Respondido em 02/05/2021 16:03:16 
 
 
Explicação: 
Criar a entrada: 
salario=5000.00; 
 
 
3/4 
 
24/05/2021 EPS 
Em algumas situações, principalmente na utilização de listas, há a necessidade de posicionar o ponteiro em determinado 
local da lista. Dessa forma, analisando o trecho de código abaixo, que mostra uma função, assinale a alternativa correta 
que descreve o objetivo desta. Sabe-se que o sinal de asterisco (*) sinaliza um ponteiro. 
void funcao (Nodo **P){ 
if ( *P != NULL ){ 
while ( (*P) -> Anterior != NULL ) 
*P= (*P) -> Anterior; 
} 
} 
Posicionar o ponteiro no meio da lista 
 Posicionar o ponteiro no início da lista 
 Posicionar o ponteiro onde houver o valor NULL 
Posicionar o ponteiro no final da lista 
Colocar o valor NULL em todos os ponteiros 
Respondido em 02/05/2021 16:04:40 
Gabarito 
Comentado 
 
 
 
Seja uma lista encadeada cujo nodo é representado por: 
struct nodo{ 
int valor; 
nodo prox; 
}; 
 
Esta estrutura possui um ponteiro de referência que aponta sempre para o primeiro nodo da lista, sendo este 
declarado como: nodo *lista; 
Numa lista encadeada seu último nodo possui o campo prox sempre igual a NULL. Marque a opção que representa o 
trecho de código onde um ponteiro auxiliar é capaz de percorre a lista até seu último nodo: 
 nodo *aux=lista; 
while(aux->prox)aux=aux->prox; 
nodo *aux=lista; 
while(aux->prox)aux->prox=aux->prox; 
 nodo *lista=aux; 
while(aux->prox)aux=aux->prox; 
nodo *aux=lista; 
while(lista->prox)aux=aux->prox; 
nodo *aux=lista; 
while(aux)aux->prox=aux; 
Respondido em 02/05/2021 16:04:56 
 
 
Explicação: 
nodo *aux=lista; 
while(aux->prox)aux=aux->prox; 
 
 
 
4/4

Continue navegando