SYLLABUS FOR CS 2410

(CS Il - Introduction to Data Structures and Algorithms)

Spring 2009 (CRN: 20190, 3 credit hours)

Catalog description:(4-3-1) Multi-dimensional arrays, records (C++ structs), arrays of records, elementary searching and sorting algorithms, classes, data abstraction, object-oriented software development, pointers, dynamic data, reference types, linked structures, C++ templates, exceptions and recursion are required. Topics on time and space complexity, abstract one-d and two-d tables, stacks and queues, trees and graphs, powerful sorting and search methods may be introduced selectively.

Course prerequisites: CS 1410 and credit or enrolment in MATH 2305 or MATH 2401.

TEXTBOOK: Programming and Problem Solving with C++, 4th Edition (Chapter 11-18), by Nell Dale and Chip Weems. Jones and Bartlett Publishers, 2004.

INSTRUCTOR: Dr. Hong Lin, Office: S-717, Phone: 713 221 2781, Office hours: MTWR 1:00-3:30pm, or by appointment, Website: http://cms.dt.uh.edu/faculty/linh/courses/cs2410

Course grade: The course average is determined by at least two major tests, and a comprehensive final exam (at least 25% of the total), 4 major programming projects and graded lab assignments which thoroughly cover all required topics. The course grade is determined by the standard college formula based on the course average: "A" (90 100), "B" (80-89), "C" (70-79), "D" (60 69), or "F' (0-59). Major tests are close book and performed in class. Test dates are announced in course schedule. The student must have a passing average (60+) on both test and programming projects to pass this course, otherwise he or she should receive at best a "D".

Grading Scale: There will be two tests (20% each), and a comprehensive final exam (25%). Programming

projects (25%), In-Class exercises (10%).

A -- 90 above, B -- 80-89, C -- 70-79, D -- 60-69, F -- below 60

Programming projects: One of the key objectives of this course is to help the students to understand the modern programming concepts and methodologies, and to be able to use the knowledge and experience in upper-level courses, and solving application problems. Therefore, programming projects must be assigned throughout the semester, and a single project should consist of multiple components. Laboratory sessions should be used for students to master simple required components of the course. These components include arrays, structs, arrays of records, searching and sorting algorithms, classes, data abstraction, object-oriented software development, pointers, dynamic data, reference types, linked structures, C++ templates, exceptions and recursion. Selected topics on time and space complexity, abstract one-d and two-d tables, stacks and queues, trees and graphs, powerful sorting and search methods may be covered, according to the course proceeding. Projects must be completed by individual work. No group projects are permitted. If students turn in programs with similarity that indicates plagiarism, all involved students will be given a zero. Projects should be turn in on due date. Exceptions can only be made for emergency cases. In any cases, late submission will entail grade penalty on 10 points per day basis; and no submission late more than 1 week will be accepted.

Educational objectives: Upon successful completion of this course, a student should: 

i) Be able to use multidimensional arrays, record, arrays of records (structs), and hierarchical records in practice. 

ii) Be able to apply fundamental sorting and searching algorithms such as Selection Sort, Bubble Sort, Insertion Sort, Linear Search and Binary Search to sort and to search objects in an array of simple data type as well as structured data types. 

iii) Have some idea on comparing different algorithms with big O notation. 

iv) Be able to define an abstract data type (ADT) with class specification and implementation, and use class objects to solve basic application problems (including private/public members, friend function and operator overloading). 

v) Understand fundamental concepts of object oriented software developments, such as base class, subclass, virtual functions containment, encapsulation, and inheritance with actual examples in C++ or Java. 

vi) Be able to use pointers and new, delete operations to allocate and to de-allocate memory space dynamically, to use ->, &, * operators, and to access dynamic data correctly. 

vii) Be able to use linked structure to solve basic application problems with insertion and deletion of a node anywhere in the list. 

viii) Understand recursive algorithms and functions, and be able to  implement recursions in high level languages as a problem solving tool. 

ix) May have some knowledge of high level abstractions of ADT definitions of the lists, tables, stacks and queues, as well as their implementations with C++ classes and templates. 

x) May be introduced to topics selected from trees and graphs, powerful sorting algorithms such as Shell Sort, Merge Sort, Quick Sort, Heap Sort , hashing, time-­space complexity or others.

Course and lab content:

UNIT

(Text Chapter)

Topic

Lab Assignment

(Lab Manual Chapter)

UNIT I (Chap 11)

Data Abstraction, Records and Class

C++ records, hierarchical records, C++ classes. (chapter 11)

UNIT II

(Chap 12)

One- and Multi-dimensional arrays, arrays of records.

Selected Lab exercises from Chapter 12

UNIT III (Chap 13)

Array-based lists, sorted and unsorted lists, sequential binary search, character strings

Unsorted and Sorted array-based lists, character strings (Chapter 13)

UNIT IV

(Chap 14)

Fundamentals of object oriented software development

Classes, subclasses, inheritence, virtual methods (Chapter 14)

UNIT V

(Chap 15)

Pointers, dynamic data, reference type, classes and dynamic data.

Pointer variables, dynamic data, classes and dynamic data (Chapter 15)

UNIT VI

(Chap 16)

Linked structure

Unordered linked lists, linked lists of objects, sorted lists of objects (Chapter 16)

UNIT VII

(Chap 17)

Templates and Exceptions

Template functions and classes, exceptions (Chapter 17)

UNIT VIII (Chap 18)

Recursion

Recursive algorithms with simple variables and structured variables, recursion using pointer variables, comparison between recursion and iteration (Chapter 18)

