I've done 2 algorithms/ds classes, i did the advanced one first then the normal one just for the high grade.

in the normal class they covered:

- algorithm analysis (big O mostly, only looked at for a week or so)

- basic container (list, stack, vector, heap, priority queue, binary search tree, tree)

- sorting (quick sort, merge sort, radix sort, etc..)

- graphs (representations, bfs, dfs, minimum spanning tree, dijkstra's, floyd warshall's, topological sort)

- hashing

the advanced one i took before the one above went over:

- math algorithms (gcd, primes)

- string seaching (brute force, KMP, Horspool, Rabin-Karp)

- graphs (representations, BFS, DFS)

- dynamic programming (edit distance, counting paths on a grid)

- graphs II (minimum spanning tree, dijkstra's, floyd warshall's)

- searching techneques (Combinatorial Search | Backtracking | A* Search)

- computational geometry (line segment intersection, convex hull)

- graph III (cycle detection, topological search, vertex colouring)

- graph IV (bipartite matching, assignment problem)

- networks (max flow, min cost max flow, stable marriage problem, travelling saleman problem approximations)

- Tries and suffix trees

the advanced one was a really fun unit, we had a 5 hour programming exam where they gave us problems and we had to solve the and pass the judge test data (pretty much like the ACM if you've ever heard of it)

Systems programming is about operating systems. The first assignment is basically to do with pthread and the second will be sockets.