SCMP 218.00 Data Structures

UML Association vs Aggregation vs Composition(opens in a new tab)

James Skon, Chalmers 428, 740-427-5369
Department of Mathematics and Statistics
Location: Hayes 311
Time: TR 2:40-4:00

Office hours:

Please sign up for an appointment here: Link
Walk-ins are welcome, but people with appointments are given priority.

  • Tuesday & Thursday 9-12, In person. Chalmers 428. Sign up
  • Virtual: Monday & Wednesday 9-11: Request virtual appointment: Sign up

Class Resourses.

  1. Text: Data Structures Using C++ 2nd Edition, D. S. Malik. PDF Link.
  2. Programming Environment: There is a class team at replit.com. Click on this link to join: Link. You mustfollow the invitation, and register with your Kenyon email. If you are interested in programming on your own computer, you can find more options for IDE’s for C++ programming here.
  3. Moodle. You will be required to turn all assignment in here, as well as for quizzes.

Course Description and Learning Objectives

The main goal of this course is to learn basics of fundamental data structures used in computer science and practice using them to solve problems. These include: stacks, queues, lists, heaps, hash tables, trees, and graphs. We will also examine a number of searching and sorting algorithms. Both array-based and linked implementations are analyzed where appropriate. You will also learn how to use the pre-written classes contained in the Standard Template Library (STL). An introduction to analysis of algorithms and the big-O notation will be given. Analysis of major algorithms will be discussed. Another important learning goal in this course is to practice software engineering principles and write programs with good user interface. Good programming practices are emphasized. We will cover most of the chapters in the textbook. We will be using pair programming so that you practice software development as a team in a collaborative way. This is often a necessary and highly valued skill. Many real life software development projects are collaborative.
Prerequisite: Scmp 118 or equivalent, proficiency in C++.


Grading and Evaluation Criteria


Final grades will be determined based on the performance in the following components.

ComponentPercentage
Quizzes20%
Weekly Labs in Pairs45%
Midterm Exam10%
Final Exam25%
100%

Quizzes: To encourage regular study, there will be a short quiz (about 10 minutes) every day. Some of the quizzes will be on Moodle, some on paper. You must bring a laptop to the class every day. Of the 20+n quizzes, the lowest n scores will be dropped. No make ups will be given for missed quizzes for any reason, except possibly for long-term special circumstances. The quizzes may cover content from the sections that you are expected to read for that day. Therefore, it is imperative that you do the readings before each class. We won’t have time in class to go over every detail in the book. You are still responsible for the material. See the course website for the agenda and reading assignment for each day.

Labs

The programming projects are the most important aspect of this course. Consequently, they will have the largest weight in the final course grades. Programming assignments will be assigned weekly and some assignment consist of multiple programs. You will be working in pairs for the programming assignments. See the course website for more info on assignments and pair programming.

Exams

Midterm exam: March 2
Final Exam: Final exam will have two components: Test and project. Due, date…

Participation/Attendance/Engagement

Pedagogically, regular engagement with the course material is essential for deep learning and it is an expectation in this course. Staying healthy is a prerequisite for this kind of engagement. Unless you have a legitimate excuse, you are expected to attend the class meetings. Legitimate excuses include: illness, religious observations, college’s official
athletic events and similar situations. If you have a situation that prevents you from attending the class, please communicate with me as soon as possible. Timely communication is a key factor here. Math Dept’s attendance policy applies to this course.
Much of the class time will be devoted to a discussion of the major concepts from the assigned reading and hands-on
activities to practice the concepts. Therefore, attending class regularly and being prepared is essential. After each assignment is due, 2-3 people will be randomly selected to briefly present their program and algorithms. Make sure you can explain the code you submit for each assignment. Everyone is expected to actively participate in class discussions and activities. Your grade on this component will be based on the combination of your attendance, the level of your engagement in class activities and discussions, and how well you explain your code. Contributing to the discussions on Moodle forums will also count.

Program Grading

