SCMP 218.00 Data Structures 2024

James Skon, Chalmers 428, 740-427-5369
Department of Mathematics and Statistics
Location: Chalmers 300
Time: TR 2:40-4:00
  • Office hours:
    • Tuesday-Thursday 8-9am, 12-1am (Chalmers 428). Book Meeting LINK
    • Monday-Wednesday 10-12 pm (Location TBA) Book Meeting LINK

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

Class tutor: Tiffanie Ng
MSSC Hours: MSSC from 7:00-8:30pm on Tuesdays and Thursdays

Class Resourses.

  1. Text: Data Structures Using C++ 2nd Edition, D. S. Malik. PDF Link. Test source code: Link
  2. Programming Environment: You have a choice between Visual Studio Code or replit.com or. replit.com is web based, runs in the cloud and does not require you to install anything. However, it may be slow at times if you use the free version. Visual Studio Code is a integrated development envionment that runs on your own computer. It requires that you install software. For VS code You will need to install the C++ developor tools: Windows (C++), MacOS. (If the “code.” comand does not work: Link).
  3. GitHub. You will need a GitHub account associated with your Kenyon email address. Set up account (Usking a Username with your name in it). Log into account.
  4. GitHub Classrooms. Assignments will be given on GihHub Classrooms. You will need to join the classroom. In order to join click on this link for the first assignment : Introduction to GitHub. You will then be asked to identify your user name to associate you with the account. Then you will accept the assignment, and a GitHub project will be created for you. You can then either clone the assignment into replt.com, or onto you own computer using VS Code.
  5. Moodle. You will be required to turn all assignment in here, as well as for quizzes.

Prepare Programming Environment

Visual Studio with C++

Follow the instructions here: VS Code Setup with C++
Get the Hello World Program Running.

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.

Late Assignment policy

Getting work done is essential to success in this course. Late assignments are problematic, they create a backlog of work for the student, as well as a grading backlog for the professor.  Neither of these are optimal. Late assignment will be allowed, but ONLY when application has been made in advance. The following three options are permissible.  The form for requesting a extention is here: Request Form.

  1. One week extension.  This is for major conflicts with academic or other college responsibilities are known of in advance, and can be planned for.  For example a major assignment in another class (or classes) is overlapping with this assignment,  and you believe more time will with needed.  This request MUST be made at least one week before the assignment is due.
  2. Three day extension.  This is for conflicts or issues with course work or responsibilities that emerge while the assignmebnt is being worked on.  For example perhaps you hit a roadblock on the assignment, or you are srtruggle to keep up with all your courses due to somethinng that was not known in advance.  Appplications MUST be make at least three days before the assignment is due.
  3. 24 hour extension.  This is for when you are just struggling to get it right, but almost there. This application can be made up to the due date/time.

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
Aug 29Intro
Ch1
Introduction, Logistics, A quick review, Chp 1: Software Engineering Principles
Introduction to GitHub
Lab 0 – Get Program running
RSA Key Setup
CYGWIN on Windows
Sept 3Intro
Pairs
Ch1
SelectionSortLab 1
Chp 1: Run Time Analysis, and Big-O notation
Info Form
GitHub
Sept 5Ch1
Big-O

