CS 23001 CS II: Data Structures and Abstraction

Spring 2020


Instructor: Xiang Lian

Office Location: Mathematics and Computer Science Building, Room 264

Office Phone Number: (330) 672-9063

Web: http://www.cs.kent.edu/~xlian/index.html

Email: xlian@kent.edu

Course: CS II: Data Structures and Abstraction

CRN: 12444, 12445, 12446, 12447

Prerequisites: Minimum C grade in CS 13001 (Computer Science I: Programming & Problem Solving) or CS 13012 (CS IB)

Corequisite: CS 23022 (Discrete Structures for Computer Science) (need to have taken or be taking the same term)

Time: 2:15pm - 3:30pm, MW

Classroom Location: Smith Hall (SMH), 110

Course Webpage: http://www.cs.kent.edu/~xlian/2020Spring_CS23001.html


Instructor's Office Hours: 10:30am - 1:30pm, MW; or by appointment


Graduate Assistants / Lab Instructors:


Debobroto Das Robin (Email: drobin@kent.edu)


Corey Bryant (Email: cbryan20@kent.edu): Office: MSB 152; Office hour: Tuesday 11am-12pm


Ahmed Al-Baghdadi (Email: aalbaghd@kent.edu): Office: MSB 253; Office hour: Tuesday and Thursday 11am-12pm


Section No.







T, 12:05pm - 02:00pm

MSB 162

Robin (Lead), Ahmed



R, 12:05pm - 02:00pm

MSB 162

Ahmed (Lead)



T, 04:25pm - 06:20pm

MSB 162

Robin (Lead), Corey



F, 12:05pm - 02:00pm

MSB 162

Corey (Lead)


Lab Website: https://svn.cs.kent.edu/courses/cs23001_lab/svn/index.html

Tutoring Website: https://www.kent.edu/cs/undergraduate-cs-tutoring

Enrollment/Official Registration of this Class

The official registration deadline for this course is 01/19/2020. University policy requires all students to be officially registered in each class they are attending. Students who are not officially registered for a course by published deadlines should not be attending classes and will not receive credit or a grade for the course. Each student must confirm enrollment by checking his/her class schedule (using Student Tools in FlashLine) prior to the deadline indicated. Registration errors must be corrected prior to the deadline.



For registration deadlines, enter the requested information for a Detailed Class Search from the Schedule of Classes Search found at:



After locating your course/section, click on the Registration Deadlines link on the far right side of the listing.


Last day to withdraw: 03/22/2020


Textbook and Reference Books (optional, not required)

v  Data Structures and Other Objects Using C++, Main and Savitch, Addison Wesley

v  C++ Plus Data Structures, Dale, Free online access via KSU library/Safari

v  The C++ Programming Language, Stroustrup, B., Addison Wesley

v  Practical Debugging in C++, Ford & Teorey, Prentice Hall



v  There are a number of C++ books on line (free) through the KSU Library http://kentlink.kent.edu. On Safari, the most similar text book to Main and Savich is "C++ Plus Data Strutures" by Dale.

v  A nice site for visualizations of data structures and algorithms VISUALGO

v  Make

o    A couple examples of multiple files makefiles are in the shared folder in svn.

o    Makefile tutorial (under advanced)

o    GNU Make manual

o    GNU coding standards

o    A YouTube tutorial on makefiles.

v  SVN:

o    A YouTube tutorial on using subversion.

v  C++ file IO:

o    A couple useful examples are in the shared folder in svn.

o    Google "c++ file io" will get a number of tutorials and YouTube videos.

v  Online Resources for C++:

o    http://www.cppreference.com

o    http://www.cplusplus.com/

o    STL documentation: www.cplusplus.com/reference/stl/.

o    http://www.devx.com/cplus/

o    https://www.tutorialspoint.com/cplusplus/cpp_useful_resources.htm

v  The Definitive C++ Book Guide and List on Stackoverflow. This has a number of good books for best practices and advanced topics.

v  Tutorial: https://www.lynda.com/ (Sign in with the organization portal)

v  Software: https://apps.kent.edu/SoftwareCatalog



Catalog Description

Computer science concepts and problem solving focusing on data structure and abstraction. Object-oriented concepts and programming including encapsulation, information hiding, object design, generics, polymorphism and an introduction to inheritance. Dynamic memory structures including dynamic arrays, pointers, linked-lists and the use of recursion for problem solving. Abstract data types including stacks, queues, lists, trees and graphs.