All programs will be graded according to the following components

  • Correctness: Each program should conform to specifications stated in the problem statement. A program should demonstrate correct handling of ordinary input, special cases, and error conditions.
  • Design: Your programs should be modularized into coherent independent functions or classes with strong cohesion.
  • User Interface: Writing a reasonable test program with good user interface is always a default requirement for all programming assignments in this course since this course is also about program design. So, this requirement is always part of the assignments. Having solved a problem correctly is not good enough to get full credit. You need to write a good test program and design a good user interface as well. A good test program and a good user interface are not fully prescribed and they may change from program to program. It is something you need to think about for each assignment. An obvious example of a good user interface would be giving the user the chance to repeat a computation before exiting the program (let the user repeat as long as s/he likes). Make sure your program tests all aspects of the assignment. Another point to consider is that asking too much input from the user is not convenient.
  • Style and Documentation: Your program should be easy to read and understand. This involves program indentation, modular design, variable names, user interface and comments.
  • Efficiency: Algorithms should be efficient with respect to both time and space. You should spend thinking about designing good algorithms rather than using brute-force. Be prepared to justify your choice of algorithms

NOTE: If a submitted program fails to compile it will be graded out of 50% of the total point value. If a submitted program has a run-time error, then it will be graded out of 75% of the original point value.

Late Policy: No work will be accepted late, unless permission is granted by the instructor in advance. Do not modify your
submitted files after the due date, until graded.

Academic Honesty: The rules set forth in the 2021-2022 Course Catalog apply to all aspects of this course.
LINK. In general, any work submitted for credit must result directly from your own understanding, thoughts, and ideas. Presenting the work of others as your own is strictly prohibited. For the weekly programming assignments, follow the guidelines for pair programming carefully. If a partner does not do their fair share of the work, please let your professor know.

Disabilities: If you have a disability which requires an accommodations in this class, please feel free to discuss your concern with me, but you should also consult the coordinator of student access and support services (x5453). It is
people in this ooffeo who has the authority and expertise to decide on the accommodations that are proper for your disability. Though I am happy to help you in any way I can, I cannot grant any accommodations without a notification from e coordinator of student access and support services.

How to Study for this Class

  • Read the textbook before the class (and watch the accompanying video when there is one available). You may not understand everything in the first reading but that’s OK. Do your best. Take notes to ask questions in class.
  • Join the class meetings on time and actively participate in class discussions and activities. Do not hesitate to ask and answer questions or contribute to class discussions in other ways. Postings in Moodle forums count as participation.
  • Start doing the lab assignments early. You know from your earlier experience that they will often take longer than you think.
  • I strongly encourage you to have a partner and follow the guidelines for pair programming for weekly programming assignments.
  • If you have an issue about your program that you cannot resolve with your partner, or if you have other questions about the material, come to my office hours.
  • You are welcome to chat with Professor Skon for matters outside the course content as well.

It is expected that you read all the sections to be covered BEFORE the class and come to class prepared to discuss the topics.

File for labs:

Here are files needed for labs: Link

Check this page regularly for updates . This is a tentative schedule to be updated as needed.