Clock
Point
Chp 1 and 2: OOPS concepts, Introduction to C++ Classes
UML UML Class Diagram
Google Diagrams
UML How To
UML Diagrams
UML Association vs Aggregation vs Composition
1Lab 0
Sept 10Ch2Complex
Shapes
Template
Chp 2: Operator Overloading. Inheritance and Templates.
Activity
Lab2
2
Sept 12Ch3randompointsChp 3: PointersPointer activity.
Template Activity
Lab 1 
Lab1 Roman Groups
Line Group Github Link
Sept 17More pointers
FunctionPointer
FunctionObjectPointer
Object pointers
Object pointers with inheritance
Practice with Big-O notation.
Notes
More on Pointers
3
Sept 19Animals
ArrayType
ArrayShapes
Chp 3: Array based lists, Virtual functions and abstract classes
Lab 3
4Lab2
Sept 24Ch4, Ch13Vector (ex)
STL Containers
VectorShapes
List (more)
Queue (more) (ex)
deque (more) (ex)
set (ex)
map (ex)
UniqueSubStrings
Shortest Path Search
Ch 4 and 13: Introduction to STL, vector, deque, set, maps, iterators
Queue
Deque
Sets
Lab 4 
5
Sept 26STLMap Iterator
CampusMap
STL algorithms
CountWebpageWords
AlgorithmsDemo (US States)
Chp 4 and 13: Iterators, Algorithms, and practice
Web Words Activity
6Lab 3
Oct 1Ch5Virtual Functions
Linked List Activity
FurnitureStore
Chp 5: Intro to Linked Lists
Lab 5 
Practice Midterm
7
Oct 3Doubly Linked Lists
Linked List Activity
Animations
Linked Lists continued. Douby linked lists.
Doubly Linked List
Oct 8Doubly Linked Lists
Circular Linked Lists
Recursion POGIL1
Peirce Lines
LL finished and LL variations (circular linked lists etc.). Intro to Recursion.8
Midterm Break
Oct 15Ch 6Pair Example
Recursion POGIL 2
PascalTriangle
Chp 6: Recursion.
Memoization
Midterm Practice
9Lab 4
Oct 17Study GuideMidterm Exam
Kattis Team Name
Oct 22Reverse String
Expression Evaluation
Word Find
Permutations
URLExtractor
N-Queens
Recursion continued (recursion and backtracking)
Lab 6
Oct 24Ch 7Stacks
Balance Parenthesis
MazeSolve
Call Stack
Chp 7 Stacks
Lab 7
10Lab 5
Oct 29Stack and Recursion Case Study: DAG & Topological Sort
Maze Stack
Queues (Array, LL)
Chp 7 Stacks11
Oct 31Ch 8Queue Implementation
Simulation Activity
Peirce Lines
Chp 8: Queues
Lab 8
12Talk Attendance
Lab 6
Nov 5Priority Queues
Heros Task Manager
Linux
Linux at Kenyon
Chp 8 finished.
Linux Commands
13
Nov 7Ch 9Linear Search
Binary Search
Hashing Intro
Hash Functions Intro
Hash Functions
Linear Probing
Animations
Chp 9: Searching and Hashing Algorithms
Lab 9
14Lab 7
Nov 12Quote
Hash Collision Handling
HashBucketsWithChaining
In Class Activity
Chp 9 Finished
15
Nov 14CH 10Sort Summary
Sort Animations
More Animations
Selection Sort
Insertion Sort
Bubble Sort
Merge Sort
Ch 10: Sorting algorithms: Selection Sort, Insertion Sort, Bubble Sort, and Merge Sort
In Class Sorting Activity
Lab 10
C++Cast
16Lab 8
Nov 19Sorting Top 10
Sort Animations with sound
Shell Sort
Shell Sort Demo
Quick Sort
Quick Sort Demo
Quicksort visualization
Ch 10: Shell Sort and Quick Sort. Animations of various sorting algorithms as folk dances. 
MergeSort vs QuickSortShellSort. A slow sorting algorithm.
17
Nov 21CH 11Binary Trees
Representation
Binary Search Trees
Binary Tree Traversal
Clone Tree
Ch 11: Binary Trees, Tree Traversals, Binary Search Trees (intro)
Tree Activity
18Lab 9
Dec 3Functions as parameters
AVL Trees
Animation
B-Trees
Animation
 Ch11: Functions as Parameters, AVL Trees, Balancing AVL Trees, B-Trees19
Dec 5Greedy algorithms
Greedy Examples
Huffman Code Example
Heap Sort
Animation
Ch 11: Heap Sort20
Dec 10Ch 12Animations
Introduction to Graphs
Representation of Graphs
Adjacency Matrix
Adjacency List
Prim’s Algorithm
Kruskal’s Algorithm
Ch 12: Graphs21
Dec 12Depth First Search
Breadth First Search
Shortest Path
Maze Solve Recursive
Maze DFS(Stack) and BFS(Queue)
Chp 12: Graph Algorithms.22Lab 10
Finals weekMoodle Test: Tuesday, December 17 at 6:30 p.m-9:30p.m.
Kattis Test
starts: 2024-12-14 13:00:00 
ends: 2024-12-18 13:00:00

Teams:

Scroll to Top