Licenciatura em Engenharia Electrotécnica e de Computadores
Algoritmos e Estruturas de Dados
Ano lectivo de 2000/2001

Plano das aulas Teóricas

Número Datas Assunto Acetatos

1

19 Fevereiro

Apresentação da ficha da disciplina.
Introdução à programação estruturada em C++ (extensões ao C)

parte1.pdf
parte1.ppt

2

22 ou 23 de Fevereiro

Entrada e saída de dados e manipulação de ficheiros de texto com "streams"; comentários até ao fim da linha; declaração de variáveis; constantes simbólicas; coerção de tipos; o tipo de dados "bool".

-

3

1 ou 2 de Março

Funções: passagem de argumentos por referência; funções que retornam referências; utilização de "const" em argumentos de funções; argumentos por omisão; funções "inline"; sobrecarga de funções; padrões ("templates") de funções.

-

4

6 de Março

Alocação e libertação de memória dinâmica com "new" e "delete".
Algoritmos de pesquisa e ordenação de arrays: pesquisa sequencial, pesquisa binária,

-

5

8 ou 9 de Março

Ordenação por inserção; ordenação por partição.
Análise de algoritmos: noção de complexidade temporal e espacial; notação de O grande; aplicação aos algoritmos de pesquisa e ordenação de arrays.

parte2.pdf
parte2.ppt

6

13 de Março

Introdução à programação orientada por objectos em C++ (classes): conceito de objecto e classe; membros-função; restrições de acesso a membros; separação de interface e implementação;

parte3.pdf
parte3.ppt

7

15 ou 16 de Março

Construtores e destrutores; objectos e membros constantes; inicializadores de membros; composição de classes; o apontador "this"; membros estáticos; classes e funções "friend"; construtor de cópia; criação e destruição de objectos com "new" e "delete".

-

8

20 de Março

Classes derivadas: relação "is a", herança e classes derivadas; composição versus herança; herança pública, privada e protegida; hierarquias de classes;

-

9

22 ou 23 de Março

Funções virtuais e polimorfismo; funções virtuais puras e classes abstractas; classes de interface e classes de implementação; herança múltipla; classes base replicadas e classes base virtuais; apontadores para membros-função.

-

10

27 de Março

Sobrecarga de operadores.

-

11

29 ou 30 de Março

Padrões ("templates") de classes.
Tratamento de excepções.

-

12

3 de Abril

Listas Lineares: o tipo de dados abstracto; representação em array; representação ligada em cadeia; listas circulares e listas duplamente ligadas

listas.pdf

13

5 ou 6 de Abril

Representação por endereçamento indirecto.

-

14

19 ou 20 de Abril

Representação por simulação de apontadores; aplicações de listas lineares.

-

15

24 de Abril

Pilhas: tipo de dados abstracto; implementação baseada em array; implementação baseada em cadeia; exemplo de aplicação.

pilhas.pdf

16

26 ou 27 de Abril

Filas: tipo de dados abstracto; implementação baseada em array; implementação baseada em cadeia; exemplo de aplicação.

filas.pdf

17

3 ou 4 de Maio

Árvores: definições; árvores binárias; representação de árvores baseada em fórmula; representação ligada; percorrer a árvore em profundidade (pré-order, em-ordem e pós-ordem) e em largura. Tipo de dados abstracto BinaryTree.

trees.pdf

18

15 de Maio

Classe C++ BinaryTree para implementar uma árvore binária; percorrer a árvore em profundidade e em largura.
Aplicação de árvores binárias; redes de distribuição.

-

19

17 ou 18 de Maio

Filas de prioridade: tipo de dados abstracto MaxPriorityQueue; utilização de Heaps; representação em array de Heaps e algoritmos associados; implementação em C++ da classe MaxHeap; Aplicação à ordenação de arrays (HeapSort).

heaps.pdf

20

22 de Maio

Hashing: dicionários, tabelas de dispersão ("hash"), implementação em C++ da classe HashTable; aplicação à compressão de ficheiros segundo o algoritmo LZW.

hash.pdf

21

24 ou 25 de Maio

Grafos: definições e propriedades; Tipo de dados abstracto Grafo e Digrafo; representação de grafos em matriz das adjacências, lista empacotada de adjacências e cadeia de adjacências; representação de redes e matriz de custos; implementação das classes C++ para grafos, digrados com e sem pesos usando a matriz das adjacências e usando a lista encadeada de adjacências.

grafos.pdf

22

29 de Maio

Iteradores para listas de adjacências; algoritmo de procura em largura (BFS) e em profundidade (DFS).

-

23

31 de Maio ou 1 de Junho

Implementação de BFS e DFS em C++; exemplos de aplicação (caminhos, etiquetar componentes).

-

24

4 de Junho

Resolução de exame-tipo

-

25

7 ou 8 de Junho

Resolução de exame-tipo

-