DateSlidesExamplesSection/Topic/Reading AssignmentQuizDue
Tue, Jan 17Intro
Ch1
Introduction, Logistics, A quick review, Chp 1: Software Engineering Principles
Lab 1. Submit to Moodle.
Thu, Jan 19Intro
Pairs
Ch1
SelectionSortChp 1: Run Time Analysis, and Big-O notationInfo Form
Tue, Jan 24Ch1
Clock
Clock2
Shapes
Point
Chp 1 and 2: OOPS concepts, Introduction to C++ Classes
UML UML Class Diagram
Google Diagrams
UML How To
UML Diagrams
1
Thu, Jan 26Ch2Shapes
Employee
ReturnRandom
Chp 2: Operator Overloading. Inheritance and Templates.
Lab2
2
Tue, Jan 31Ch3pointers
randompoints
object pointers
Chp 3: PointersPointer activity.
Template Activity
Lab 1 
Thu, Feb 2pointers
object pointers
Practice with Big-O notation.
More on Pointers
3
Tue, Feb 7ArrayType
ArrayShapes
Chp 3: Array based lists, Virtual functions and abstract classes
Lab 3
4Lab2
Thu, Feb 9Ch4, Ch13Vector (ex)
STL Containers
VectorShapes
Queue (more) (ex)
deque (more) (ex)
set (ex)
map (ex)
Ch 4 and 13: Introduction to STL, vector, deque, set, maps, iterators
Lab 4 
5
Tue, Feb 14STLSTL algorithms
Employee Example
Chp 4 and 13: Iterators, Algorithms, and practice6Lab 3
Thu, Feb 16Ch5Linked List Class
Link list add end
Link list sorted
Chp 5: Intro to Linked Lists
Lab 5 
7
Tue, Feb 21Linked List 1
Linked List 2
Animations
Linked Lists continued.
Thu, Feb 23MapIndex
Virtual Functions
Doubly Linked Lists
Circular Linked Lists
Recursion POGIL1
LL finished and LL variations (douby linked lists, circular linked lists etc.). Intro to Recursion.8
Tue, Feb 28Ch 6
Pair Example
Recursion POGIL2
PascalTriangle
Chp 6: Recursion. Some video lessons on recursion from Scmp 118. Part1Part2
Memoization
Thu, Mar 2Study GuideMidterm ExamLab 4
Mar 4 – Mar 19SPRING BREAK
Tue, Mar 21Word Find
Permutations
MazeSolve
Recursion continued (recursion and backtracking)
Lab 6
Thur, Mar 23Ch 7Stacks
Balance Parenthesis
Call Stack
Chp 7 Stacks
Lab 7
9Lab 5
Tue, Mar 28WordSearch Stack
Maze Stack
Reverse String
N-Queens
Queues (Array, LL)
Chp 7 Stacks10
Thur, Mar 30Ch 8Expression Evaluation
Queue Implementation
Chp 8: Queues
Lab 8
11Lab 6
Tue, Apr 4Peirce Lines
Priority Queues
Chp 8 finished. (+ Intro to Linux)
Linux Commands
12
Thu, Apr 6Ch 9Linear Search
Binary Search
Hashing Intro
Hash Functions Intro
Hash Functions
Linear Probing
Animations
Chp 9: Searching and Hashing Algorithms
Lab 9
Lab 7
Tue, Apr 11Hash Collision HandlingChp 9 Finished13
Thu, Apr 13CH 10Sort Animations
More Animations
Selection Sort
Insertion Sort
Bubble Sort
Merge Sort
Ch 10: Sorting algorithms: Selection Sort, Insertion Sort, Bubble Sort, and Merge Sort
Lab 10
14Lab 8
Tue, Apr 18Sort Animations with sound
Shell Sort
Quick Sort
Ch 10: Shell Sort and Quick Sort. Animations of various sorting algorithms as folk dances. 
MergeSort vs QuickSortShellSort. A slow sorting algorithm.
Thu, Apr 20
Remote
CH 11Binary Trees
Representation
Binary Search Trees
Binary Tree Traversal
Clone Tree
Ch 11: Binary Trees, Tree Traversals, Binary Search Trees (intro) (Remote Class – Meet link)Lab 9
Tue, Apr 25Functions as parameters
AVL Trees
 Ch11: Functions as Parameters, AVL Trees, Balancing AVL Trees15
Thu, Apr 27Greedy algorithms
Heap Sort
Animation
Ch 11: Heap Sort 16Lab 10
Tue, May 2Ch 12Animations
Introduction to Graphs
Representation of Graphs
Adjacency Matrix
Adjacency List
Graph Algorithms
Prim’s Algorithm
Kruskal’s Algorithm
Ch 12: Graphs17
Thu, May 4Depth First Search
Breadth First Search
Shortest Path
Chp 12: Graph Algorithms.
The Final Exam date: Thu, May 11, 6:30 pm.
18
Scroll to Top