Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
5 a Lista <strong>de</strong> <strong>exercícios</strong> <strong>de</strong> Algoritmos e Estruturas <strong>de</strong> Dados - Curso: Engenharia <strong>de</strong><br />
Computação<br />
Nome do aluno:<br />
Métodos <strong>de</strong> or<strong>de</strong>nação<br />
1) Mostre os passos <strong>de</strong> or<strong>de</strong>nação do método bolha para or<strong>de</strong>nar o seguinte conjunto <strong>de</strong> elementos<br />
32 12 0 3 11 7 4<br />
2) Repita o processo para mostrar como seria para o caso do método inserção, seleção e quicksort.<br />
3) Escreva a função or<strong>de</strong>na_insercao que or<strong>de</strong>na um vetor utilizando o método <strong>de</strong> inserção.<br />
1 void or<strong>de</strong>na_insercao ( int v[] , int tamanho_do_vetor )<br />
2 {<br />
3 }<br />
4 int main ( void )<br />
5 {<br />
6 int meu_vetor []={23 , 45 , 65 , 12 , 3, 109 , 33 , 32};<br />
7 or<strong>de</strong>na_insercao ( meu_vetor , 8);<br />
8 }<br />
Utilização <strong>de</strong> bibliotecas<br />
4) Crie um exemplo <strong>de</strong> programa C que utiliza vários arquivos fonte. Crie os arquivos .h <strong>de</strong> cada um<br />
<strong>de</strong>stes, mostre com o é realizada a compilação <strong>de</strong> cada arquivo e como juntar todos os arquivos num<br />
executável. Mostre como seria o arquivo Makefile para este seu exemplo.<br />
5) Modifique o exercício 3 para criar uma biblioteca e mostre como “linkar” o seu programa .c com<br />
o código da biblioteca e criar um executável.<br />
<strong>lista</strong>s enca<strong>de</strong>adas<br />
6) Crie uma <strong>lista</strong> enca<strong>de</strong>ada para representar uma agenda telefônica e crie as operações: inicializa,<br />
insere, remove e mostra_todos. Realize alguma operações <strong>de</strong>stas para testar seu programa C.<br />
7) Crie a função C chamada sortedMerge (L1, L2, &L3) que junta os elementos das <strong>lista</strong>s<br />
enca<strong>de</strong>adas L1 e L2 e coloca-os em L3.<br />
7.1) Assuma que os elementos <strong>de</strong>ntro <strong>de</strong> L1 estão or<strong>de</strong>nados em or<strong>de</strong>m crescente, assim como os <strong>de</strong><br />
L2.<br />
7.2) Resolva o mesmo problema, mas agora permitindo que os elementos <strong>de</strong> L1 e L2 não estejam<br />
or<strong>de</strong>nados e <strong>de</strong>sejando que os elementos <strong>de</strong> L3 fiquem em or<strong>de</strong>m crescente.<br />
8) Crie uma <strong>lista</strong> enca<strong>de</strong>ada para representar uma agenda telefônica e crie as operações: inicializa,<br />
insere, remove e mostra_todos. Realize alguma operações <strong>de</strong>stas para testar seu programa C.<br />
9) Crie uma <strong>lista</strong> duplamente enca<strong>de</strong>ada (para armazenar números) que possua função <strong>de</strong> inserção<br />
1
em or<strong>de</strong>m crescente. Implemente as : inicializa, insere, remove e mostra_todos. Realize alguma<br />
operações <strong>de</strong>stas para testar seu programa C.<br />
10) Consi<strong>de</strong>re a seguinte sequencia numérica: 20 , 22 , 10 , 2 , 12 que obe<strong>de</strong>cem a seguinte regra<br />
(acompanhe pela figura): Quando o elemento 20 foi inserido a <strong>lista</strong> estava vazia. Depois quando o 22<br />
foi inserido, como o 22 é maior do que o elemento 20 ele foi colocado a direita. Depois o valor 10 foi<br />
inserido e como 10 é menor do que o 20, ele foi inserido ao lado esquerdo. O número 2 é menor do<br />
que o 20, entao foi inserido do lado esquerdo (mas ja existe o 10). Assim, comparando com o valor<br />
10 temos que 2 é menor e <strong>de</strong>ve ser inserido ao lado direito. Já o 12 é menor do que 20 e <strong>de</strong>ve ser<br />
inserido a esquerda, mas comparando-se com o valor 10 ele é maior e <strong>de</strong>ve ser inserido a direita. Crie<br />
um Tipo Abstrato <strong>de</strong> Dados para representar os números inteiros, ponteiros para esqerda/direita e<br />
anterior, etc. Crie funções insere_elemento e mostrar_todos.<br />
inicio<br />
NULL<br />
qtd<br />
20<br />
10<br />
2 12<br />
NULL<br />
22<br />
NULL<br />
NULL<br />
NULL<br />
NULL<br />
NULL<br />
Pilhas com alocação enca<strong>de</strong>ada<br />
10) Crie uma pilha utilizando alocação dinâmica <strong>de</strong> memória e implemente as função necessárias para<br />
empilhar e <strong>de</strong>sempilhar elementos.<br />
11) Crie uma função Inverte_pilha que inverte o conteúdo <strong>de</strong> uma pilha. Utilize uma ou mais<br />
pilhas auxiliares para criar esta função.<br />
Filas com alocação enca<strong>de</strong>ada<br />
12) Crie uma fila utilizando alocação dinâmica <strong>de</strong> memória e implemente as função necessárias para<br />
enfileirar e <strong>de</strong>senfileirar elementos.<br />
11) Crie uma função Inverte_pilha que inverte o conteúdo <strong>de</strong> uma pilha. Utilize uma fila auxiliar<br />
para criar esta função.<br />
2