In order to ensure that it is more difficult for students to be tempted by cheating, each of the projects
has numerous possible projects associated with it. These projects should change from term to term.
- linked-list−based data structures,
- array-based data structures,
- tree-based data structures,
- hash-table based data structures, and
- graph data structures and algorithms.
For access, please contact the author at dwharder@uwaterloo.ca.
1. Linked-list−based data structures
Project 1 will always be comprised of a linked-list projects:
- Cyclic_double_list
- Cyclic_double_sentinel_list
- Cyclic_list
- Cyclic_sentinel_list
- Double_list
- Double_sentinel_list
- Sentinel_list
- Single_list
- Sorted_double_list
- Sorted_double_sentinel_list
- Sorted_sentinel_list
- Sorted_single_list
Each class above requires one of the following two node classes:
- Double_node
- Single_node
2. Array-based data structures
Project 2 will always be comprised two projects. One will be a statically
sized array-based container, while the other will be dynamic. In general, one
should be stack-based, and the other either queue or deque based.
The static memory projects are:
- Stack
- Queue
- Deque
- Drop_off_stack
- Navigation_stack
- Range_stack
- Dual_stack
The dynamic memory projects are:
- Dynamic_stack
- Dynamic_queue
- Dynamic_deque
- Dynamic_navigation_stack
- Dynamic_range_stack
- Dynamic_dual_stack
The linked-memory projects are:
- Linked_stack
- Linked_queue
- Linked_deque
- Linked_navigation_stack
- Linked_range_stack
Students will be allowed to use the STL std::list class for the linked-memory projects.
2.1 Definitions
- Dynamic
- The size of the array will be increased when the container is full, and decreased when
the container is one-quarter full.
- Linked
- The container will be made up of a linked-list of arrays of a fixed size. When one array
is filled, a new node will be added with a new array.
- Navigation stack
- A stack with additional backward and forward operations mimicing the
behavior of recording events to allow undo and redo operations.
- Range stack
- A stack that records not only the entries but also the current minimum and maximum
entries in the stack. This can be implemented by having three arrays or a stack of
a struct containing three entries.
- Dual stack
- One array permits two stacks, one growing from each end.
- Drop-off stack
- A stack where, if the stack is full, discards what is currently
at the bottom of the stack and places the new object on the top.
3. Tree-based data structures
Project 3 will always be comprised one project related to node-based trees.
- AVL tree
- B tree
- Expression tree
- File system
- Lazy deletion tree
- Quad-tree
4. Hash-table data structure
Project 4 will usually be comprised of a hash table. Previously it has also possibly been a heap-based structure,
but it is more useful to have a hash table structure.
- Binary heap
- Cuckoo hash table
- Double hash table
- Dynamic double hash table
- Dynamic linear hash table
- Dynamic min heap
- Heapify
- Linear replacement hash table
- Quadratic hash table
- Quaternary heap
- Stable binary heap
- Ternary heap
5. Grpah data structures and algorithms
Project 5 is always graph based.
- Dijkstra's algorithm
- Prim's algorithm
- Topological sort
- Kruskal algorithm