COMS3136 Essential Data Structures in C/C++

Fall 2023

Course info

Essential Data Structures in C/C++ is an intermediate course covering the programming languages C and C++, and the concept of Data Structures including arrays, linked lists, trees, and graphs. It is a designed as a bridge class between an introductory programming class like ENGI1006 and advanced programming classes in the 4000s. After the two-course sequence of 1006 and 3136, students should feel comfortable with the programming requirements of any 4000 level class in the Computer Science department. As such, it is primarily intended for non computer science majors, though any student is welcome to attend.

In addition to C, C++, and Data Structures, this class will make heavy use of git and UNIX programming tools. Students will become comfortable working in a fully remote, public-cloud based linux machine with only a terminal and a text editor. These skills are often considered a diffentiator between a “programming student” and a “programmer”.

In terms of other courses, this class is a fusion of COMS3157 and COMS3134. It includes the C/C++ content from 3157, but without the systems programming, and it includes the essential data structures from 3134 without the more theoretical/esoteric data structures discussed therein.

No prior knowledge of C/C++ is required for this course.

Textbook

There is no required textbook for this course. However, here are some suggested reference materials:

Supplementary materials

Software

All coursework will be performed on cloc.cs.columbia.edu, on which all required software is preinstalled.

Attendance

You are expected to attend all lectures, either in-person or virtually. Any material covered in class or in a homework is fair game for exams. All courses will be available in real time on Zoom, and recorded for asynchronous viewing or review.

Academic Honesty

REQUIRED READING: ACADEMIC HONESTY POLICIES

School Policies

In addition to this policy, the CS department’s academic honesty policy applies to this course. Please revisit your school’s standards for academic integrity:

Schedule

Note that the following schedule is tentative. It will be updated as we go.

# Date Topic Note Deadline
1 T 9/5 Course overview 00 R 9/7 NOON: HW0 Part A due
2 R 9/7 Compiling & linking; Makefile 01 F 9/8: HW0 Part B due
3 T 9/12 Makefile; Binary number; Data types 02, HW1
4 R 9/14 Binary number; Data types; Expressions & statements
5 T 9/19 Automatic v. static variables; Process address space
6 R 9/21 Recursion; Selection sort 03, HW2 Su 9/24: lab1 due
7 T 9/26 Merge sort; HW2 code walk-through
8 R 9/28 Pointers & arrays 04
9 T 10/3 Pointers & arrays
10 R 10/5 Heap allocation; Pointer to pointer; Struct HW3 Su 10/8: lab2 due
11 T 10/10 Function pointer; Linked list I 05
12 R 10/12 Linked list II 06
13 T 10/17 Linked list II; Big-O notation
14 R 10/19 I/O 07, HW4
15 T 10/24 Introduction to C++ F 10/27: lab3 due
16 R 10/26 MyString class I 08
17 T 10/31 MyString class II
- R 11/2 Midterm Exam 09, HW5
- T 11/7 No Class - University Holiday
18 R 11/9 Binary Search Tree I 10
19 T 11/14 Binary Search Tree II 11 F 11/17: lab4 due
20 R 11/16 Templates and STL I 12, HW6
- T 11/21 No Class - Cancelled
- R 11/23 No Class - University Holiday
21 T 11/28 Templates and STL II
22 R 11/30 Graph I: Data Structure Overview 13 Su 12/3: lab5 due
23 T 12/5 Graph II: DFS & BFS
24 R 12/7 Course wrap-up & review T 12/12: lab6 due
- T 12/19 Final: 7–10pm TBD