These topics and concepts are used around most programming languages, but for many of the examples below, I’ll be using Java and C (I know, it’s what the dinosaurs used to program). However, these concepts are important to understand and can be applied to a number of different programming languages.
As for the programming examples, please think of them as “Psuedo-Code” instead of just code in the language of C or Java. The importance of this section is NOT to learn how to program in C, it’s to learn how to conceptualize programming.
Many programming languages and software development scenarios use the following concepts, and it’s important to understand them. Throughout a programmers’ career/life, it’s likely that they won’t stick to the same language, but will probably use the same concepts over and over. It’s easier to learn a concept first, then apply it to a language, instead of the other way around.
- Computer Preliminaries and Simple Programming Terms
- Programming Style & General Programming Language Basics
- Arithmetic Expressions
- Truncation and Mod(%) Operator
- Conditionals, Truth Tables, and Boolean Expressions
- If-else, Not(!) Operator, Switch, ? Operator
- Loops (While, For, ForEach, and Do-While loops)
- Arrays and Lists
- Functions / Methods (Writing and Calling, Void)
- Sorting – Basic
- Recursion
- Recursive Functions, Fast Exponentiation, Binary Search, and Towers of Hanoi
- Recurrence Relations
- Stacks and Queues
- Push & Pop, Enqueue & Dequeue, Infix & Postfix
- Running Time Approximations & Algorithm Analysis
- Big-O & Summation Notation
- Useful Summation Formulas
- Sorting – Advanced
- O(n^2)
- Bubblesort
- Insertion sort
- Selection sort
- O(n log n)
- Mergesort
- Quicksort (average case)
- Heapsort
- O(n) (restricted data)
- Bucket sort
- Radix sort
- O(n^2)
- Binary Trees
- Binary Search Trees
- AVL trees (Self-balancing Binary Search Trees)
- Binary Heaps
- Heaps
- Hash Tables
- Graphs