Skip to content
/ algorithms Public template

Class repository for CSC 212 Data Structures and Algorithms

License

Notifications You must be signed in to change notification settings

thoward27/algorithms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CSC 212: Data Structures and Algorithms

Welcome to CSC 212, Data Structures and Algorithms!

Table of Contents

Important Links


Schedule

Date Lectures Readings
Tue, 5/21 Getting Started Accelerated C++ [0, 4], CS50 Data Types
Wed, 5/22 C++ Crash Course Accelerated C++ [5, 7], CS50 Variables and Scope
Thu, 5/23 C++ Crash Course Accelerated C++ [8, 10], CS50 Pointers
Tue, 5/28 Algorithms for Singular Variables OpenDSA 6, CS50 Functions
Wed, 5/29 Algorithms for Arrays OpenDSA 8, CS50 Arrays
Thu, 5/30 Recursion OpenDSA 10, CS50 Recursion, CS50 Stack Frames
Tue, 6/4 Sorting / Bubble Sort OpenDSA 13.1, 13.2, 13.4, CS50 Bubble Sort
Wed, 6/5 Insertion Sort / Selection Sort OpenDSA 13.3, 13.5, CS50 Insertion Sort, CS50 Selection Sort
Thu, 6/6 MergeSort OpenDSA 13.9, CS50 MergeSort
Tue, 6/11 QuickSort OpenDSA 13.11,
Wed, 6/12 Sorting & Analysis Review OpenDSA 6, 8, 10, 13
Thu, 6/13 Exam 01 Review, Answers
Tue, 6/18 SLL OpenDSA 9.1-9.5, CS50 SLL
Wed, 6/19 CSLL / DLL / CDLL OpenDSA 9.6, CS50 DLL
Thu, 6/20 Stacks OpenDSA 9.8, 9.9, CS50 Stacks
Tue, 6/25 Queues OpenDSA 9.12, 9.13, CS50 Queues
Wed, 6/26 Trees / Binary Trees OpenDSA 12.1-12.13
Thu, 6/27 Binary Trees OpenDSA 12.14-12.16
Tue, 7/2 Heaps OpenDSA 12.17
Wed, 7/3 2-3 Tree / Red Black Tree OpenDSA 17.5, Balanced Search Trees
Fri, 7/5 Red Black Tree LLRB Tree
Tue, 7/9 Tries OpenDSA 12.19, Wikipedia
Wed, 7/10 Data Structures Review
Thu, 7/11 Exam (Data Structures)
Tue, 7/16 Hash Tables
Wed, 7/17 Undirected Graphs, Directed Graphs OpenDSA 19
Thu, 7/18 Recursive Backtracking Brilliant
Tue, 7/23 Dynamic Programming
Wed, 7/24 Course Review
Thu, 7/25 Final Exam (Cumulative)

Assignments (100 points each)

Title Due Date
A01: Kattis Competition May 30
A02: String Class June 6
A03: Hybrid Sorting June 13
A04: Advanced Sorting June 20
A05: Dijkstra's Two Stack June 27
A06: Tree Sort July 2
A07: Heap Sort July 11
A08: Lexicographic Sorting July 19
A09: Karp-Rabin July 25
A10: A* Search Final

Bonus Points

Task Points Due
B00: Code Signal Practice Test 20 May 23
B01: Boot Linux 50 June 6
Top Kattis 50, 30, 20 May 30
Fastest Sort 50, 30, 20 June 20
B02: Array Based Containers 50 June 27
B03: Heap Implementation 25 July 3
Additional Advanced Sorts 50/25/15/10 July 25
B04: Red/Black Tree Sort 100 July 11
B05: Dynamic Array 100 July 25
B06: Djikstra's 100 July 25

Resources

Setup

Github

View the official Handbook