General University Policies and Procedures: All students are subject to UH-Downtown's Academic Honesty Policy and to all other university-wide policies and procedures as they are set forth in the UH-Downtown University Catalog and Student Handbook. The Academic Honesty Code is embraced by all members of the University of Houston-Downtown academic community and is an essential element of the institution’s academic credibility. The Honesty Code states "We will be honest in all our academic activities and will not tolerate dishonesty." The purpose of the Academic Honesty Policy is to deal with alleged violations of the Honesty Code in a fair and consistent manner. The policy is administered jointly by students and faculty. It is each student's responsibility to read and understand the Academic Honesty Policy.  It may be found in the Student Handbook.

CHEATING: Instances of cheating will be handled according to departmental policy. Cheating covers any case in which a student has received unauthorized aid in his/her performance that contributes to a course grade or submits material contributing to a course grade with the intent to deceive the instructor or grader. If the unauthorized aid includes help from another student, then that student is considered to have cheated as well. Students are expected to submit assignments that are entirely their own work. A common example of cheating is to copy another person’s program or homework assignment. If a student cheats on a homework assignment, then he/she will receive a grade of zero (a grade of F) for that item as will anyone assisting him/her in an unauthorized way. If a student cheats on an exam or the final, he/she will receive a failing grade for the class. All cases of cheating will be reported to the Department Chairman and follow university policy on academic honesty issues.

Class Policies: Students are required to attend all classes on time. Absence, tardiness and early withdraw will be recorded and sanctioned in the "In-class Exercises" part of the course work. Late submission will be evaluated according to the policy set forth in the "Programming Projects" section. No makeup exams will be given. With the presence of the proof of emergency, the grade for one missing exam will be replaced by the grade of the final exam.

Statement on reasonable accommodations: UHD adheres to all applicable federal, state, and local laws, regulations, and guidelines with respect to providing reasonable accommodations for students with disabilities. Students with disabilities should be notified to register with Disabled Student Services and contact the instructor in a timely manner to arrange for appropriate accommodations.

 

CS2410 Spring 2009 - Course Schedule

(This schedule contains class contents, assignments, updates, etc. You are supposed to check it regularly throughout the semester)

 

Week

Monday

Wednesday

1

1/19
Martin Luther King Holiday

1/21
Chapter 11: Simple Versus Structured Data Types, Records, Unions
Exercise 1: AptType.cpp

2

1/26
Chapter 11: Data Abstraction, Abstract Data Types, C++ Classes
Exercise 2: timetyp2.h, timetyp2.cpp, client.cpp

1/28
Chapter 11: Specification and Implementation Files, Guaranteed Initialization with Class Constructors
Exercise 3: timetyp2.h, timetyp2.cpp, client.cpp
Project 1 Handout

3

2/2
Chapter 12: One-D Arrays
Exercise 4

2/4

Chapter 12: Arrays of Records and Class Objects, Special Kinds of Array Processing, Two-D Arrays, Processing Two-D Arrays
Exercise 5: safearray.h, safearray.cpp

4

2/9
Chapter 12: Passing Two-D Arrays as Arguments, Another Way of Defining Two-D Arrays, Multidimensional Arrays
Exercise 6: arraycopy.cpp

2/11
Review for 1st Test

5

2/16
1st Test

2/18

Chapter 13: The List as an Abstract Data Type, Unsorted Lists
Exercise 7

List.h; List.cpp

Lab: Programming Warm-up exercises 14-18 p583

Project 1 Due

Project 2 Handout

6

2/23

Chapter 13: Sorted Lists
Exercise 8

SortedList.h; SortedList.cpp

2/25
Chapter 13: Understanding Character Strings
Exercise 9

Cstring.cpp; Mammals.txt

7

3/2
Chapter 14: Object-Oriented Programming, Objects, Inheritance
Exercise 10

Address.h; Address.cpp

3/4
Chapter 14: Composition, Dynamic Binding and Virtual Functions, Object-Oriented Design
Exercise 11

timedate.h, timedate.cpp

8

3/9

Chapter 15: Pointers
Exercise 12

HighestScore.cpp

3/11
Chapter 15: Dynamic Data, Reference Types
Exercise 13

numLetters.cpp

Project 2 Due
Project 3 Handout

 

3/16
Spring break

3/18
Spring break

9

3/23
Chapter 15: Classes and Dynamic Data
Exercise 14

expArray.h, expArray.cpp

3/25
Review for 2nd Test

10

3/30

2nd Test

4/1

Chapter 16: Sequential Versus Linked Structures, Array Representation of a Linked List, Dynamic Data Representation of a Linked List, Part 1
Exercise 15

Slist2.h, Slist2.cpp

11

4/6

Chapter 16: Sequential Versus Linked Structures, Array Representation of a Linked List, Dynamic Data Representation of a Linked List, Part 2
Exercise 16

Slist2.h, Slist2.cpp

4/8
Chapter 16: Representation of a Linked List, Dynamic Data Representation of a Linked List (continued), Choice of Data Representation

Exercise 17

Slist2.h, Slist2.cpp

Project 3 Due
Project 4 Handout

12

4/13

Chapter 17: Templates Functions, Template Classes
Exercise 18

GetData.cpp

4/15
Chapter 17: Exceptions
Exercise 19

Sum.cpp

13

4/20

Chapter 18: What is Recursion, Recursive Algorithms with Simple Variables
Exercise 20

Fibonacci.cpp

4/22
Chapter 18: Recursive Algorithms with Structured Variables
Exercise 21

Palindrome.cpp

14

4/27

Chapter 18: Recursion or Interation
Exercise 22

Slist2.h, Slist2.cpp

4/29

exercise

Project 4 Due

15

5/4

Review for Final Test

5/6

Reading day

16

5/11

No class

5/13

Final Exam: 10:00am – 12:30pm