Probably some paper some computer. Everything in the first test... https://docs.google.com/document/d/1Epol0MmM4pgbLcvsQTGEs9rSXLEUQXyqJGT_MZINo9U/edit#heading=h.htxsdl4ifl2p Memorize program candidates... 1. program that has an array of character arrays #define HOW_MANY 100000 char words[HOW_MANY][100]; And the program asks the users for a word, puts it into the array if it's not there already. ... unsorted array pseudocode... while (they didn't type quit) { ask them for a word. check if the word is already in the array. if not, add it to the array. } print all the words. Math/memorize stuff. ... log(1024) = log(2^10) = 10*log(2) = 1 ... (3^3)^5 = 3^15 ... (1+2+3+...+1000) = ... (1 + 1/10 + 1/100 + 1/1000 + ... 1/(10^10)) ... also bits, bytes, GB, ..., max/min sizes of int, char, short, long Everything that can be done in C * structures - make a new struct and use it. (1) Define a new structure that has doubles for hw grade, exam grade, project grade. Declare a variable of that type and set the values. * pointers - make a function that returns more than one value, by using pointer parameters. E.g., function that takes an array of doubles and returns max, min, and average * be awesome with arrays... * printf, scanf, strlen, sprintf, exit, fopen, fgetc (fscanf), fclose Algorithms/data structures - fill in a little of missing code, and also answer "thinking" questions * unsorted arrays - keep track of how many used so far, - insert - put it on the end, and increase how many used so far - lookup - for loop * sorted arrays - insert - find where it should go, shift everything else down - lookup - binary search * hash tables - array to store things in - everything you want to store has some data and also a "key" - key is what you do a lookup with, data is all the data - "hash" the key - some random-ish thing that converts the key into a valid index into your array. - wherever the key hashes, that's where store that item. - problem: collisions - two different keys that hash top the same array index. - what to do about collisions: if something else is where you're supposed to be, then try the next index. Running time in the worst case, say n is how many things we have insert lookup unsorted array 1 n sorted array log(n)+n log(n) hash table n n Running time on average insert lookup unsorted array 1 n/2 sorted array log(n)+n/2 log(n) hash table* O(1) O(1) * if things are good and there aren't too many collisions