1. O documento apresenta uma lista de exercícios sobre estruturas de dados que inclui questões sobre listas encadeadas, listas duplamente encadeadas, vetores, pilhas, filas e busca em grafos.
2. As questões abordam implementações básicas de listas como inserção, remoção e ordenação e implementações de pilhas e filas usando listas e vetores.
3. Também inclui explicações sobre busca em profundidade, busca em largura e um programa para gerenciar uma lista de alunos com diferentes operações.
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Exercício de estrutura de dados 01
1. Estrutura de Dados I
1ª Lista de Exercícios
Considere a seguinte estrutura:
typedef struct lista{
int chave;
struct lista *prox;
}lista;
1. Escreva uma função que realiza a inserção ordenada de uma nova chave na lista.
2. Escreva uma função que remove o k-ésimo nó da lista encadeada.
3. Escreva uma função que remove um elemento com chave v da lista ordenada. Caso v não
pertença à lista, uma mensagem de erro deve ser exibida.
a) A primeira versão deve retornar o ponteiro para o primeiro elemento da lista.
b) A segunda versão deve ter como tipo de retorno void.
c) Explique o por quê da diferença na passagem de parâmetros entre as duas versões.
4. Escreva uma função que recebe duas listas ligadas ordenadas x = (x1 , ..., xn ) e y = (y1 , . . . ,
ym ) como parâmetros e retorna uma lista ordenada formada pelos elementos de x e y
intercalados. Seu algoritmo deve ter complexidade de tempo O(n).
5. Escreva uma função que concatena duas listas encadeadas.
6. Escreva uma fun ao que copie uma lista encadeada para um vetor e retorne-o para a função̧
que o chamou.
7. Escreva uma função que verifica se duas listas ligadas dadas são iguais.
8. Escreva uma função que recebe uma lista p e retorna a lista invertida.
9. Utilize a estrutura apresentada para implementar uma lista circular, escrevendo as seguintes
funções:
a) Inserção no início;
b) Inserção no final;
c) Inserção ordenada;
d) Remoção do primeiro elemento;
e) Remoção do último elemento;
f) Remoção do elemento com chave v.
Considere a seguinte estrutura:
typedef struct listadupla{
int chave;
struct listadupla *proximo;
struct listadupla *anterior;
}listadupla;
Refaça as questões 1 a 9 para a estrutura listadupla.
Refaça as questões 1 a 9 utilizando vetor para implementar a(s) lista(s).
Sobre pilhas e filas, responda:
1. O que é um tipo abstrato de dado?
2. Descreva as características de uma pilha.
3. Implemente a função de inserção em uma pilha, utilizando a estrutura lista.
4. Implemente a função de remoção em uma pilha, utilizando a estrutura lista.
5. Implemente uma função que imprima os elementos de uma pilha começando do topo.
2. 6. Descreva as características de uma fila.
7. Implemnte a função de inserção em uma fila, utilizando a estrutura lista.
8. Implemente a função de remoção em uma fila, utilizando a estrutura lista.
9. Implemente uma função que imprima os elementos de uma fila.
10.Duas pilhas A e B podem compartilhar o mesmo vetor, como esquematizado na Figura. Faça
as declarações de constantes e tipos necessárias e escreva as seguintes funções:
a) cria pilhas, que inicia os valores de topoA e topoB;
b) verifica se a pilha A está vazia (vaziaA);
c) verifica se a pilha B está vazia (vaziaB);
d) verifica se as pilhas estão cheias;
e) empilha uma chave na pilha A;
f) empilha uma chave na pilha B;
g) desempilha A;
h) desempilha B.
11.Implemente as funções de inserção e remoção em fila utilizando vetor.
12.Implemente uma fila utilizando lista circular estática.
13.Qual TAD é utilizado na implementação de uma busca em profundidade? Justifique.
14.Qual TAD é utilizado na implementação de uma busca em largura? Justifique.
15.Explique como é o processo de busca em profundidade.
16.Explique como é o processo de busca em largura.
17.Escreva um programa que lê uma lista de alunos (nome e nota) e forneça as seguintes
opções:
a) inserir um aluno; (ler nome e nota)
b) excluir um aluno;
c) calcular média da turma;
d) imprimir alunos acima da média;
e) ordenar a lista;
f) imprimir lista;
g) sair.
Na implementação da opção c, deve-se utilizar o algoritmo mergesort.
Figura 1.