Welcome to CISC220H Data Structures in C++ sakai.udel.edu Office Hours: Mon/Wed 3:30PM - 4:30PM TA: Adnan Ozsoy –ozsoy at cis.udel.edu
Who am I?
Who are you?
What will we learn? Pointers Lists Analysis/ Big O notation Stacks Queues Trees Sorting Hashing Heaps Graphs NP-completeness
How will we learn? Class exercises (5%) Homework problems/programming (5*5%) Three programming projects (30%) Three tests (two midterm * 10%, final 20%)
What is “Honors” Labs –Normal lab part is optional (but required knowledge) Projects –Pick a “fun” area at the beginning Class –Required discussion and participation –Cover same topics but in more depth
What is a Data Structure?
Objectives for Today Manipulate pointers –read/write –create –dereference –assign value Call functions –by value, by reference Reading - K+W P.1-P.6
Review of pointers & memory cf. K&W, Chapter P A C++ Primer section P.5
Smith Hall Newark, DE USA
How could we move the Department of Computer and Information Sciences?
Memory Address vs. Value Stored Consider memory to be a single huge array: –Each cell of the array has an address associated with it. –Each cell also stores some value. Don’t confuse the address referring to a memory location with the value stored in that location
Pointers An address refers to a particular memory location. In other words, it points to a memory location. Pointer: A variable that contains the address of a variable. z x y Location (address) name 104
Pointers How to initialize a pointer: – can initialize to NULL (i.e. not currently pointing to anything) – & operator: get address of a variable int *x; x?y? int y = 3; x?y3 x = &y; xy3
Pointers How to get the value that is pointed to? – * “ dereference operator”: get value pointed to * x returns 3 How to change the variable pointed to? – Use dereference * operator to left of = xy5 *x = 5 ; xy3
Functions f xf(x)
Call-by-value int sum(int x, int y) { return x + y; } int main(void) { cout << sum(5,6) << endl; }
Call-by-reference int sum(const int& x, const int& y) { return x + y; } int main(void) { cout << sum(5,6) << endl; }
Group Review Break into teams of 4-5 students One person write an official answer Swap answers with a neighboring group and keep scores!
Question 1 What is output from the following code: double x = 5.5; double *px = &x; cout << *px << ‘\n’; *px = 10.0; cout << x << ‘\n’;
Question 2 What is output from the following code: double x = 5.5; double y = 10.0; double* px, py; px = &x; py = &y; cout << *px << ‘\n’ << *py << ‘\n’;
Question 3 What is output from the following code: double x = 5.5; double *px = &x; *px = 3.14; double& r = *px; r = 99.44; cout << x << ‘\n’;
Question 4 What is output from the following code: void swap(int x, int y) { int temp = x; x = y; y = temp; } int main(void) { int a = 0; int b = 5; swap(a,b); cout << a << endl; }
Question 5 Change the code to work correctly using pointers: void swap(int x, int y) { int temp = x; x = y; y = temp; } int main(void) { int a = 0; int b = 5; swap(a,b); cout << a << endl; }
Question 6 What is the value of temp after each assignment? char blocks[3] = {'A','B','C'}; char *ptr = &blocks[0]; char temp; /*1*/ temp = blocks[0]; /*2*/ temp = *(blocks + 2); /*3*/ temp = *(ptr + 1); ptr = blocks + 1; /*4*/ temp = *ptr; /*5*/ temp = *(ptr + 1);
Question 7 What is the value of temp after each assignment? char blocks[3] = {'A','B','C'}; char *ptr = blocks; char temp; /*1*/ temp = *++ptr; /*2*/ temp = ++*ptr; /*3*/ temp = *ptr++; /*4*/ temp = *ptr;
Question 8 Write code to reverse a string using only pointer arithmetic (no array accessors): int main(void) { char s[10] = "abcde"; for (int i = 0; s[i] != NULL; i++) { cout << s[i]; } revtString(s); for (int i = 0; s[i] != NULL; i++) { cout << s[i]; } cout << ‘\n’; return 0; }