Introduction to Programming and Data Structures (COMPSCI 201)
Spring 2024-2025 / Session 3 [ 7 weeks, 35 + (8.75 | 8.75) + 8.75 hours ]
Course Period: January 6 - February 27, 2025
- Lectures: Monday / Tuesday / Wednesday / Thursday @ 10:00-11:15 (Classroom: IB 2071)
- Labs (Classroom: IB 3106)
- 001L: Thursday @ 13:15-14:30
- 002L: Thursday @ 14:45-16:00
- Recitation Wednesday @ 18:00-19:15 (Classroom: IB 2071)
- Peer Tutoring (ARC) Thursday @ 19:30-20:30 (Classroom: CCT E2103)
Instructor: Mustafa MISIR (Office: WDR 2106), mustafa.misir [at] dukekunshan.edu.cn / mm940 [at] duke.edu
Teaching Assistant: TBA (Office: TBA)
Programming is the process of designing, writing, testing, and maintaining the code that allows Software applications to function. It is a fundamental skill in Computer Science (CS) and an essential tool for solving complex problems in various fields, from web development to Artificial Intelligence (AI). At its core, programming involves creating a set of instructions, or an algorithm, that a computer can execute to perform specific tasks. The choice of programming language depends on the problem domain; for example, Python is popular for data science, C++ for high-performance applications, and Java for its versatility and portability.
Java, in particular, is a widely-used programming language known for its simplicity, reliability, and platform independence through the Java Virtual Machine (JVM). It is a fully object-oriented language, emphasizing reusability and modularity, which makes it ideal for learning core programming concepts like control structures, error handling, and object-oriented principles such as inheritance, encapsulation, and polymorphism.
When combined with Data Structures, programming becomes a powerful tool for building efficient and scalable software. Arrays, linked lists, stacks, queues, and trees serve as the foundation for many applications, from basic calculators to advanced search engines. Java's Collections Framework offers robust, ready-made implementations of these structures, allowing programmers to focus on algorithmic problem-solving rather than the intricacies of low-level data management.
This course will touch the basic programming concepts with their use in Java. Beyond programming, various fundamental Data Structures will be introduced alongside with relevant Algorithms and their evaluation. To be specific, data and representations, functions, conditions, loops, strings, lists, sets, maps, hash tables, trees, stacks, graphs, object-oriented programming, programming interface and software engineering will be covered. While no previous knowledge is required, some background is advantageous.
This course will be carried out in line with the DKU's animating principles. In particular, Collaborative Problem Solving, Research and Practice and Lucid Communication will be directly involved with this course while touching the Independence and Creativity aspect. The course will be primarily executed through in-class individual / group discussions, weekly assignments, and a final group project.
By the end of this course, you will be able to:
- define, and explain fundamental programming concepts such as data types, variables, and control structures
- design, and implement Java programs using classes, objects, and interfaces, following the core Object-Oriented Programming (OOP) principles
- construct, and utilize fundamental data structures such as arrays, linked lists, stacks, queues, hash tables, and trees
- analyze the efficiency of those data structures in terms of time (Big-O) and space complexity with basic relevant algorithms
- implement, and evaluate basic data-structure oriented algorithms of searching, sorting, and graph / tree traversal
- develop projects under a given set of given requirements in teams
Follow Canvas for resources and course activities
| Ed Discussion for announcements, questions and discussions | Academic Calendar
| Undergraduate Bulletin
| DKU Hub
The chart, on the right, shows how COMPSCI 201 fits to the DKU curriculum, where the abbreviations indicate the course types, i.e. D: Divisional, DF: Divisional Foundation, ID: Interdisciplinary and E: Elective. Refer to the DKU Undergraduate Bulletin (2024-2025) for more details.
Pre-requisite(s)
Anti-requisite(s)
Yet, COMPSCI 101 and STATS 102 are anti-requisites to COMPSCI 201.
Reference Books
Computer Science: An Interdisciplinary Approach, Robert Sedgewick, Kevin Wayne (1st Edition), 2016/2017, Addison-Wesley (DKU/Duke U. Ebook Access Code) [ Materials + Source Code ]
Supplementary Books:
- Introduction to Java Programming and Data Structures, Y. Daniel Liang (12th Edition), 2020/2021, Pearson [ Lecture Videos ]
- Java Foundations: Introduction to Program Design and Data Structures, John Lewis, Peter DePasquale, Joseph Chase (5th Edition), 2020/2021, Pearson
- Data Structures and Abstractions with Java, Frank M. Carrano, Timothy M. Henry (5th Edition), 2018/2021, Pearson
- Object-Oriented Design and Data Structures, Andrew Myers, Dexter Kozen (Online Edition), 2024 (Free Book)
- Guide to Data Structures: A Concise Introduction Using Java, James T. Streib, Takako Soma (1st Edition), 2017, Springer (DKU/Duke U. Free Access)
- Object-oriented Data Structures Using Java, Nell B. Dale, Daniel T. Joyce, Chip Weems (4th Edition), 2016, Jones & Bartlett Learning
- Data Structures: Abstraction and Design Using Java, Elliot B. Koffman, Paul A. T. Wolfgang (3rd Edition), 2015, Wiley
- A Concise Introduction to Data Structures using Java, Mark J. Johnson (1st Edition), 2017, CRC
- Java Software Structures: Designing and Using Data Structures, John Lewis, Joseph Chase (4th Edition), 2013/2014, Pearson
- Grokking Data Structures, Marcello La Rocca (1st Edition), 2024, Manning
- A Practical Guide to Data Structures and Algorithms using Java, Sally A. Goldman, Kenneth J. Goldman (1st Edition), 2007/2008, CRC
- Data Structures and Algorithms in Java, Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser (6th Edition), 2014, Wiley
- Data Structures and Algorithms in Java, Adam Drozdek (4th Edition), 2013, Cengage
- Data Structures Using Java, Duncan A. Buell (1st Edition), 2011, Jones & Bartlett Publishers
- A Practical Introduction to Data Structures and Algorithm Analysis (Java), Clifford A. Shaffer (3.2 Edition), 2013, Dover Publications (Free Book)
- Toolbox of Algorithms and Data Structures, Kurt Mehlhorn, Peter Sanders (1st Edition), 2008, Springer (DKU/Duke U. Free Access)
- Data Structures and Algorithms Using Java, William McAllister (1st Edition), 2008, Jones & Bartlett Learning
- Data Structures and Algorithms Made Easy: Data Structures and Algorithmic Puzzles, Narasimha Karumanchi (5th Edition), 2016/2017, CareerMonk Publications
- An Introduction to Data Structures and Algorithms, James A. Storer (1st Edition), 2002, Springer (DKU/Duke U. Free Access)
- Data Structures in Java, Oswald Campesato (1st Edition), 2023, Mercury Learning and Information
- Java Methods: Object-Oriented Programming and Data Structures, Maria Litvin, Gary Litvin (4th Edition), 2022, Skylight Publishing
- Open Data Structures (in Java), Pat Morin (0.1G Edition), 2002 (Free Book) [ Source Code ]
- A Textbook of Data Structures and Algorithms, Volume 1: Mastering Linear Data Structures, G. A. Vijayalakshmi Pai (1st Edition), 2023, Wiley
- A Textbook of Data Structures and Algorithms, Volume 2: Mastering Nonlinear Data Structures, G. A. Vijayalakshmi Pai (1st Edition), 2023, Wiley
- A Textbook of Data Structures and Algorithms, Volume 3: Mastering Advanced Data Structures and Algorithm Design, G. A. Vijayalakshmi Pai (1st Edition), 2023, Wiley
- Fundamentals of Computer Science using Java, David Hughes (1st Edition), 2002, Jones & Bartlett Learning
- Concepts, Techniques, and Models of Computer Programming, Peter van Roy, Seif Haridi (1st Edition), 2004, MIT Press
- Java - How to Program: Early Objects, Paul Deitel, Harvey Deitel (11th Edition), 2018, Pearson [ Source Code ]
- Starting Out with Java: From Control Structures through Objects, Tony Gaddis (7th Edition), 2019, Pearson
- Effective Java, Joshua Bloch (3rd Edition), 2017, Addison-Wesley
- Java: The Complete Reference, Herbert Schildt (12th Edition), 2021, McGraw Hill
- Java Performance: In-Depth Advice for Tuning and Programming Java 8, 11, and Beyond, Scott Oaks (2nd Edition), 2020, O'Reilly
- Core Java - Volume 1: Fundamentals, Cay Horstmann (12th Edition), 2021, Oracle
- Core Java - Volume 2: Advanced Features, Cay Horstmann (12th Edition), 2022, Oracle
- Core Java for the Impatient, Cay Horstmann (3rd Edition), 2022, Addison-Wesley
- Java in a Nutshell: A Desktop Quick Reference, Benjamin J. Evans, Jason Clark, David Flanagan (8th Edition), 2023, O'Reilly
- Building Java Programs: A Back to Basics Approach, Stuart Reges, Marty Stepp (5th Edition), 2019, Pearson
- Introduction to Programming Using Java, David J. Eck (8th Edition), 2022 (Free Book) [ Source Code ]
- Java Precisely, Peter Sestoft (3rd Edition), 2016, MIT
- Objects First with Java, David Barnes, Michael Kolling (6th Edition), 2016, Pearson
- 100 Java Mistakes and How to Avoid Them, Tagir Valeev (1st Edition), 2024, Manning
- Java Programming Exercises: Volume One: Language Fundamentals and Core Concepts, Christian Ullenboom (1st Edition), 2024, CRC
- Classic Computer Science Problems in Java, David Kopec (1st Edition), 2024, 2020, Manning
- Clean Code Fundamentals: A Hands-on Guide to Understand the Fundamentals of Software Craftsmanship and Clean Code in Java, Martin Hock (1st Edition), 2024, Leanpub
- Java for Python Programmers, Brad Miller (1st Edition), 2008 (Free Book)
- JVM Performance Engineering: Inside OpenJDK and the HotSpot Java Virtual Machine, Monica Beckwith (1st Edition), 2024, Oracle / Addison-Wesley
- The Well-Grounded Java Developer, Benjamin Evans, Martijn Verburg, Jason Clark (2nd Edition), 2022, Manning
- Mastering the Java Virtual Machine, Otavio Santana (1st Edition), 2024, Packt
Tutorials
Exercises
Lecture Notes / Slides
- Week 1 [06/01 - 09/01] (Keywords: History, Terminology and Basics; Algorithms; Computation; Asymptotic Notations)
- About COMPSCI 201
- Introduction to Programming
- Introduction to Java Programming
REMINDER [09/01, Thursday]: Drop/add ends for second 7-week undergraduate session.
{ Source: Academic Calendar }
- Week 2 [13/01 - 16/01] (Keywords: Object Oriented Programming (OOP); Abstraction; Encapsulation; Inheritance; Polymorphism)
- Object Oriented Programming (OOP) with Java
- Week 3 [20/01 - 23/03] (Keywords: Exception Handling; Recursion; Computational Complexity)
- Exception Handling
- Recursion
- Computational Complexity
HOLIDAY [25/01, Saturday - 04/02, Tuesday]: Spring Festival - Chinese New Year
- Week 4 [24/01, 05/02 - 07/02] (Keywords: Arrays; ArrayLists; Lists; LinkedLists; Iterators)
- Arrays
- ArrayLists
- LinkedLists
MIDTERM EXAM [TBA, (TBA Hours)]
- Week 5 [10/02 - 13/02] (Keywords: Elementary Data Structures; Stacks; Queues; Trees; Binary Trees; Binary Search Trees)
REMINDER [13/02, Thursday]: Last day to withdraw with a W grade of second 7-week classes; Last day to change grading basis of second 7-week classes.
{ Source: Academic Calendar }
- Week 6 [17/02 - 20/02] (Keywords: Maps, HashMaps, TreeMaps, LinkedHashMaps, Hash Tables)
- Week 7 [24/02 - 27/02] (Keywords: Graphs; Graph Traversal; Graph Algorithms; Breadth First Search (BFS); Uniform Cost Search (UCS); Depth First Search (DFS); Iterative Deepening DFS (IDDFS); Final Exam Review)
- Elementary Graph Algorithms
- Final Exam Review
FINAL EXAM [04/03, Tuesday (15:30-18:30) @ IB 2071]
{ Source: DKU Hub }
Grading
- Homework Assignments: 30%
- Mathematical, Conceptual, or Programming related
- Submit on Canvas
- Final Group Project: 15%
- Midterm: 20%
- Final: 35%
Reference Courses
Other Books
Quick / Easy Reads:
- Grokking Algorithms, Aditya Bhargava (2nd Edition), 2024, Manning
- Algorithms Unlocked, Thomas H. Cormen (1st Edition), 2013, MIT Press
- Algorithms to Live By: The Computer Science of Human Decisions, Brian Christian, Tom Griffiths (1st Edition), 2016, Henry Holt and Co. [ Video Lecture ]
- Algorithms, Panos Louridas (1st Edition), 2020, MIT Press
- Real-World Algorithms: A Beginner's Guide, Panos Louridas (1st Edition), 2017, MIT Press
- Nine Algorithms that Changed the Future: the Ingenious Ideas that Drive Today's Computers, John MacCormick (1st Edition), 2012, Princeton University Press
- What Algorithms Want: Imagination in the Age of Computing, Ed Finn (1st Edition), 2017, MIT Press
Algorithms (+ Data Structures):
Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein (3rd Edition), 2009, MIT Press (Free Book: ProQuest - Duke U.) [ Lecture Slides ]
- Algorithm Design, John Kleinberg, Eva Tardos (1st Edition), 2005, Pearson - Addison Wesley [ Lecture Slides & Examples ]
- Algorithms, Sanjoy Dasgupta, Christos Papadimitriou, Umesh Vazirani (1st Edition), 2006, McGraw-Hill
- Algorithms, Robert Sedgewick, Kevin Wayne (4th Edition), 2011, Addison-Wesley
- Introduction to the Analysis of Algorithms, Robert Sedgewick, Philippe Flajolet (2nd Edition), 2013, Addison-Wesley [ Lecture Slides & Videos ]
- The Algorithm Design Manual, Steven Skiena (3rd Edition), 2020, Springer [ Old: Lecture Slides & Videos - New: Lecture Slides & Videos ]
- Foundations of Algorithms, Richard Neapolitan (5th Edition), 2014, Jones & Bartlett Learning
- Data Structures and Algorithm Analysis in C++, Mark A. Weiss (4th Edition), 2014, Pearson [ Source Code in C++ ]
- Algorithm Design and Applications, Michael T. Goodrich, Roberto Tamassia (1st Edition), 2015, Wiley
- Algorithms Illuminated (Part 1): The Basics, Tim Roughgarden (1st Edition), 2017, Soundlikeyourself Publishing [ Lecture Slides & Videos ]
- Algorithms Illuminated (Part 2): Graph Algorithms and Data Structures, Tim Roughgarden (1st Edition), 2018, Soundlikeyourself Publishing [ Lecture Slides & Videos ]
- Algorithms Illuminated (Part 3): Greedy Algorithms and Dynamic Programming, Tim Roughgarden (1st Edition), 2019, Soundlikeyourself Publishing [ Lecture Slides & Videos ]
- Algorithms Illuminated (Part 4): Algorithms for NP-Hard Problems, Tim Roughgarden (1st Edition), 2020, Soundlikeyourself Publishing [ Lecture Slides & Videos ]
- Introduction to the Design and Analysis of Algorithms, Anany Levitin (3rd Edition), 2011, Addison-Wesley
- Super Study Guide: Algorithms and Data Structures, Afshine Amidi, Shervine Amidi (1st Edition), 2022
- Design and Analysis of Computer Algorithms, Alfred Aho, John Hopcroft, Jeffrey Ullman (1st Edition), 1974, Addison-Wesley
- Data Structures and Algorithms, Alfred Aho, Jeffrey Ullman (1st Edition), 1983, Pearson
- Fundamentals of Computer Algorithms, Ellis Horowitz, Sartaj Sahni (1st Edition), 1984, CS Press
- A Guide to Algorithm Design: Paradigms, Methods, and Complexity Analysis, Anne Benoit, Yves Robert, Frederic Vivien (1st Edition), 2014, CRC
- Algorithms: Sequential, Parallel, and Distributed, Kenneth A. Berman, Jerome L. Paul (1st Edition), 2004, Course Technology
- The Design and Analysis of Algorithms, Dexter C. Kozen (1st Edition), 1992, Springer
- Algorithms, Jeff Erickson (1st Edition), 2019 (Free Book)
- Algorithmic Thinking: Learn Algorithms to Level Up Your Coding Skills, Daniel Zingaro (2nd Edition), 2023
- The Design of Approximation Algorithms, David P. Williamson, David B. Shmoys (1st Edition), 2011, Cambridge University (Free Book)
- Approximation Algorithms, Vijay V. Vazirani (1st Edition), 2003, Springer
- Introduction to the Theory of Computation, Michael Sipser (3rd Edition), 2013, Cengage
- What Can Be Computed?: A Practical Guide to the Theory of Computation, John MacCormick (1st Edition), 2018, Princeton University
- Computational Complexity: A Modern Approach, Sanjeev Arora, Boaz Barak (1st Edition), 2009, Cambridge University (Free Draft)
- Mathematics and Computation: A Theory Revolutionizing Technology and Science, Avi Wigderson (1st Edition), 2019, Princeton University (Free Draft)
- Algorithms and Complexity, Herbert S. Wilf (2nd Edition), 2002, CRC
- Complexity Theory: Exploring the Limits of Efficient Algorithms, Ingo Wegener (1st Edition), 2005, Springer
- Automata, Computability and Complexity: Theory and Applications, Elaine A. Rich (1st Edition), 2007, Pearson (Free Book)
Algorithms (+/ Data Structures) with Python++:
- Data Structures and Algorithms in Python, Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser (1st Edition), 2013, Wiley
- Problem Solving with Algorithms and Data Structures using Python, Brad Miller and David Ranum, Franklin (2nd Edition), 2011, Beedle & Associates (Free Book)
- Think Complexity, Allen B. Downey (2nd Edition), 2016 / 2018, Green Tea Press / O'Reilly Press (Free Book) [ Source Code in Python ]
- Dive Into Algorithms: A Pythonic Adventure for the Intrepid Beginner, Bradford Tuckfield (1st Edition), 2021, No Starch Press
- Algorithms in a Nutshell: A Practical Guide, George T. Heineman, Gary Pollice, Stanley Selkow (2nd Edition), 2016, O'Reilly Press (Partially Python)
- A Common-Sense Guide to Data Structures and Algorithms: Level Up Your Core Programming Skills, Jay Wengrow (2nd Edition), 2020, Pragmatic Bookshelf [ Source Code in Python, Ruby and JavaScript ]
- The Self-Taught Computer Scientist: The Beginner's Guide to Data Structures & Algorithms, Cory Althoff (1st Edition), 2021, Wiley
- Data Structures for Engineers and Scientists Using Python, Rakesh Nayak, Nishu Gupta (1st Edition), 2024, CRC Press
- Absolute Beginner's Guide to Algorithms: A Practical Introduction to Data Structures and Algorithms in JavaScript, Kirupa Chinnathambi (1st Edition), 2023, Addison-Wesley
- Concise Notes on Data Structures and Algorithms (Ruby), Christopher Fox (1st Edition), 2011(Free Book)
Paradigms of Programming Languages:
-
Programming Language Pragmatics, Michael L. Scott (4th Edition), 2015, Morgan Kaufmann
-
Types and Programming Languages, Benjamin C. Pierce (1st Edition), 2002, MIT Press
-
Essentials of Programming Languages, Daniel P. Friedman, Mitchell Wand (3rd Edition), 2008, MIT Press
-
Concepts of Programming Languages, Robert Sebesta (12th Edition), 2019, Pearson
-
Design Concepts in Programming Languages, Franklyn Albin Turbak, David Gifford, Mark A. Sheldon (1st Edition), 2008, MIT Press
-
Concepts in Programming Languages, John C. Mitchell (1st Edition), 2002, Cambridge University
-
Programming Languages: Principles and Paradigms, Maurizio Gabbrielli, Simone Martini (2nd Edition), 2010, Springer
-
Programming Languages: Build, Prove, and Compare, Norman Ramsey (1st Edition), 2023, Cambridge University Press
- Programming Languages: Concepts and Implementation, Saverio Perugini, 2021, Jones & Bartlett Learning
Foundations of Computer Science:
-
Concrete Mathematics: A Foundation for Computer Science, Ronald L. Graham, Donald E. Knuth, Oren Patashnik (2nd Edition), 1994, Addison-Wesley
-
Mathematics for Computer Science, Eric Lehman, F. Thomson Leighton, Albert R. Meyer (1st Edition), 2017 (2018R), Samurai Media (Free Book) [ 6.042: Mathematics for Computer Science (MIT) - Materials ]
-
Mathematics: A Discrete Introduction, Edward A. Scheinerman (3rd Edition), 2012, Cengage Learning
-
Discrete Mathematics and Its Applications, Kenneth H. Rosen (8th Edition), 2019, McGraw-Hill
-
Discrete Mathematics: An Open Introduction, Oscar Levin (3rd Edition), 2021 (Free Book)
-
Essential Discrete Mathematics for Computer Science, Harry Lewis, Rachel Zax (1st Edition), 2019, Princeton University
-
Connecting Discrete Mathematics and Computer Science, David Liben-Nowell (1st Edition), 2022, Cambridge University Press
-
Book of Proof, Richard H. Hammack (3rd Edition), 2018 (Free Book)
-
Applied Combinatorics, Mitchel T. Keller, William T. Trotter (3rd Edition), 2021 (Free Book)
-
A Decade of the Berkeley Math Circle: The American Experience (Volume 1, Volume 2), Zvezdelina Stankova, Tom Rike (Eds), 2008, American Mathematical Society
-
How to Think Like a Mathematician: A Companion to Undergraduate Mathematics, Kevin Houston (1st Edition), 2009, Cambridge University Press
-
The Art of Problem Solving (Vol. 2): And Beyond, Richard Rusczyk, Sandor Lehoczky (7th Edition), 2006, AoPS Incorporated
-
The Art of Problem Solving (Vol. 1), Sandor Lehoczky, Richard Rusczyk (7th Edition), 2006, AoPS Incorporated
-
What Is Mathematics? An Elementary Approach to Ideas and Methods, Richard Courant, Herbert Robbins (2nd Edition), 1996, Oxford University Press
More Related:
Other Materials / Resources
Cheat Sheets:
Algorithm Visualization / Animation:
Miscellaneous:
General:
|