Algorithms and data structures

Base Knowledge

N/A

Teaching Methodologies

Not available

Learning Results

At the end of the course the student should be able to:
• know different structures to store and manipulate data in memory;
• distinguish static structures from dynamic structures;
• choose, define, and use the most suitable data structure for each problem;
• develop and implement algorithms to manipulate different data structures, in C;
• implement iterative and recursive algorithms for problem solving;
• understand the concept of complexity and choose between two or more algorithms to solve the same
problem considering the computational effort of each.

Program

1. Sorting and searching algorithms
a. Naive
b. Efficient
2. File manipulation using C (create, open, read, write)
a. Text files
b. Binary files
3. Structs
a. Definition, declaration, and assign
b. typedef
c. Struct arrays
4. Pointers
a. Pointer concept
b. Pointers arithmetic
c. Pointers and subprograms
c. Arrays and pointers
d. Structs and pointers
e. Dynamic memory allocation
5. Dynamic structures
a. Linked lists: Single, Doubly linked, Circular
b. Trees
c. Abstract Data Types: Stack, Queue, Dictionary
6. Recursion
a. Divide and conquer
b. Memory function
7. Introduction to the study of algorithm efficiency
a. Temporal and spatial complexity
b. Complexity analysis of the best case, the worst case and the average case

Internship(s)

NAO

Bibliography

Damas, L. (2019). Linguagem C. (24ª edição). FCA.
Rocha, A. (2014). Análise de complexidade de algoritmos. FCA.
Rocha, A. (2014). Estruturas de dados e algoritmos em C. FCA.
Szuhay, J. (2020). Learn C Programming: A beginner’s guide to learning C programming the easy and disciplined
way. Packt publishing.
Vasconcelos, J. & Carvalho, A. (2005). Algoritmia e estruturas de dados: Programação nas linguagens C e java.
Edições Centro Atlântico.