Advanced computer programming design, and development with a primary focus on data structures and abstraction using an object oriented programming language.

Course Objectives

v  Continue developing a disciplined approach to problem solving methods and algorithm development.

v  Provide a clear understanding of the concepts of abstract data types.

v  To teach a number of the basic algorithms and data structures used in computer science.

v  To teach the concepts of object oriented programming.

v  To provide a foundation for further studies in Computer Science.

v  On completion of this course, students must have a basic understanding of the concepts of abstract data types and object oriented programming methods. Data structures such as lists, stacks, queues, strings, and trees must be understood. The student will have working knowledge of the concepts of classes and objects, operator overloading, constructors, destructors, and generics. The concepts of dynamic data structures and recursion must be well understood.


Learning Objectives

Students will be able to apply and compare the basic abstract data structures used in computer science. These include strings, sets, stacks, queues, lists, and binary trees. Students will understand and demonstrate their ability to construct abstract data types and solve problems using an object oriented programming language. This will include demonstrated understanding of recursion, dynamic memory management, generics, and operator overloading.

Course Content

Abstract Data Types (ADTs) and Object Oriented Concepts:

v  Definition of ADTs

v  Encapsulation and information hiding

v  Classes, methods, constructors, and destructors

v  Information hiding: Public, private, (and protected)

v  Operator overloading and polymorphism

v  Generics (templates)

v  Inheritance, polymorphism, and virtual functions (dynamic variable binding)

Dynamic Memory Structures:

v  Allocation and de-allocation of memory (new, delete)

v  Dynamic Arrays

v  Pointers, Linked Lists (insertion, deletion, etc.)

Abstract Data Structures & Algorithms:

v  Array, multi-dimensional arrays records, files, strings

v  Lists, stacks, and queues, sets, bags, vectors

v  Containers and iterators

v  Infix, prefix, and postfix notations and conversion algorithms

v  Binary trees, binary search trees

v  Recursion: Design and implementation of recursive functions

v  Hashing and priority queues

v  Brief introduction to graphs & associated algorithms

Additional Topics:

v  Multi-file programs, make

v  Testing and debugging techniques

v  Exception handling


Tentative Schedule




Week 1 (Jan. 13)



Project 1


Week 1 (Jan. 15)

Abstract Data Types (ADT) and the Class Construct [slides]


Week 2 (Jan. 20)


Martin Luther King Jr Day; No classes

Week 2 (Jan. 22)

Classes, Objects, Constructors, and Operator Overloading [slides]


Week 3 (Jan. 27)

Compiling, Software Testing, Identifier Naming [slides]

Project 1 - Milestone 1, Due on Monday, Jan. 27, 9am Extended to Friday, Jan, 31

Week 3 (Jan. 29)

Constructors, Operator Overloading, I/O, Set ADT


Week 4 (Feb. 3)

String ADT (1) [slides]

Project 1 - Milestone 2, Due on Monday, Feb. 3, 9am

Week 4 (Feb. 5)

String ADT (2)


Week 5 (Feb. 10)

Introduce Pointers & Dynamic Memory [slides]

Project 1 - Milestone 3, Due on Monday, Feb. 10, 9am

Week 5 (Feb. 12)

Pointers, Dynamic Memory, and Dynamically Allocated Arrays [slides]

Project 2


Week 6 (Feb. 17)

Copy constructor, destructor, assignment, swap


Generics - Templates in C++ [slides]

Midterm Exam Week (Lab Sessions)

Project 2 - Milestone 1, Due on Monday, Feb. 17, 9am

Week 6 (Feb. 19)

Stacks, prefix, postfix, infix (1) [slides]


Week 7 (Feb. 24)

Stacks, prefix, postfix, infix (2) [slides]

Project 2 - Milestone 2, Due on Monday, Feb. 24, 9am

Week 7 (Feb. 26)

Recursion [slides]


Week 8 (Mar. 2)

Queues [slides]

Project 2 - Milestone 3, Due on Monday, Mar. 2, 9am

Week 8 (Mar. 4)

Linked Lists, Stack [slides]


Week 9 (Mar. 9)

Queue & Linked Lists [slides]

Project 2 - Milestone 4, Due on Monday, Mar. 9, 9am

Week 9 (Mar. 11)


Project 3


Week 10 (Mar. 16)

