1 Data structures
1.1 Abstract data type (P1)
1.1.1 Definition
Give definition of what is ADT, common ways to represent ADT
1.1.2 Examples
Give examples of a general ADT, using a representation to illustrate. You can choose one of
the following ADT: Array, Linked List, Doubly Linked List, Circular Linked List.
(The best way to illustrate operations of an ADT is using table)
1.2 ADT usages
1.2.1 Application of Stack in memory (P2)
Describe an application of Stack in memory management: how the memory is organized,
how a method (function) calls is implemented with stack.
1.2.2 Application of an ADT (P3)
Describe a problem where you need an ADT (Array, Linked List, DLL, CLL), describe that data
structure operations can be used for that problem.
1.2.3 Application of Queue (M1)
Describe a problem where you need Queue, describe a concrete queue for that problem
and why using queue can solve that problem.
1.3 ADT vs OOP (M3, D2)
1.3.1 Using OOP to represent ADT
Represent an ADT in Java programming language (you can use abstract class or interface),
explain how the ADT operations can be represented by methods of your class / interface.
1.3.2 Discussion
Discuss how OOP can help to represent ADT and implement ADT (encapsulation, override,
inheritance)
2 Algorithms
2.1 Sorting algorithms (M2)
2.1.1 Bubble sort (or other O(n2) sort algorithms)
Describe how it works
Analyze its performance (time, memory)
2.1.2 Quick sort (or other O(nlogn) sort algorithms)
Describe how it works
Analyze its performance (time, memory)
2.2 Shortest path algorithms (D1)
2.2.1 Dijkstra’s algorithm
Describe how it works by using concrete example
2.2.2 Bellman Ford’s algorithm
Describe how it works by using concrete example