**Computer Science
**

**CSC 428 Part**

**Programming Languages**

Different programming paradigms, such as imperative and declarative; programming language syntax and semantics; expressions and assignment statements; control statements such as selection (two-way and multiple) and iterative statements (controlled by counter and logically); subprograms (functions and procedures).

**Object Orientation**

Objects and classes; messages and methods; relationships (is-a, part-of, has-a); inheritance (including multiple inheritance); interface and implementation; implementation of classes, objects, and messages.

**Data Structures**

Linked lists, stacks and recursion; queues; trees (building, traversing, searching, implementing); binary trees.

**CSC 438 Part**

**Advanced Data Structures**

Indexing using hashing; priority queues; heaps; trees (binary search, balanced, suffix); AVL trees.

**Algorithms**

Basic algorithm analysis (O, o, ), priority queues and heaps (binary heaps, heap operations, d-heaps, leftist heaps, binomial queues); sorting algorithms (shell sort, insertion sort, quick sort, merge sort, bucket sort, external sorting); disjoint sets (dynamic equivalence problem, path compression, union/find algorithm); graph algorithms (topological sort, shortest path, Dijkstra’s algorithm, all-pairs shortest path, minimum spanning trees, depth-first search, undirected graphs, Euler circuits, directed graphs, strong components); NP completeness (definitions, example of NP-complete problem, difference between NP-complete and NP-hard problems); algorithm design (greedy algorithms such as scheduling problem, rational knapsack, Huffman codes), divide and conquer (closest-points problem, selection problem); dynamic programming and backtracking.