CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... ·...
Transcript of CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... ·...
![Page 1: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/1.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 1
Hassan Khosravi January – April 2015
CPSC 221 Basic Algorithms and Data Structures
ADTs, Stacks, and Queues
Textbook References: Koffman: 4.5-4.7, 5, 6.1-6.3, 6.5
![Page 2: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/2.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 2
Learning goals • Differentiate an abstraction from an
implementation. • Define and give examples of problems that can be
solved using the abstract data types stacks and queues.
• Compare and contrast the implementations of these abstract data types using linked lists and circular arrays in C++.
• Manipulate data in stacks and queues(irrespective of any implementation).
![Page 3: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/3.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 3
What is an Abstract Data Type? • Abstract Data Type (ADT) – a mathematical
description of an object and the set of operations on the object. – A description of how a data structure works (could be
implemented by different actual data structures). • Example: Dictionary ADT
– Stores pairs of strings: (word, definition) – Operations:
• Insert(word, definition) • Delete(word) • Find(word)
![Page 4: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/4.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 4
Why so many data structures?
Ideal data structure: fast, elegant, memory efficient
Trade-offs – time vs. space – performance vs. elegance – generality vs. simplicity – one operation’s performance vs.
another’s – serial performance vs. parallel
performance
“Dictionary” or “Map” ADT – list – binary search tree – AVL tree – Splay tree – B+ tree – Red-Black tree – hash table – concurrent hash table – …
![Page 5: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/5.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 5
Code Implementation • Theoretically
– abstract base class describes ADT – inherited implementations implement data structures – can change data structures transparently (to client
code) • Practice
– different implementations sometimes suggest different interfaces (generality vs. simplicity)
– performance of a data structure may influence form of client code (time vs. space, one operation vs. another)
![Page 6: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/6.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 6
ADT Presentation Algorithm • Present an ADT • Motivate with some applications • Repeat until browned entirely through
– develop a data structure for the ADT – analyze its properties
• efficiency • correctness • limitations • ease of programming
• Contrast data structure’s strengths and weaknesses – understand when to use each one
![Page 7: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/7.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 7
Queue ADT • Queue operations
– create – destroy – enqueue – dequeue – is_empty
• Queue property: if x is enqueued before y is enqueued, then x will be dequeued before y is dequeued.
FIFO: First In First Out
F E D C B enqueue dequeue G A
![Page 8: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/8.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 8
Applications of the Q • Hold jobs for a printer • Store packets on network routers • Hold memory “freelists” • Make waitlists fair • Breadth first search
![Page 9: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/9.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 9
Abstract Q Example enqueue R enqueue O dequeue enqueue T enqueue A enqueue T dequeue dequeue enqueue E dequeue
In order, what letters are dequeued? a. OATE b. ROTA c. OTAE d. None of these, but it can
be determined from just the ADT. e. None of these, and it cannot
be determined from just the ADT.
![Page 10: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/10.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 10
Abstract Q Example enqueue R enqueue O dequeue enqueue T enqueue A enqueue T dequeue dequeue enqueue E dequeue
In order, what letters are dequeued? a. OATE b. ROTA c. OTAE d. None of these, but it can
be determined from just the ADT. e. None of these, and it cannot
be determined from just the ADT.
![Page 11: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/11.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 11
Array Representation of Queues • Queues can be easily represented using linear arrays. • Every queue has front and back variables that point to the
position from where deletions and insertions can be done, respectively. Consider the queue shown in figure
• If we want to add one more value in the list say with value 45, then back would be incremented by 1 and the value would be stored at the position pointed by back.
0 1 2 3 4 5 6 7 8 9 12 9 7 18 14 36 front = 0
back = 6
12 9 7 18 14 36 45
0 1 2 3 4 5 6 7 8 9 front = 0 back= 7
![Page 12: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/12.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 12
Array Representation of Queues • Now, if we want to delete an element from the queue,
then the value of front will be incremented. Deletions are done from only this end of the queue
• What is a problem with this implementation?
9 7 18 14 36 45
0 1 2 3 4 5 6 7 8 9 front = 1 back = 7
7 18 14 36 45 21 99 72 0 1 2 3 4 5 6 7 8 9
![Page 13: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/13.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 13
Circular Array Q Data Structure
void enqueue(Object x) { ! Q[back] = x; ! back = (back + 1) % size; !} !Object dequeue() { ! x = Q[front]; ! front = (front + 1) % size; ! return x; !}
b c d e f
Q 0 size - 1
front back
bool is_empty() { ! return (front == back); !} !!!!bool is_full() { ! return front == ! (back + 1) % size; !}
![Page 14: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/14.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 14
Circular Array Q Example 1 enqueue R enqueue O dequeue enqueue T enqueue A enqueue T dequeue dequeue enqueue E dequeue
![Page 15: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/15.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 15
Circular Array Q Example 1 enqueue R enqueue O dequeue enqueue T enqueue A enqueue T dequeue dequeue enqueue E dequeue
R R O R O R O T R O T A R O T A T R O T A T R O T A T E O T A T E O T A T
![Page 16: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/16.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 16
Circular Array Q Data Structure
void enqueue(Object x) { ! Q[back] = x; ! back = (back + 1) % size; !} !Object dequeue() { ! x = Q[front]; ! front = (front + 1) % size; ! return x; !}
b c d e f
Q 0 size - 1
front back
bool is_empty() { ! return (front == back); !} !!!!bool is_full() { ! return front == ! (back + 1) % size; !}
What is wrong with this code?
![Page 17: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/17.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 17
Circular Array Q Example 2 enqueue R enqueue O enqueue T enqueue A enqueue T enqueue E
R R O R O T R O T A R O T A T E O T A T
• Before inserting • Check is_full()
• Before removing • Check is_empty()
![Page 18: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/18.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 18
Circular Array Q Example 3 enqueue R enqueue O dequeue enqueue T enqueue A enqueue T dequeue dequeue enqueue E dequeue
![Page 19: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/19.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 19
Circular Array Q Example 3 enqueue R enqueue O dequeue enqueue T enqueue A enqueue T dequeue dequeue enqueue E dequeue
R R O R O R O T R O T A
Cannot add the second T
![Page 20: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/20.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 20
Linked Lists • Consider the following abstraction, picturing a
short linked list:
• What might it look like in memory?
2 100 Null
5 Null 100
1 600 1080
1080 … 600 … 140 120 100
previous next data
5 1 2 Diagonal line represents NULL
struct Node !{ ! Node *previous; ! int data; ! Node *next; !}; !
![Page 21: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/21.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 21
Inserting an Element to a Linked List
2 140 Null
5 Null 100
9 100 1080
1 600 140
1080 … 600 … 140 120 100
previous next
9
5 1 25 1 2
data
![Page 22: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/22.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 22
Removing an Element from a Linked List
2 600 Null
5 Null 1080
1 600 1080
1080 … 600 … 140 120 100
previous next
delete
5 1 2 5 1
2
data
![Page 23: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/23.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 23
Linked List Q Data Structure
b c d e f
front back
void enqueue(Object x) { ! if (is_empty()) ! front = back = new Node(x); ! else { ! back->next = new Node(x); ! back = back->next; ! } !}
b c d e f
front back
x
![Page 24: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/24.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 24
Linked List Q Data Structure
Object dequeue() { ! assert(!is_empty); ! char result = front->data; ! Node * temp = front; ! front = front->next; ! delete temp; ! return result; !} !!bool is_empty() { ! return front == NULL; !}
b c d e f
front back temp
b c d e f
front back
Welcome to manual memory management! Tip: “a delete for every new”
![Page 25: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/25.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 25
Clicker question (Inserting into a list)
• Consider the following linked list, and possible commands
• Assuming that we would like to keep the list sorted, which of the following list of commands correctly inserts the new node into the list
W: current->next = new X: current= current->next Y: new->next = current->next Z: current = new
A: X X X Y W B: X X X X W Y C: X X X W Y D: X X X W Z Y E: None of the above
1 2 3 4 6 7 N
current new 5 N
![Page 26: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/26.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 26
Clicker Question (answer) • Consider the following linked list, and possible commands
• Assuming that we would like to keep the list sorted, which of the following list of commands correctly inserts the new node into the list
W: current->next = new X: current= current->next Y: new->next = current->next Z: current = new
1 2 3 4 6 7 N
current new
A: X X X Y W
1 2 3 4 6 7 N
current new 5 N
5 N
If W is performed before Y, then the second part of the list is lost
![Page 27: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/27.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 27
Clicker question (deleting from a list)
• Consider the following linked list, and possible commands
• Which one of the following list of commands correctly deletes 3 from the list
V: current= current->next W: prev = prev->next X: prev->next = current->next Y: current->next = prev->next Z: delete current; current= NULL;
current
A: V W V Y Z B: W V W X Z C: V W V X Z D: V V W W Y Z E: None of the above
prev
1 2 3 4 6 7 N
![Page 28: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/28.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 28
Clicker question (answer)
• Consider the following linked list, and possible commands
• Which one of the following list of commands correctly deletes 3 from the list
1 2 3 4 6 7
current
C: V W V X Z
prev
1 2 4 6 7
current prev
V: current= current->next W: prev = prev->next X: prev->next = current->next Y: current->next = prev->next Z: delete current; current= NULL;
![Page 29: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/29.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 29
Circular Array vs. Linked List
• Ease of implementation? • Generality? • Speed? • Memory use?
• In general, many different data structures can implement an ADT, each with different trade-offs. You must pick the best for your needs.
![Page 30: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/30.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 30
Stack ADT
• Stack operations – create
– destroy
– push
– pop
– top
– is_empty
• Stack property: if x is pushed before y is pushed, then x will be popped after y is popped
LIFO: Last In First Out
A
B C D E F
E D C B A
F
![Page 31: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/31.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 31
Stacks in Practice (Call Stack) int square (int x){ ! return x*x; !} !!int squareOfSum(int x, int y){ ! return square(x+y); ! !} !!int main() { ! int a = 4; ! int b = 8; ! int total = squareOfSum(a, b); ! cout << total<< endl; !}
Stack
main a,b
squareOfSum x,y
square x
![Page 32: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/32.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 32
• Application: Binary Expression Trees
Arithmetic expressions can be represented using binary trees. We will build a binary tree representing the expression:
( 3 + 2 ) * 5 – 1
Now let’s print this expression tree using postorder traversal:
3 2 + 5 * 1 -
–
* 1
+
23
5
Stacks in Practice (Arithmetic expressions)
We’ll cover this topic in detail later in the course
![Page 33: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/33.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 33
Now let’s compute this expression using a Stack
3 2 + 5 * 1 -
–
* 1
+
23
5
Stacks in Practice (Arithmetic expressions)
Character scanned Stack
3 3 2 3, 2 + 5 5 5, 5 * 25 1 25,1 - 24 We’ll cover this topic in
detail later in the course
![Page 34: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/34.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 34
Stacks in Practice (Backtracking)
We’ll cover this topic in detail later in the course
1
9 3
2
4
5
Stack
1 3, 2 3,5,4 3,5 3 9
![Page 35: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/35.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 35
Stacks in Practice (depth first search)
E
C I
A
B
F J
H
D
G
We’ll cover this topic in detail later in the course
![Page 36: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/36.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 36
Array Stack Data Structure
a b c d e f g h
S 0 size - 1
top
7 1 2 … …
8 (int)
void push(char x) { ! assert(!is_full()) ! S[top] = x ! top++ !} !!char top() { ! assert(!is_empty()) ! return S[top - 1] !} !
char pop() { ! assert(!is_empty()) ! top-- ! return S[top] !} !!bool is_empty() { ! return top == 0 !} !!bool is_full() { ! return top == size !} !!
![Page 37: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/37.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 37
Example Stack with Arrays
push B
pop
push K
push C
push A
pop
pop
pop
![Page 38: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/38.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 38
Example Stack with Arrays
push B
pop
push K
push C
push A
pop
pop
pop
1 B
0
1 K
2 K C
3 K C A
2 K C
1 K
0
![Page 39: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/39.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 39
Linked List Stack Data Structure
!void push(char x) { ! temp = top; ! top = new Node(x); ! top->next = temp; !} !!char top() { ! assert(!is_empty()) ! return top->data; !} !
char pop() { ! assert(!is_empty()) ! char return_data = top->data; ! temp = top; ! top = top->next; ! delete temp; ! return return_data; !} !!bool is_empty() { ! return top == nullptr; !} !
b c d e f
top
![Page 40: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/40.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 40
Linked List Stack Data Structure (push)
void push(char x) { ! temp = top; ! top = new Node(x); ! top->next = temp; !} !
b c d e f
top
b c d e f
top
temp
x
![Page 41: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/41.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 41
Linked List Stack Data Structure (pop)
char pop() { ! assert(!is_empty()) ! char return_data = top->data; ! temp = top; ! top = top->next; ! delete temp; ! return return_data; !} !
b c d e f
top
b c d e f
top temp
![Page 42: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/42.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 42
Example Stack with Linked List • Try at home
push B
pop
push K
push C
push A
pop
pop
![Page 43: CPSC 221 Basic Algorithms and Data Structures › ~hkhosrav › Courses › CPSC221 › ... · Basic Algorithms and Data Structures ADTs, Stacks, and Queues Textbook References: Koffman:](https://reader036.fdocuments.net/reader036/viewer/2022070821/5f1e960387edb659bd02dc5b/html5/thumbnails/43.jpg)
CPSC 221 ADTs, Stacks, and Queues Page 43
Learning goals revisited • Differentiate an abstraction from an
implementation. • Define and give examples of problems that can be
solved using the abstract data types stacks and queues.
• Compare and contrast the implementations of these abstract data types using linked lists and circular arrays in C++.
• Manipulate data in stacks and queues(irrespective of any implementation).