Welcome to CISC220H Data Structures in C++ sakai.udel.edu Office Hours: Mon/Wed 3:30PM - 4:30PM TA:...
-
Upload
shannon-peters -
Category
Documents
-
view
212 -
download
0
Transcript of Welcome to CISC220H Data Structures in C++ sakai.udel.edu Office Hours: Mon/Wed 3:30PM - 4:30PM TA:...
Welcome to CISC220H
• Data Structures in C++
• sakai.udel.edu
• Office Hours: Mon/Wed 3:30PM - 4:30PM
• http://www.udel.edu/CIS/220/jatlas/09FH/
• 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 19716 • 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.
23 42 ... ...101 102 103 104 105 ...
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.
z23 42 ... ...
101 102 103 104 105 ...
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 ? y 3
x = &y; x y 3
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 =
x y 5
*x = 5;
x y 3
Functions
fx f(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;
}