![Page 1: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/1.jpg)
CS24 Week 4 Lecture 1Kyle Dewey
Monday, July 14, 14
![Page 2: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/2.jpg)
Overview
• Additional use of const in C++
• List ADT
• Array Lists
• Linked Lists
Monday, July 14, 14
![Page 3: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/3.jpg)
Additional Use of const
• We’ve seen const already in two positions:
void foo(const char* const s) { s[0] = ‘a’; // disallowed s = NULL; // disallowed}
What is pointed to is constant
The pointer itselfis constant
Monday, July 14, 14
![Page 4: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/4.jpg)
Additional Use of const• We can also tag whole methods with
const, indicating that they may not change any state of the class they are called on
• Great for accessors, as opposed to mutators
class Foo { public: Foo(int a) { b = a; } void setValue(int a) { b = a; } int getValue() const { return b; } private: int b;};
Monday, July 14, 14
![Page 5: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/5.jpg)
this
Monday, July 14, 14
![Page 6: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/6.jpg)
this• Allows one to refer to the object being
acted upon in a method call, via a pointer
class Foo { private: int x; public: int getX() { return this->x; }};
Monday, July 14, 14
![Page 7: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/7.jpg)
List ADT
Monday, July 14, 14
![Page 8: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/8.jpg)
Motivation
• We often work with a series of items
• Addresses in a phone book, cards in a deck, etc.
• Arrays can be painful
• Fixed size
• Error-prone (e.g., index too large)
• Repeated similar operations
Monday, July 14, 14
![Page 9: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/9.jpg)
Idea: A “List” ADT
• Handles the storage of elements and the addition of elements
• Holds common operations (e.g., checking if an item is contained within)
• Can protect against out-of-bounds
Monday, July 14, 14
![Page 10: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/10.jpg)
A List ADT
• What should the List ADT have at the logical/abstract/interface level?
Monday, July 14, 14
![Page 11: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/11.jpg)
A List ADT
• What should the List ADT have at the logical/abstract/interface level?
• Basic examples: get item, add item, insert item at a position, remove item, get size
• Many, many more examples possible
Monday, July 14, 14
![Page 12: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/12.jpg)
Idealized List ADT
List emptyList();int getSize();int getInt(int position);bool containsInt(int item);void addInt(int item);void addIntAtPosition(int item, int position);void removeFirstInt(int item);
Monday, July 14, 14
![Page 13: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/13.jpg)
Implementing in C++• Classes? Constructors? Methods?
• Which methods should be marked const?
List emptyList();int getSize();int getInt(int position);bool containsInt(int item);void addInt(int item);void addIntAtPosition(int item, int position);void removeFirstInt(int item);
Monday, July 14, 14
![Page 14: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/14.jpg)
Implementing in C++• Classes? Constructors? Methods?
• Which methods should be marked const?
List emptyList(); // Constructorint getSize() const;int getInt(int position) const;bool containsInt(int item) const;void addInt(int item);void addIntAtPosition(int item, int position);void removeFirstInt(int item);
Monday, July 14, 14
![Page 15: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/15.jpg)
Implementing in C++
• For now, let’s implement this via an array
• What other issues are present because of this design decision?
Monday, July 14, 14
![Page 16: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/16.jpg)
Implementing in C++
• For now, let’s implement this via an array
• What other issues are present because of this design decision?
• Size of the array?
• Accessing out-of-bounds element?
• Adding an element in the middle?
• How might we handle each?
Monday, July 14, 14
![Page 17: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/17.jpg)
Implementation in C++
Monday, July 14, 14
![Page 18: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/18.jpg)
Array-Based List
• What sort of operations were hard because arrays were used?
Monday, July 14, 14
![Page 19: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/19.jpg)
Array-Based List
• What sort of operations were hard or awkward because arrays were used?
• Constructor needed an array size
• Adding an element at an arbitrary position required pushing elements to the right
• Removing an element required pushing elements to the left
Monday, July 14, 14
![Page 20: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/20.jpg)
Other Approaches
• How might we improve on these issues? (Fixed size, making arbitrary addition and removal easier)
Monday, July 14, 14
![Page 21: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/21.jpg)
Other Approaches
• How might we improve on these issues? (Fixed size, making arbitrary addition and removal easier)
• Wide variety of answers
• Approach we will take: linked lists
Monday, July 14, 14
![Page 22: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/22.jpg)
Fixed Size
• Observation: with arrays, we must allocate in blocks
• We must pre-allocate room, and expanding this room is obnoxious
• We would like to allocate as we go along, in a piecewise fashion
Monday, July 14, 14
![Page 23: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/23.jpg)
Piecewise Allocation
• How can we represent the list in a way that makes piecewise allocation possible? (Not just extending onto an array)
Monday, July 14, 14
![Page 24: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/24.jpg)
Piecewise Allocation
• How can we represent the list in a way that makes piecewise allocation possible? (Not just extending onto another array)
• Piecewise implies separate chunks that hold onto single elements
• How do we keep track of chunks?
Monday, July 14, 14
![Page 25: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/25.jpg)
Linked Lists
• Idea: have each chunk (called a node) keep track of both a list element and another chunk
• Need to keep track of only the head node
0
List: 0, 1, 2, 3
1 2 3 X
Monday, July 14, 14
![Page 26: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/26.jpg)
Node Representation
• What might a node look like in C/C++?
Monday, July 14, 14
![Page 27: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/27.jpg)
Node Representation
• What might a node look like in C?
struct Node { int item; struct Node* next;};
Monday, July 14, 14
![Page 28: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/28.jpg)
Node Representation• What might a node look like in C++?
class Node { public: Node(int i, Node* n); int getItem() const; void setItem(int i); Node* getNext() const; void setNext(Node* n); private: int item; Node* node;};
Monday, July 14, 14
![Page 29: CS24 Week 4 Lecture 1 · CS24 Week 4 Lecture 1 Kyle Dewey Monday, July 14, 14. Overview • Additional use of const in C++](https://reader036.vdocuments.us/reader036/viewer/2022062604/5fbda8c90c1df80d220bdc7b/html5/thumbnails/29.jpg)
C++ Implementation of Linked Lists
Monday, July 14, 14