[dd-mm-2026]
--
Objetivos e resultados da aprendizagem
Os objetivos principais desta UC prendem-se com a aprendizagem de conhecimentos sobre algoritmia e estruturas de dados na resolução de problemas computacionais.
Esta unidade curricular tem como objetivos adquirir conhecimentos sobre:
- algoritmia, em particular algoritmos de ordenação e de pesquisa, e de análise de complexidade dos algoritmos,
- estruturas de dados de acesso sequencial, como listas, pilhas e filas,
- estruturas de dados de acesso não sequencial, como árvores não balanceadas e balanceadas, heaps e grafos,
- como selecionar as estruturas de dados apropriadas à resolução de problemas práticos,
- como selecionar os algoritmos apropriados às estruturas de dados definidas.
Após a conclusão da UC, os estudantes deverão ser capazes de:
- desenvolver competências de algoritmia, em particular em problemas que envolvam ordenação e/ou pesquisa,
- analisar a eficiência dos algoritmos, através da análise de complexidade, de forma a usar os algoritmos mais eficientes na resolução do problema em questão,
- explicar a necessidade de eficiência por parte dos algoritmos e das estruturas de dados,
- implementar programas que utilizam os algoritmos e as estruturas estudadas.
A linguagem C será usada na componente prática da disciplina, apesar dos conceitos nela envolvidos serem independentes da linguagem.
Programa detalhado
Algoritmos
1. Algoritmos
2. Análise de Complexidade dos Algoritmos: Big-O
3. Análise Amortizada de Algoritmos
4. Algoritmos de ordenação em arrays 1D (1 dimensão)
5. Algoritmos de pesquisa em arrays 1D (1 dimensão)
Estruturas Abstratas de Dados
1. Conceitos Gerais
2. Estruturas de acesso sequencial
2.1. Listas Ligadas com ligações simples
2.2. Listas Ligadas com ligações duplas
2.3. Pilhas
2.4. Filas
3. Estruturas de acesso não sequencial
3.1. Árvores Binárias
3.2. Árvores Binárias de Pesquisa
3.2. Árvores N-árias
Árvores de Pesquisa Balanceadas
1. Árvores Binárias
1.1. Adelson-Velskii Landis (AVL)
1.2. Vermelho-Preto (Red-Black)
1.3. Árvore de Intervalos
2. Árvores 2-3
Filas de Prioridade (Heaps)
1. Heap
2. Heap Binário
3. Heap Binomial
Grafos
1. Tipos de grafos
2. Representação Computacional (estrutura de dados) de um grafo
3. Algoritmos de Pesquisa em Grafos
3.1. Pesquisa em Largura Primeiro
3.2. Pesquisa em Profundidade Primeiro
4. Problemas envolvendo grafos
4.1. Árvore Abrangente Mínima: Prim
4.2. Caminho Mais Curto: Dijkstra
4.3. Fluxo Máximo: Ford-Fulkerson
4.4. Emparelhamento Estável ("Stable Matching Problem"): Gale-Shapley
Bibliografia
António Manuel Adrego da Rocha.
FCA-Editora de Informática. Coleção: Tecnologias de Informação.
ISBN: 9789727222957
"Algorithms " , 4th Edition, 2011
Robert Sedgewick and Kevin Wayne.
Addison Wesley.
ISBN-13: 978-0321573513
"Linguagem C " , 25ª Edição Atualizada e Aumentada, 2025
Luís Damas
FCA-Editora de Informática.
ISBN: 978-972-722-945-1
Antti Laaksonen
Draft July 3, 2018
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
MIT Press, ISBN-13: 978-0262033848
"Algorithms in C, Parts 1-5 (Bundle): Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms" , 3rd Edition, 2001.
By Robert Sedgewick
Addison-Wesley Professional
ISBN: 0201756080
Clifford A. Shaffer
Department of Computer Science, Virginia Tech
Critérios de avaliação
A avaliação no período de Aprendizagem consiste no seguinte:
- 2 mini-testes práticos (a realizar nas aulas práticas-laboratoriais): 4.0 valores (2.0 valores cada)
- 2 testes escritos (frequências): 16.0 valores (8.0 valores cada)
- assiduidade às aulas: 50%
Aprendizagem = Mini-testes práticos + Testes escritos
em que,
- Assiduidade às aulas inferior a 50% ==> Reprovado e Não Admitido a Exame
- Aprendizagem < 5.5 ==> Reprovado e Não Admitido a Exame
- Aprendizagem >= 9.5 ==> Aprovado e Dispensado de Exame
- Outros casos ==> Reprovado e Admitido a Exame
Exames = Mini-testes práticos + Teste escrito
em que,
- Mini-testes práticos (realizados nas aulas práticas-laboratoriais): 4.0 valores
- Teste escrito: 16.0 valores
Datas das avaliações
Tipo de avaliação
Data
Hora
Salas
Teste escrito 1
20/04/2026
18 h
6.01 - 6.05 - 6.06 - 6.26
Teste escrito 2
01/06/2026
18 h
6.01 - 6.05 - 6.06 - 6.26
Mini-teste prático 1
24-25/03/2026
Aulas PL
Aulas PL
Mini-teste prático 2
05-06/05/2026
Aulas PL
Aulas PL
Testes do ano letivo de 2024/2025
Classificações obtidas nas avaliações
Ano letivo 2025/2026 (necessita de senha de acesso - fornecida através do Moodle)
Mini-Testes Práticos
Frequência 1 (classificação em percentagem) »»» Resolução (sugestão)
Frequência 2 (classificação em percentagem) »»» Resolução (sugestão)
Aprendizagem (Mini-testes práticos + Frequências)
Exame de Época Normal (Teste escrito + Mini-testes práticos) »»» Resolução (sugestão)
Exame de Época de Recurso (Teste escrito + Mini-testes práticos) »»» Resolução (sugestão)
Apontamentos
Introdução
Algoritmos
Estruturas Abstratas de Dados
Árvores de Pesquisa Balanceadas
1. Árvores Binárias de Pesquisa Balanceadas
Filas de Prioridade (Heaps)
Grafos
Folhas práticas
Compiladores de C recomendados
DEV-C++ (para Windows)
Visualização de Estruturas de Dados e Algoritmos usando Animação
Bibliotecas para resolver os exercícios das folhas práticas
(Clicar no nome da folha pretendida para aceder às respetivas bibliotecas)
Introdução
Aleatorio.h »»» biblioteca para gerar números aleatórios (inteiros e reais)
Introducao.h »»» biblioteca para as funções a implementar relativas aos exercícios a resolver
IntroducaoMain.c »»» programa principal para testar as funções implementadas para os exercícios a resolver
Algoritmos
Aleatorio.h »»» biblioteca para gerar números aleatórios (inteiros e reais)
Algoritmos.h »»» biblioteca com as funções associadas aos algoritmos de ordenação e de pesquisa em arrays 1D
AlgoritmosMain.c »»» programa principal para implementar os exercícios a resolver
Listas ligadas (grupo A - EAD Lista com ligações simples)
Aleatorio.h »»» biblioteca para gerar números aleatórios (inteiros e reais)
EADLista.h »»» biblioteca com as operações básicas sobre a Estrutura Abstrata de Dados Lista (com ligações simples)
OperacoesBasicasGrupoA.h »»» biblioteca com as operações básicas sobre o tipo de dados (DadosLista ) do exercício do grupo A
OutrasOperacoesGrupoA.h »»» biblioteca para as operações a implementar relativas aos exercícios a resolver do grupo A
MainGrupoA.c »»» programa principal para testar as operações implementadas para os exercícios do grupo A
Listas ligadas (grupo C - EAD Lista com ligações duplas)
Aleatorio.h »»» biblioteca para gerar números aleatórios (inteiros e reais)
EADLista.h »»» biblioteca com as operações básicas sobre a Estrutura Abstrata de Dados Lista (com ligações duplas)
OperacoesBasicasGrupoC.h »»» biblioteca com as operações básicas sobre o tipo de dados (DadosLista ) do exercício do grupo C
OutrasOperacoesGrupoC.h »»» biblioteca para as operações a implementar relativas aos exercícios a resolver do grupo C
MainGrupoC.c »»» programa principal para testar as operações implementadas para os exercícios do grupo C
Pilhas e Filas (grupo A - EAD Pilha)
Aleatorio.h »»» biblioteca para gerar números aleatórios (inteiros e reais)
EADPilha.h »»» biblioteca com as operações básicas sobre a Estrutura Abstrata de Dados Pilha
OperacoesBasicasGrupoA.h »»» biblioteca com as operações básicas sobre o tipo de dados (DadosPilha ) do exercício do grupo A
OutrasOperacoesGrupoA.h »»» biblioteca para as operações a implementar relativas aos exercícios a resolver do grupo A
MainGrupoA.c »»» programa principal para testar as operações implementadas para os exercícios do grupo A
Pilhas e Filas (grupo B - EAD Fila)
Aleatorio.h »»» biblioteca para gerar números aleatórios (inteiros e reais)
EADFila.h »»» biblioteca com as operações básicas sobre a Estrutura Abstrata de Dados Fila
OperacoesBasicasGrupoB.h »»» biblioteca com as operações básicas sobre o tipo de dados (DadosFila ) do exercício do grupo B
OutrasOperacoesGrupoB.h »»» biblioteca para as operações a implementar relativas aos exercícios a resolver do grupo B
MainGrupoB.c »»» programa principal para testar as operações implementadas para os exercícios do grupo B
Árvores Binárias
Aleatorio.h »»» biblioteca para gerar números aleatórios (inteiros e reais)
EADArvoreBinaria.h »»» biblioteca com as operações básicas sobre a Estrutura Abstrata de Dados Árvore Binária
OperacoesBasicasAB.h »»» biblioteca com as operações básicas sobre o tipo de dados (DadosAB ) dos exercícios a resolver
OutrasOperacoesAB.h »»» biblioteca para as operações a implementar relativas aos exercícios a resolver
MainAB.c »»» programa principal para testar as operações implementadas para os exercícios a resolver
Mostrar por níveis (adaptada ao exercício da folha prática)
ABPorNiveis.h »»» biblioteca com a operação para mostrar por níveis uma Árvore Binária
EADFila.h »»» biblioteca com as operações básicas sobre a Estrutura Abstrata de Dados Fila , usadas na operação para mostrar por níveis
Árvores Binárias de Pesquisa
Aleatorio.h »»» biblioteca para gerar números aleatórios (inteiros e reais)
EADArvoreBinariaPesquisa.h »»» biblioteca com as operações básicas sobre a Estrutura Abstrata de Dados Árvore Binária de Pesquisa
OperacoesBasicasABP.h »»» biblioteca com as operações básicas sobre a estrutura de dados (DadosABP ) dos exercícios a resolver
OutrasOperacoesABP.h »»» biblioteca com as operações a implementar para os exercícios a resolver
MainABP.c »»» programa principal para testar as operações implementadas para os exercícios a resolver
Mostrar por níveis (adaptada ao exercício da folha prática)
ABPPorNiveis.h »»» biblioteca com a operação para mostrar por níveis uma Árvore Binária de Pesquisa
EADFila.h »»» biblioteca com as operações básicas sobre a Estrutura Abstrata de Dados Fila , usadas na operação para mostrar por níveis
Realização Mini-testes Práticos
Plataforma de Avaliação
Horário de atendimento
- Segunda-feira, 16h - 18h (Gabinete 4.2)
- Terça-feira, 11h - 13h (Gabinete 4.2)
- Outro horário (sujeito a marcação com o docente), podendo ser presencial ou através do ZOOM
Horário da disciplina
Horas
Segunda
Sala
Terça
Sala
Quarta
Sala
Quinta
Sala
Sexta
Sala
8
9
PL4
6.14
10
11
TE1
6.01
PL3
FM 1208
12
13
14
TE2
6.01
PL2 PL5
6.14 6.20
PL7
6.20
15
16
PL1 PL6
6.19 6.13
17
18