Students

  1. Create a fork.
    1. Visit the public repository's website
    2. Fork the repository (Button on the top right)
  2. Clone your fork.
    1. Navigate to your Github profile
    2. Select your copy of the algorithms repository
    3. Get the link to your repository from the big green button on the right side of the page.
    4. In your terminal, navigate to where you'd like to save your work
    5. Execute git clone <your_repository_link_goes_here>
  3. Configure your new repository.
    1. CD into the freshly cloned repository (cd algorithms)
    2. Configure a remote for your fork
      1. Run git remote add upstream https://github.com/thoward27/algorithms.git
    3. Make sure when you run git remote -v you see upstream with a link to my copy of algorithms (https://github.com/thoward27/algorithms.git)
  4. Procedure for doing classwork.
    1. Ensure that you've committed all of your work to your current branch (which should not be master)
      1. Add your current changes: git add .
      2. Commit your changes: git commit -m "<your message here>"
    2. Now that you're in a clean state, checkout the master branch: git checkout master
    3. In order to get the most recent changes from the class repository, you must update your repository:
      1. Fetch upstream changes: git fetch upstream
      2. Merge upstream changes into master: git merge upstream/master
      3. For good measure, you should also push these new changes to your online copy of the repository: git push
    4. At this point you should be on master, with all updates from the class repository.
    5. Create a new branch for your work git checkout -b lab/<topic>
    6. Publish your changes with git push -u origin lab/<topic>
    7. Do your work, committing and pushing regularly, especially after passing any new unit tests
      1. Add your changes: git add .
      2. Commit your changes: git commit -m "<your message here>"
      3. Push your changes: git push
  5. Opening a Pull Request
    1. You should only do this with explicit permission
    2. Navigate to your Github profile, and select the algorithms repository.
    3. Select the branch you'd like to open a pull request from (normally the one from that days work)
    4. Select "Open a Pull Request"
    5. In the message, put all of your groups URI Emails so that I can update my grade book

TAs

  1. Clone the public repository (git clone git@github.com:thoward27/algorithms.git)
  2. CD into the repo (cd algorithms)
  3. Add the private remote (git remote add private git@github.com:thoward27/_algorithms.git)
  4. Fetch from the remote (git fetch private)
  5. Checkout dev to work (git checkout dev), merge to master when you're ready to publish.

Be sure that when you're dealing with solutions, or WIP, that you ensure you push only to private. The branch Dev should never be pushed to the public facing repo, accidental pushes will be hard wiped immediately, all data will be lost.

IDE

Linux (Preferred, Auto-grader OS)

This is the operating system we prefer in this class, as it closely mirrors your auto-grader environment.

VSCode

Windows 10

VS Code via WSL

Windows 8 and older

Please boot linux, Windows 8 and older is extremely challenging to develop C++ on.

If you insist on using Windows 8, you will need to install Cygwin, or you will have to buy an online IDE license.

VS Code Requirement: Cygwin

Mac OS

In order of preference:

  1. Coder
    1. Requirement: Docker
  2. VS Code

Online IDEs

This section contains some helpful online IDEs that can be used for in-class work, but may not be used for homework without purchasing an upgrade.

You may not work on homework in any of these IDEs unless you upgrade your license, you must work in private repositories for homework.

  1. Gitpod
  2. repl
  3. StackBlitz

Working with Github Classroom

  1. Registering for the assignment
    1. Click on the link to the assignment
    2. Make sure you select your email from the roster if you have not already
    3. Accept the assignment
    4. Click on the link after the text "Your assignment has been created here:"
  2. Clone your assignment to your computer
    1. Go to the page for your assignment
    2. Select "Clone or download" (big green button)
    3. Copy the link
    4. Open a terminal and navigate to the algorithms folder
    5. Use the command cd .. to step out of the algorithms folder
    6. Clone your repository git clone <your link goes here>
    7. cd into your new folder: cd <your assignment folder>
    8. Open this folder in VS Code
  3. Completing your assignment
    1. Following the instructions for the assignment, being working on the provided unit tests.
    2. After passing each unit test, commit and push your progress.
      1. Stage your changes: git add .
      2. Commit your work: git commit -m "<Name of the test case you just passed>"
      3. Push your work to Github: git push
    3. Check that your submission worked by visiting the online copy of your assignment, and verifying your changes were pushed.

FAQ

  • Why isn't my code compiling?
    • Are all expected methods/functions declared and defined?
    • Are your methods namespaced properly?
    • Are you on Mac? Try using -std=c++11
    • What do the errors say?
  • Can I add attribute x to my class?
    • Yes, you are welcome to modify all private sections to any class we create.
  • What libraries can I use?
    • iostream, chrono
    • Anything we have already built (you have to source it from our repository)
  • Why doesn't make work?
    • Fix script: sudo apt-get update && sudo apt-get upgrade && sudo apt install make && sudo apt install g++-8

Good Reads

About

Class repository for CSC 212 Data Structures and Algorithms

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages