This course, " Algorithms and Data Structures 2"  is designed to introduce first-year Mathematics students to the fundamental principles of structured problem solving and programming. It begins with the study of subprograms, functions, and procedures, which enable complex problems to be decomposed into smaller, manageable components. Students learn essential concepts such as local and global variables, parameter passing mechanisms, and recursion as a mathematical and computational technique. The course then explores file handling, focusing on how data can be stored, accessed, and manipulated persistently. Finally, it introduces dynamic data structures, including linked lists, stacks, and queues, with particular emphasis on pointers and dynamic memory management.