Double Linked Lists [slides] [code (incomplete)]

Project 3 - Milestone 1, Due on Monday, Mar. 16, 9am; extended to Monday, Mar. 30, 9am

Week 10 (Mar. 18)

Containers/Iterators [code (v2)]

Last Day to Withdraw: 03/22/2020

Week 11 (Mar. 23)


Mar. 23 - Mar. 29, 2020, Spring Recess; No Classes

Week 11 (Mar. 25)

Week 12 (Mar. 30)

Trees [slides] [code (incomplete)]


Week 12 (Apr. 1)

Binary Trees (1) [slides] [code (v2): btree.h, btree_test.cpp]



Week 13 (Apr. 6)

Binary Trees (2) [slides] [code]

Project 3 - Milestone 2, Due on Monday, Mar. 30, 9am; extended to Monday, Apr. 6, 9am

Week 13 (Apr. 8)

Backtracking and Recursion [slides] [code: color_map.h, color_map.cpp, color_map_main.cpp; data: map.txt]

Project 4


Week 14 (Apr. 13)

Inheritance & Dynamic Type Resolutions [slides] [code: shape.h, shape.cpp]

Project 3 - Milestone 3, Due on Monday, Apr. 6, 9am; extended to Monday, Apr. 13, 9am

Week 14 (Apr. 15)

Inheritance & Design Patterns [code: format.h, word_processor.h, format_main.cpp; data: quote.txt]


Week 15 (Apr. 20)

Exceptions [slides] [code: Error.h, stackerr.h, Stack.h, error_main.cpp]

Course Evaluation

Project 4 - Milestone 1, Due on Monday, Apr. 13, 9am; extended to Monday, Apr. 20, 9am

Week 15 (Apr. 22)

R-value references [slides] [code: string_rvalue.h]


Week 16 (Apr. 27)

STL [slides]

Project 4 - Milestone 2, Due on Monday, Apr. 20, 9am; extended to Monday, Apr. 27, 9am

Week 16 (Apr. 29)



Week 17 (Apr. 30 - May 7)

Final Exam (12:45pm - 3:00pm, Thursday, Apr. 30)

Project 4 - Milestone 3, Due on Monday, Apr. 27, 9am; extended to Friday, May 1, 9am (3 bonus points added to final score; hard deadline)



Academic calendar: https://www.kent.edu/academic-calendar

Final exam schedule: https://www.kent.edu/registrar/spring-final-exam-schedule

NOTE: Presentation dates and deadlines are tentative. Exact dates will be announced in class!!!

Scoring and Grading

Lecture and Lab attendance is a critical component of the course and is reflected in the final grade. The class participation grade will be determined in part by attendance along with in class quizzes or assignments. Additionally, credit will be given participating in online discussion in piazza. These assignments will be completed during the class period and handed in during the class. No makeups for in-class assignments will be given. The lab participation grade will also be derived from attendance and completing assignments during lab. Grades will be available via your Flashline account on Blackboard.


25% - Midterm Exam

35% - Final Exam

25% - Projects (4 projects, a part due each week)

5% - Lecture participation (attendance/inclass and online discussion)

10% - Laboratory (lab attendance and lab assignments)

Final Grading Scale:









































There is a laboratory associated with lecture. The lab is to complement lecture and support the application of materials learned. There will be a lab instructor; attendance and participation is required. The lab will consist in part of short lectures by the lab instructor and hands on exercises that will assist in the learning process. For each lab meeting there will be a score given and is based on attendance and successful completion of lab exercises.

Lab Website: https://svn.cs.kent.edu/courses/cs23001_lab/svn/index.html

Lab Policy: https://svn.cs.kent.edu/courses/cs23001_lab/svn/Info/lab_policy.html



Terminal: PuTTy (Windows) or Xcode (Mac)

Host name: wasp.cs.kent.edu or hornet.cs.kent.edu





There will be four substantial projects given over the term. These can be completed partially during the lab time, however, the bulk of the work will be completed outside of lab/lecture time. The requirement for these assignments will be posted on the course web page. The projects will be broken down into three to four parts (milestones). Each part will have its own due date and count as a percentage of the total project grade. Due dates for each part of the project will be posted on the course website.


After the deadline of each milestone, you have the right to ask for re-grading your updated code. You need to send this request to lab instructors on Piazza (via private post) within one week after the deadline. For each milestone, you only have one chance for re-grading.


