powerpoint presentation · list adt •linked memory implementation (“linked list”) •o(1)...
TRANSCRIPT
![Page 1: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/1.jpg)
CS 225Data Structures
September 24 – IteratorsWade Fagen-Ulmschneider
![Page 2: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/2.jpg)
List ADT
• Linked Memory Implementation (“Linked List”)• O(1) insert/remove at front/back• O(1) insert/remove after a given element• O(n) lookup by index
•Array Implementation (“Array List”)• O(1) insert/remove at front/back• O(n) insert/remove at any other location• O(1) lookup by index
CS 225 So Far…
![Page 3: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/3.jpg)
Queue ADT
• [Order]:
• [Implementation]:
• [Runtime]:
CS 225 So Far…
![Page 4: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/4.jpg)
Stack ADT
• [Order]:
• [Implementation]:
• [Runtime]:
CS 225 So Far…
![Page 5: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/5.jpg)
#pragma once
template <typename T>
class Queue {
public:
void enqueue(T e);
T dequeue();
bool isEmpty();
private:
T *items_;
unsigned capacity_;
unsigned count_;
};
Queue.h12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
What type of implementation is this Queue?
How is the data stored on this Queue?
![Page 6: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/6.jpg)
#pragma once
template <typename T>
class Queue {
public:
void enqueue(T e);
T dequeue();
bool isEmpty();
private:
T *items_;
unsigned capacity_;
unsigned count_;
};
Queue.h12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
What type of implementation is this Queue?
How is the data stored on this Queue?
Queue<int> q;q.enqueue(3);q.enqueue(8);q.enqueue(4);q.dequeue();q.enqueue(7);q.dequeue();q.dequeue();q.enqueue(2);q.enqueue(1);q.enqueue(3);q.enqueue(5);q.dequeue();q.enqueue(9);
![Page 7: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/7.jpg)
#pragma once
template <typename T>
class Queue {
public:
void enqueue(T e);
T dequeue();
bool isEmpty();
private:
T *items_;
unsigned capacity_;
unsigned count_;
};
Queue.h12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
m o n
Queue<char> q;q.enqueue(m);q.enqueue(o);q.enqueue(n);…q.enqueue(d);q.enqueue(a);q.enqueue(y);q.enqueue(i);q.enqueue(s);q.dequeue();q.enqueue(h);q.enqueue(a);
![Page 8: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/8.jpg)
Implications of Design
class ListNode {
public:
T & data;
ListNode * next;
…
1.
2.
3.
class ListNode {
public:
T * data; …
class ListNode {
public:
T data; …
![Page 9: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/9.jpg)
Implications of DesignStorage by Reference Storage by Pointer Storage by Value
Who manages the lifecycle of the data?
Is it possible for the data structure to store NULL?
If the data is manipulated by user code while in our data structure, is the change reflected in our data structure?
Speed
![Page 10: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/10.jpg)
Data Lifecycle
Cube c;
myStack.push(c);
1
2
Cube c;
myStack.push(&c);
1
2
Storage by reference:
Storage by pointer:
Storage by value:
Cube c;
myStack.push(c);
1
2
![Page 11: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/11.jpg)
Possible to store NULL?
class ListNode {
public:
T & data;
ListNode * next;
ListNode(T & data) : data(data), next(NULL) { }
};
T ** arr;
Storage by reference:
Storage by pointer:
T * arr;
Storage by value:
![Page 12: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/12.jpg)
Data Modifications
Cube c(1);
myStack.push(c);
c.setLength(42);
Cube r = myStack.pop();
// What is r's length?
1
2
3
4
5
6
7
![Page 13: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/13.jpg)
Speed
![Page 14: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/14.jpg)
![Page 15: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/15.jpg)
IteratorsSuppose we want to look through every element in our data structure:
8 2 5Ø
![Page 16: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/16.jpg)
Iterators encapsulated access to our data:
8 2 5Ø
Cur. Location Cur. Data Next
![Page 17: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/17.jpg)
IteratorsEvery class that implements an iterator has two pieces:
1. [Implementing Class]:
![Page 18: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/18.jpg)
IteratorsEvery class that implements an iterator has two pieces:
2. [Implementing Class’ Iterator]:• Must have the base class std::iterator
• Must implementoperator*operator++operator!=
![Page 19: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/19.jpg)
#include <list>
#include <string>
#include <iostream>
struct Animal {
std::string name, food;
bool big;
Animal(std::string name = "blob", std::string food = "you", bool big = true) :
name(name), food(food), big(big) { /* nothing */ }
};
int main() {
Animal g("giraffe", "leaves", true), p("penguin", "fish", false), b("bear");
std::vector<Animal> zoo;
zoo.push_back(g);
zoo.push_back(p); // std::vector’s insertAtEnd
zoo.push_back(b);
for ( std::vector<Animal>::iterator it = zoo.begin(); it != zoo.end(); it++ ) {
std::cout << (*it).name << " " << (*it).food << std::endl;
}
return 0;
}
stlList.cpp12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
![Page 20: PowerPoint Presentation · List ADT •Linked Memory Implementation (“Linked List”) •O(1) insert/remove at front/back •O(1) insert/remove after a given element •O(n) lookup](https://reader031.vdocuments.site/reader031/viewer/2022011919/60158d5f0411b9307d50860a/html5/thumbnails/20.jpg)
#include <list>
#include <string>
#include <iostream>
struct Animal {
std::string name, food;
bool big;
Animal(std::string name = "blob", std::string food = "you", bool big = true) :
name(name), food(food), big(big) { /* none */ }
};
int main() {
Animal g("giraffe", "leaves", true), p("penguin", "fish", false), b("bear");
std::vector<Animal> zoo;
zoo.push_back(g);
zoo.push_back(p); // std::vector’s insertAtEnd
zoo.push_back(b);
for ( const Animal & animal : zoo ) {
std::cout << animal.name << " " << animal.food << std::endl;
}
return 0;
}
stlList.cpp12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25