CSC 228 Data Structures and Algorithms, Spring 2020

Assignments 4 (02/25), 5 (02/27), 6 (03/03) and 7 (03/05) are posted. Check Canvas

Exam 1 (Due 02/20) is posted. Check Canvas

-----------------------------------------------------

Syllabus

TA Information

Lecture Slides

Lecture Code (C++)

Assignments

Exams

Assignment and Exam Schedules

 

Syllabus

CSC228 Syllabus, Spring 2020

 

TA Information

Amanuel Gebre: Mondays, Fridays: 10 AM to 3 PM; Wednesdays: 11 AM to 3 PM

Office: John A. Peoples Building, Room 218

E-mail: J00801049@students.jsums.edu 

 

Lecture Slides

 

Module 1:Asymptotic Time Complexity and Intro to Abstract Data Types, C++ Code Review

Module 2 - List ADT

Module 3 - Stack ADT

Module 4 - Queue ADT

Module 5 - Dictionary ADT: Hash tables

Module 6 - Binary Trees

Module 7 - Binary Search Trees

Module 8 - Heap

Module 9 - Graphs

 

Lecture Code (C++)

Module 2: List ADT

Code 1: Static List Implementation using Arrays

Code 2: Dynamic List Implementation using Arrays

Code 3: Singly Linked List

Code 4: Recursion and Random Number Generation

Code 5: Reversing a Singly Linked List

Code 6: Run Time Complexity Analysis

Module 3: Stack ADT

Code 1: Dynamic Array based Stack

Code 2: Doubly Linked List based Stack

Code 3: Example to Illustrate String Processing in C++

Code 4: Using Stack to Check for Parenthesis Balance

Code 5: Example to Illustrate String Tokenizing in C++

Code 6: Evaluation of an Expression in PostFix Format using Stack

Module 4: Queue ADT

Code 1: Dynamic Array based Queue

Code 2: Doubly Linked List based Queue

Module 5: Dictionary ADT: Hashtable

Code 1: Singly Linked List-based Implementation of Hashtable

Code 2: Use of Hashtable to Determine whether two Integer Sequences are Permutations of each other

Code 3: Use of Hashtable to Print the Unique Elements in an Array

Code 4: Use of Hashtable to Determine the Union (with unique elements) of Two Linked Lists (that may have duplicates)

Module 6: Binary Trees

Code 1: To Read Text from a File

Code 2: Implementation of Binary Trees

Code 3: Use of Breadth First Search to Determine the Depth of the Nodes in a Binary Tree

Code 4: Preorder Traversal of a Binary Tree

 

Module 7: Binary Search Trees

Code 1: Construction of a Binary Search Tree (Input: Sorted Array of Integers)

Code 2: Selection Sort

Code 3: Construction of a Binary Search Tree (Input: Randomly Generated Array of Integers)

Code 4: Searching for a Key in a Binary Search Tree

Lecture Code (Java)

Module 2: List ADT

Code 1: Static List Implementation using Arrays

Code 2: Dynamic List Implementation using Arrays

Code 3: Singly Linked List

Code 4: Recursion and Random Number Generation

Code 5: Reversing a Singly Linked List

 

Module 3: Stack ADT

Code 1: Dynamic Array based Stack

Code 2: Doubly Linked List based Stack

Code 3: Example to Illustrate String Processing in Java

Code 4: Using Stack to Check for Parenthesis Balance

Code 5: Example to Illustrate String Tokenizing in Java

Code 6: Evaluation of an Expression in PostFix Format using Stack

 

Module 4: Queue ADT

Code 1: Dynamic Array based Queue

Code 2: Doubly Linked List based Queue

 

Module 5: Dictionary ADT: Hashtable

Code 1: Singly Linked List-based Implementation of Hashtable

Code 2: Use of Hashtable to Determine whether two Integer Sequences are Permutations of each other

Code 3: Use of Hashtable to Print the Unique Elements in an Array

Code 4: Use of Hashtable to Determine the Union (with unique elements) of Two Linked Lists (that may have duplicates)

Module 6: Binary Trees

Code 1: To Read Text from a File

Code 2: Implementation of Binary Trees

Code 3: Use of Breadth First Search to Determine the Depth of the Nodes in a Binary Tree

Code 4: Preorder Traversal of a Binary Tree

 

Module 7: Binary Search Trees

Code 1: Construction of a Binary Search Tree (Input: Sorted Array of Integers)

Code 2: Selection Sort

Code 3: Construction of a Binary Search Tree (Input: Randomly Generated Array of Integers)

Code 4: Searching for a Key in a Binary Search Tree

 

Assignments

Assignment 1 (Programming): Dynamic Array Implementation of the List ADT: Doubling the List Size vs. Incrementing the List Size by One: Memory and Run Time Analysis. Due on Feb. 6th, 11.59 PM

Check Canvas for the code

 

Assignment 2 (Programming): Design and Implementation of a Sorted List ADT. Due on Feb. 11th, 11.59 PM

Check Canvas for the code

 

Assignment 3 (Programming): Design and Implementation of a Θ(n) Algorithm to Delete all the Occurrences of an Element in a List ADT. Due on Feb. 13th, 11.59 PM

Check Canvas for the code

 

Assignment 4 (Programming): Maximum Depth of Nested Parentheses in an Expression. Due on Feb. 25th, 11.59 PM

Check Canvas for the code

 

Assignment 5 (Programming): Evaluation of an Expression in Prefix Format. Due on Feb. 27th, 11.59 PM

Check Canvas for the code

 

Assignment 6 (Programming): Implementation of the Queue ADT using a Stack Object and Performance Comparison of the EnqueueCostly and the DequeueCostly Approaches. Due on March 3rd, 11.59 PM

Check Canvas for the code

 

Assignment 7 (Programming): Using a Hashtable to Determine the Common Elements in all the Lists. Due on March 5th, 11.59 PM

Check Canvas for the code

 

Exams

Exam 1 (Take Home). Due on Feb. 20th, 11.59 PM

Check Canvas for the code

 

 

Assignment and Exam Schedules