The general topics of the programs will be:

v  Abstract Data Types & Classes

v  Dynamic Memory and Containers

v  Linked lists and templates

v  Dynamic Data Structures (Complex Pointers)


Course Q&A System


piazza - https://piazza.com/kent/spring2020/cs23001/home

Please ask and answer questions about the labs and assignments (click on Q & A). ALL course communication should be done using piazza. You must login to use this. If you did NOT get an invitation by email, send the instructor a note by email and you will get an invitation.


CS 23001 Course Subversion Repository


Instructions for the course SVN repository [here]


General Program Requirements


Instructions for program requirements, assignment grading and submission [here] - read before handing in the first assignment.



Lecture Attendance Policy

Attendance in the lecture is mandatory. Students are expected to attend lectures, study the text, and contribute to discussions. You need to write your name on attendance sheets throughout the course, so please attend every lecture.

Students are expected to attend all scheduled classes and may be dropped from the course for excessive absences. Legitimate reasons for an "excused" absence include, but are not limited to, illness and injury, disability-related concerns, military service, death in the immediate family, religious observance, academic field trips, and participation in an approved concert or athletic event, and direct participation in university disciplinary hearings.

Even though any absence can potentially interfere with the planned development of a course, and the student bears the responsibility for fulfilling all course requirements in a timely and responsible manner, instructors will, without prejudice, provide students returning to class after a legitimate absence with appropriate assistance and counsel about completing missed assignments and class material. Neither academic departments nor individual faculty members are required to waive essential or fundamental academic requirements of a course to accommodate student absences. However, each circumstance will be reviewed on a case-by-case basis.

For more details, please refer to University policy 3-01.2: http://www.kent.edu/policyreg/administrative-policy-regarding-class-attendance-and-class-absence.

Make-up Policy

No make-up exams, in-class assignments or quizzes will be given except for university sanctioned excused absences. If you miss an exam/assignment/quiz (for a good reason), it is your responsibility to contact me before that date, or soon after the exam/assignment/quiz as possible.

Academic Dishonesty Policy

The University expects a student to maintain a high standard of individual honor in his/her scholastic work. Unless otherwise required, each student is expected to complete his or her assignment individually and independently (even in the team, workload should be distributed to team members to accomplish individually). Although it is encouraged to study together, the work handed in for grading by each student is expected to be his or her own. Any form of academic dishonesty will be strictly forbidden and will be punished to the maximum extent. Copying an assignment from another student (team) in this class or obtaining a solution from some other source will lead to an automatic failure for this course and to a disciplinary action. Allowing another student to copy one's work will be treated as an act of academic dishonesty, leading to the same penalty as copying.

University policy 3-01.8 deals with the problem of academic dishonesty, cheating, and plagiarism. None of these will be tolerated in this class. The sanctions provided in this policy will be used to deal with any violations. If you have any questions, please read the policy at http://www.kent.edu/policyreg/administrative-policy-regarding-student-cheating-and-plagiarism and/or ask.

Students with Disabilities

University policy 3-01.3 requires that students with disabilities be provided reasonable accommodations to ensure their equal access to course content. If you have a documented disability and require accommodations, please contact the instructor at the beginning of the semester to make arrangements for necessary classroom adjustments. Please note, you must first verify your eligibility for these through Student Accessibility Services (contact 330-672-3391 or visit www.kent.edu/sas for more information on registration procedures).

Statements for the Course

This course may be used to satisfy the University Diversity requirement. Diversity courses provide opportunities for students to learn about such matters as the history, culture, values and notable achievements of people other than those of their own national origin, ethnicity, religion, sexual orientation, age, gender, physical and mental ability, and social class. Diversity courses also provide opportunities to examine problems and issues that may arise from differences, and opportunities to learn how to deal constructively with them.


This course may be used to satisfy the Writing Intensive Course (WIC) requirement. The purpose of a writing-intensive course is to assist students in becoming effective writers within their major discipline. A WIC requires a substantial amount of writing, provides opportunities for guided revision, and focuses on writing forms and standards used in the professional life of the discipline.


This course may be used to fulfill the university's Experiential Learning Requirement (ELR) which provides students with the opportunity to initiate lifelong learning through the development and application of academic knowledge and skills in new or different settings. Experiential learning can occur through civic engagement, creative and artistic activities, practical experiences, research, and study abroad/away.




The instructor reserves the right to alter this syllabus as necessary.