Lecture, seminars and hands-on exercises in the lab (Group work may be involved)
- 
Review of Java including Classes, Interfaces, Inheritance, Exception handling and Text I/O 
- 
Introduction to Data Structures and Algorithm using Java 
- 
Algorithm Analysis 
- 
Recursion and efficiency 
- 
Search and Sorting Algorithms 
- 
Generics, Abstract Data Type and Java Collection Framework 
- 
List and Linked List 
- 
Stacks and Queues 
- 
Trees, Binary Tree, Binary Search Tree and AVL trees 
- 
Priority Queues and Heap 
- 
Hashing and Dictionary 
- 
Graph Algorithms 
- 
Algorithm Design Techniques 
The student will be able to:
- Discuss the fundamentals of algorithmic complexities;
- Carry out an elementary analysis of algorithms;
- Determine the space and time complexity of an algorithm;
- Identify and select the appropriate abstract data types such as queues, stacks for a small but realistic problem;
- Demonstrate more in-depth applications of other data types such as trees and graphs;
- Design and implement different Java programs using appropriate data structures;
- Apply problem solving approaches such as “divide and conquer” in designing algorithms;
- Explain and compare some of the fundamental searching and sorting techniques and algorithms;
- Develop the skills of the modular approach to produce maintainable, documented, and tested software of a realistic size using Java.
| 
 | |
| Quizzes/Tests | 0% – 15% | 
| Project/Assignments (Group work may be involved) | 15% – 25% | 
| Midterm Exam | 30% – 35% | 
| Final Exam | 30% – 40% | 
| Total | 100% | 
**In order to pass the course, students must, in addition to receiving an overall course grade of 50%, also achieve a grade of at least 50% on the combined weighted examination components (including quizzes, tests, and exams).
Prichard and Carrano, Data Abstraction and Problem Solving with Java: Walls and Mirrors, Latest edition,
Or any alternative textbook approved by the Department.
CSIS 1275 with a grade of C or better.
None
None
None