Welcome to my Learning C repository. This is where I will document my journey into C programming throughout the years, from the basics to more advanced concepts. Here, you'll find resources I'm using, books I read, projects I'm building, problems I'm solving, challenges I face, and my progress notes.
- Personal Rules & Guidelines
- Roadmap
- Repository Structure
- Progress Log
- Resources
- Coding Problems
- Projects Showcase
- License
To stay focused, build deeper understanding, and avoid shortcuts that hurt my long-term improvement, I'm following the following rules:
Tools
- Follow the OpenBSD style.
- Each project must include a Makefile with, at minimum, a compilation command for the project and the used libraries.
- Third-party libraries should only be used if implementing the same functionality from scratch would significantly exceed the scope of the project.
- All commit messages for git must be meaningful and descriptive.
- When actively working on any code, commit daily or after finishing a logically complete task.
AI Usage
- AI should not be used to generate any code, tests, or solutions.
- What AI is allowed for:
- Helping write documentation and comments when necessary.
- Helping design graphical aspects of applications, if applicable (e.g., styles), since design is not the focus of this repo.
- Debugging help, to pinpoint an issue in larger code.
- Scanning code for vulnerabilities and bugs for larger projects.
- If I use AI, I'll document when, why, and what I learned from it.
Learning Approach
- For coding problems, always try to solve the problem until it is successful. Never search for hints or solutions until the problem has been solved.
- Once a problem or a project has been solved/completed, search for other people's approaches online and see if there is a better way to do it.
- All problems must be documented, not only the final solution, but the thoughts behind it and how I come to that solution.
- If a concept or code doesn't make sense, always research it until fully understood.
- Never accept unexpected behaviour; try to understand the reasoning behind how and why it works.
Projects
- Any code marked as a project must be appropriately linted, commented, and documented.
- All project code must have some error handling and testing.
- Any commits associated with projects must have appropriate commit messages, describing exactly what was changed and learned.
Each topic on the roadmap is independent and does not act as a prerequisite for any other topic. So I will often swap between different sections of this roadmap on my journey.
Formal Education
This section includes all courses in UNSW that I am taking that are taught in the C language. Course repos are currently private, since publishing solutions to assignments on GitHub is against UNSW plagiarism policies.-
COMP1511 - Programming Fundamentals - repo
- Intro to UNIX
- Variables/Constant
- Control Flow
- Custom Data Types
- Static Arrays
- 2D Arrays
- Strings
- Pointers
- Dynamic arrays Memory
- Memory (heap vs stack)
- Linked Lists
- Project 1 - Sokoban
- Project 2 - Pet Salon
-
COMP1521 - Computer Systems Fundamentals - repo
- Integers
- Bitwise Operations
- Floating Point
- Files
- Processes
- Unicode
- Threads
- Assignment 2 - a simple MIPS emulator
-
COMP2521 - Data Structures and Algorithms - repo
- Recursion
- Analysis of Algorithms
- Sorting Algorithms
- Abstract Data Types
- Binary Search Trees
- Balancing BSTs and AVL Trees
- Graphs
- Digraph Algorithms
- Dijkstra's Algorithm
- Minimum Spanning Trees
- Hash Tables
- Priority Queues and Heaps
- Tries
- Assignment 1 - Efficient Multiset ADT
- Assignment 2 - Detective Academy
Interfaces
The roadmap for this topic is based on the book "Interfaces and Implementations" by David R. Hanson.- Atoms
- Exceptions and Assertions
- Memory Management
- Lists
- Tables
- Sets
- Dynamic Arrays
- Sequences
- Rings
- Bit Vectors
- Formatting
- Low-Level Strings
- High-Level Strings
- Extended-Precision Arithmetic
- Arbitrary-Precision Arithmetic
- Multiple-Precision Arithmetic
- Threads
- Project - A reusable C library/toolkit for arbitrary and multiple-precision arithmetic
Algorithms
The roadmap for this topic is based on the books "Algorithms in C" by Robert Sedgewick and "Data Structures using C" by ISRD Group.- Data Types and ADTs
- Polynomials and Sparse Matrix
- Recursion and Trees
- Sorting Methods
- Quicksort
- Merging and Mergesort
- Priority Queues and Heapsort
- Radix Sorting
- Special-Purpose Sorts
- Symbol Tables and BSTs
- Balanced Trees
- Multiway Trees
- Hashing
- String Processing
- Radix Search
- External Searching
- Storage Management
- Project 1 - Modular Data Structures & Sorting Library - Build a reusable C library, implementing core data structures and sorting algorithms from scratch.
- Project 2 - Symbol Table & Search Engine - Build a tool that traverses a directory/files and lets you quickly search for words using trees, hash tables, etc (ag/grep mini-clone).
- Project 3 - External Sorting & Merging Engine - Create a program that can sort huge text files that don't fit in memory by reading and sorting small parts, then merging them.
Compilers
The roadmap for this topic is based on the book "Compilers Design in C" by Allen I. Holub.- Basic Concepts
- Input and Lexical Analysis
- Context-Free Grammars
- Top-Down Parsing
- Bottom-Up Parsing
- Code Generation
- Project - A Simple Compiler for a Tiny Language in C.
Linux System Programming
The roadmap for this topic is based on the book "Linux System Programming" by Robert Love.- Essentials of Systems Programming
- File I/O
- Buffered I/O
- Process Management
- Advanced Process Management
- Threading
- File and Directory Management
- Memory Management
- Signals
- Time
- Project 1 - Real-time File System Monitor with Alerts
- Project 2 - Custom Shell with Job Control and Resource Monitoring
TCP/IP Sockets
The roadmap for this topic is based on the book "TCP/IP Sockets in C" by Michael J. Donahoo and Kenneth L. Calvert.- Basic Sockets
- Constructing Messages
- Using UDP Sockets
- Socket Programming
- Under the Hood
- Domain Name Service
- Project - TCP Multi-person Chat Room Server
Cryptography & Protocols
The roadmap for this topic is based on the book "Applied Cryptography" by Bruce Schneier.- Cryptography Foundations
- Cryptographic Protocols
- Cryptographic Techniques
- Cryptographic Algorithms
- Project 1 - Terminal-Based Secure Chat Application
- Project 2 - File Encryption & Signing Tool
Image Processing
The roadmap for this topic is based on the book "Image Processing in C" by Dwayne Phillips.- Intro to CIPS
- Image File management
- Viewing and Printing Image Numbers
- Halftoning
- Histograms and Equalization
- Basic Edge Detection
- Advanced Edge Detection
- Spatial Frequency Filtering
- Image Operations
- Histogram-Based Segmentation
- Segmentation via Edges & Gray Shades
- Manipulating Shapes
- Boolean and Overlay Operations
- Geometric Operations
- Wrapping and Morphing
- Basic Textures Operations
- Random Dot Stereograms
- Hiding Information using Steganography
- Makefiles
- Project 1 - CLI-based Image Editor
- Project 2 - Steganography & Pattern Detection Tool
Computational Geometry
The roadmap for this topic is based on the book "Computational Geometry" by Joseph O'Rourke.- Polygon Triangulation
- Polygon Partitioning
- Convex Hulls in Two Dimensions
- Convex Hulls in Three Dimensions
- Voronoi Diagrams
- Arrangements
- Search and Intersection
- Motion Planning
- Project - 2D Geometry Visualizer and Toolkit
Digital Filters
The roadmap for this topic is based on the book "Digital Filter Designer's Handbook" by C. Britton Rorabaugh.- Filter Fundamentals
- Butterworth Filters
- Chebyshev Filters
- Elliptical Filters
- Bessel Filters
- Fundamentals of Digital Signal Processing
- Discrete Fourier Transform
- The z Transform
- FIR Filter Fundamentals
- Fourier Series Method of FIR Filler Design
- Frequency Sampling Method of FIR Filler Design
- Remez Exchange Method of FIR Filler Design
- IIR Filters
- IIR Filters via Bilinear Transformation
- Project 1 - Audio Signal Filter Tool
- Project 2 - Audio Compression Tool
Embedded Systems
The roadmap for this topic is based on the book "Embedded C" by Michael J. Pont.- Reading Switches
- OOP and Structure
- Real-time Constraints
- Creating an embedded OS
- Multi-state systems and function sequences
- Serial Interface
- Project - Secure Digital Access Control System (Lock System)
Parallel Computing
The roadmap for this topic is based on the book "Introduction to Parallel Computing" by W. P. Peterson and P. Arbenz.- Parallelism Applications
- Single Instruction, Multiple Data
- Shared Memory Parallelism
- Multiple Instruction, Multiple Data
- Project - Parallel DNA Sequence Alignment Tool
/resources/
- Books, study notes, roadmaps and other learning resources./projects/
- Mini-projects and real-world applications. (Bigger projects will be placed in their own repositories and linked here.)/practice/
- Coding problems and practice exercises./notes/
- Personal study notes, summaries, and references./diary/
- Personal progress updates, reflections and goals.
A summary log of what I'm learning over time.
Date | Topic/Task | Notes |
---|---|---|
2025-07-30 | Started the repository | Initialised the repo |
2025-08-01 -> Current | Coding Problems - LeetCode | Solving bit manipulation problems on LeetCode |
A list of learning resources I frequently use on my journey.
Books
- "C A Reference Manual" by Samuel P. Harbison III and Guy L. Steele Jr.
- "C Programming, A Modern Apporoach" by K. N. King
- "Functional C" by Pieter Hartel and Henk Muller
- "Problem Solving and Program Design in C" by Jeri R. Hanly and Elliot B. Koffman
- "The C Programming Language" by Brian W. Kernighan and Denis M. Ritchie
- "The C Puzzle Book" by Alan R. Feuer
- "Interfaces and Implementations by David R. Hanson"
- "Algorithms in C" by Robert Sedgewick
- "Data Structures using C" by ISRD Group
- "Compilers Design in C" by Allen I. Holub
- "Linux System Programming" by Robert Love
- "TCP/IP Sockets in C" by Michael J. Donahoo and Kenneth L. Calvert
- "Applied Cryptography" by Bruce Schneier
- "Image Processing in C" by Dwayne Phillips
- "Computational Geometry" by Joseph O'Rourke
- "Digital Filter Designer's Handbook" by C. Britton Rorabaugh
- "Embedded C" by Michael J. Pont
- "Introduction to Parallel Computing" by W. P. Peterson and P. Arbenz
Online Courses and Tutorials
- COMP1511 at UNSW - Programming Fundamentals
- COMP1521 at UNSW - Computer Systems Fundamentals
- COMP2521 at UNSW - Data Structures and Algorithms
- Sololearn's C Introduction - Certificate
- Sololearn's C Intermediate - Certificate
Bit Manipulation - Go to Directory
Difficulty | Completed | Total | Progress |
---|---|---|---|
Easy | 15 | 48 | |
Medium | 0 | 116 | |
Hard | 0 | 83 |
Easy - Go to Directory
- 67. Add Binary
- 136. Single Number
- 190. Reverse Bits
- 191. Number of 1 Bits
- 222. Count Complete Tree Nodes
- 231. Power of Two
- 266. Palindrome Permutation
- 268. Missing Number
- 338. Counting Bits
- 342. Power of Four
- 389. Find the Difference
- 401. Binary Watch
- 405. Convert a Number to Hexadecimal
- 461/2220. Hamming Distance
- 476/1009. Number Complement
- 645. Set Mismatch
- 693. Binary Number with Alternating Bits
- 762. Prime Number of Set Bits in Binary Representation
- 832. Flipping an Image
- 868. Binary Gap
- 1018. Binary Prefix Divisible By 5
- 1342. Number of Steps to Reduce a Number to Zero
- 1356. Sort Integers by The Number of 1 Bits
- 1486. XOR Operation in an Array
- 1684. Count the Number of Consistent Strings
- 1720. Decode XORed Array
- 1763. Longest Nice Substring
- 1863. Sum of All Subset XOR Totals
- 2032. Two Out of Three
- 2206. Divide Array Into Equal Pairs
- 2351. First Letter to Appear Twice
- 2506. Count Pairs Of Similar Strings
- 2595. Number of Even and Odd Bits
- 2859. Sum of Values at Indices With K Set Bits
- 2869. Minimum Operations to Collect Elements
- 2917. Find the K-or of an Array
- 2932. Maximum Strong Pair XOR I
- 2980. Check if Bitwise OR Has Trailing Zeros
- 3095. Shortest Subarray With OR at Least K I
- 3158. Find the XOR of Numbers Which Appear Twice
- 3173. Bitwise OR of Adjacent Elements
- 3199. Count Triplets with Even XOR Set Bits I
- 3226. Number of Bit Changes to Make Two Integers Equal
- 3304. Find the K-th Character in String Game I
- 3314. Construct the Minimum Bitwise Array I
- 3370. Smallest Number With All Set Bits
Project | Description | Status |
---|---|---|
TODO | TODO | TODO |
All code in this repo is licensed under the MIT License.
You are free to use, copy, modify, and distribute this repository for educational or personal purposes.