Data Structures (SBE201) - Spring 2018
Teaching Staff
Instructor: Prof. Ahmed H. Kandil
Demonstrator: Eng. Asem Alaa
Lecture Hours
Tuesday, 1st slot (+2nd slot each two weeks).
Section Hours
Section | Day | Time Slot |
---|---|---|
1 | Sunday | 3rd |
2 | Sunday | 4th |
Office Hours
Day | Time |
---|---|
Sunday | from 10am to 12pm |
Monday | from 4pm to 6pm |
Exception: first two weeks you are very welcome to visit any day from 4pm to 6pm (exclude Monday).
Course Outline
Week | Data Structures & C++ | Ecosystem & Miscellaneous |
---|---|---|
1 | Introduction: Brief intro to DS; C++ Basics | Briefly: Unix, compilation, git, github |
2 | C++ Memory Model, C++ Pointers and References | Your Code Readability |
3 | Static and Dynamic Arrays; Categorize your logic with namespace scopes; |
Processing command line arguments (argc & argv ); Compilation of multiple files; Basic Unix commands; bitbucket |
4 | Stacks (ADT); Queues (ADT); Linked Lists; Array-Based Stack; LL-Based Stack; Array-Based Queue; LL-Based Queue; Functions Overloading; Naming conventions; Const correctness | Brief intro to git for teams; .gitignore file; Brief intro to build systems |
5 | Recursion; C++ template structs; C++ classes and objects | Briefly: CMake; Git on large scale; How to contribute on this website using pull requests? |
6 | Open Talk 1: C++ access control on class members; Brief intro to STL; Interesting applications in C++ | Markdown vs. WYSIWYG editors; Mercurial |
7 | Bubble sort; Selection sort; Binary Trees | Open source vs. proprietary software |
8 | Divide and conquer: merge sort, quick sort | Briefly: Development on Windows |
9 | Binary search on sorted array; Binary search tree (BST) | Conan.io; External dependencies |
10 | Algorithms complexity: big O notation | Documenting your code |
11 | Project | Documenting your project on the website using Markdown and pull requests |
12 | Open Talk 2: Other programming languages; Data Structures in Bioinformatics and other domains; C++ libraries, IDEs, and blogs you need to know about; STL vs. Qt vs. Boost | clang-tidy; MOOCs: Coursera & Edx |
Tutorials
- Week 1:
- Slides
- Section Notes: [Part 1: C++ Basics] [Part 2: Using Git and Github].
- Assignment: [Part 1: Git] [Part 2: C++]
- Assignment resubmission
- Special Gift from Github + Linux Basic Commands + Excercise
- Week 2:
- Slides
- Section Notes: [Part 1: Memory, pointers, and references].
- Code Styling
- Assignment
- Week 3:
- Slides
- Section Notes: [Part 1: Static Arrays and Dynamic Arrays] [Part 2: Command Line Arguments and Compilation of Multiple Files].
- FAQ #1: Why
using namespace arbitrary_name;
is a bad practice - FAQ #2: Why
int *p = &x
!=*p = &x
- FAQ #3: Why not using
std::cin
inside functions of particular logic - Assignments: [Assignment: Part 1][Assignment: Part 2]
- Week 4:
- Slides: [Part 1] [Part 2]
- Section Notes: [Part1: Struct, Stacks, Linked Lists, and Queues] [Part2: More on Structs, Linked Lists, Naming Conventions, Const-correctness, Build Systems, and Git for Teams]
- Group Assignments: [Part 1] [Part 2]
- Week 5:
- [Slides]
- Section Notes: [Recursion, Big-Oh Notation, Markdown]
- Week 6:
- [Slides]
- Section Notes: [Sorting, Bubble Sort, Selection Sort, Learning Resources]
- Week 7:
- Week 8:
- [Slides]
- Section Notes: [Binary Search Trees, Sets (ADT) and Maps (ADT)]
- Week 9:
- [Slides]
- Section Notes: [Heaps, Priority Queues (ADT), and Shortest Path Problem]
- Week 10:
- [Slides]
- Section Notes: [Merge and Quick Sorting, more on Dijkstra, and the Final Project]
- Individual Task: [Assignment 6: Wrapping All Data Structures and Algorithms in a Single Project]
- Week 11:
- Section Notes: [Hashes and the Final Project]
Final Projects
Frequently Asked Questions
I have a Unix-based system installed other than Ubuntu 16, should I install Ubuntu 16 instead?
- If you are using a different distribution (e.g Fedora, Suse, etc.), it is fine as long as it is still receiving support through updates.
- If you have Ubuntu 17, it is fine but you need to know that version 17 is not long term support (LTS) version. Ubuntu 16 support will last until 2021.
- If you have an older version (e.g Ubuntu 14.03), make sure that your version is still receiving support from Ubuntu release end of life.