Download presentation
Presentation is loading. Please wait.
Published byMaryann Alexander Modified over 9 years ago
1
1 Stacks and Queues Sections 3.6 and 3.7 Chapter 3 Lists, Stacks, and Queues Abstract Data Types, Vectors
2
2 Stack ADT - LIFO Collections: –Elements of some proper type T Operations: –Feature: Last In, First Out –void push(T t) –void pop() –T top() –bool empty() –unsigned int size() –constructor and destructor
3
3 Stack Model—LIFO Empty stack S –S.empty() is true –S.top() not defined –S.size() == 0 food chain stack
4
4 Stack Model—LIFO S.push(“mosquito”) –S.empty() is false –S.top() == “mosquito” –S.size() == 1 mosquito food chain stack
5
5 Stack Model—LIFO S.push(“fish”) –S.empty() is false –S.top() == “fish” –S.size() == 2 fish mosquito food chain stack
6
6 Stack Model—LIFO S.push(“raccoon”) –S.empty() is false –S.top() == “raccoon” –S.size() == 3 raccoon fish mosquito food chain stack
7
7 Stack Model—LIFO S.pop() –S.empty() is false –S.top() == “fish” –S.size() == 2 fish mosquito food chain stack
8
8 Implementations and Uses of Stack ADT Implementations –Any list implementation –list and vector C++ STL –Vector/List ADTs push_back()/pop_back() push_front()/? Uses –Depth first search / backtracking –Evaluating postfix expressions –Converting infix to postfix –Function calls (runtime stack) –Recursion
9
9 Depth First Search—Backtracking Problem –Discover a path from start to goal Solution –Start from Node start –Stop If node is goal –Go deep If there is an unvisited neighbor, go there –Backtrack Retreat along the path to find an unvisited neighbor, if cannot go deeper Outcome –If there is a path from start to goal, DFS finds one such path 1 234 5687 9101211 start goal
10
10 Depth First Search—Backtracking (2) Stack 1 234 5687 9101211 start goal 1 Push
11
11 Depth First Search—Backtracking (3) Stack 1 234 5687 9101211 start goal 2 1 Push
12
12 Depth First Search—Backtracking (4) Stack 1 234 5687 9101211 start goal 5 2 1 Push
13
13 Depth First Search—Backtracking (5) Stack 1 234 5687 9101211 start goal 6 5 2 1 Push
14
14 Depth First Search—Backtracking (6) Stack 1 234 5687 9101211 start goal 9 6 5 2 1 Push
15
15 Depth First Search—Backtracking (7) Stack 1 234 5687 9101211 start goal 6 5 2 1 Push Pop
16
16 Depth First Search—Backtracking (8) Stack 1 234 5687 9101211 start goal 5 2 1 Push Pop
17
17 Depth First Search—Backtracking (9) Stack 1 234 5687 9101211 start goal 2 1 Push Pop
18
18 Depth First Search—Backtracking (10) Stack 1 234 5687 9101211 start goal 1 Push Pop
19
19 Depth First Search—Backtracking (11) Stack 1 234 5687 9101211 start goal 3 1 Push
20
20 Depth First Search—Backtracking (12) Stack 1 234 5687 9101211 start goal 7 3 1 Push
21
21 Depth First Search—Backtracking (13) Stack 1 234 5687 9101211 start goal 10 7 3 1 Push
22
22 DFS Implementation DFS() { stack S; // mark the start location as visited S.push(start); while (S is not empty) { t = S.top(); if (t == goal) Success(S); if (// t has unvisited neighbors) { // choose an unvisited neighbor n // mark n visited; S.push(n); } else { BackTrack(S); } Failure(S); }
23
23 DFS Implementation (2) BackTrack(S) { while (!S.empty() && S.top() has no unvisited neighbors) { S.pop(); } Success(S) { // print success while (!S.empty()) { output(S.top()); S.pop(); }
24
24 Runtime Stack Runtime environment –Static Executable code Global variables –Stack Push for each function call Pop for each function return Local variables –Heap Dynamically allocated memories new and delete static stack heap program memory
25
25 Queue ADT - FIFO Collection –Elements of some proper type T Operations –Feature: First In, First Out –void push(T t) –void pop() –T front() –bool empty() –unsigned int size() –Constructors and destructors
26
26 Queue Model—FIFO Empty Q animal parade queue
27
27 Queue Model—FIFO Q.Push(“ant”) ant front back animal parade queue
28
28 Queue Model—FIFO Q.Push(“bee”) antbee front back animal parade queue
29
29 Queue Model—FIFO Q.Push(“cat”) antbeecat front back animal parade queue
30
30 Queue Model—FIFO Q.Push(“dog”) antbeecatdog front back animal parade queue
31
31 Queue Model—FIFO Q.Pop() beecatdog front back animal parade queue
32
32 Queue Model—FIFO Q.Pop() catdog front back animal parade queue
33
33 Queue Model—FIFO Q.Push(“eel”) Q.Pop() eel front back animal parade queue
34
34 Implementations and Uses of Queue ADT Implementations –Any list implementation push_front()/pop_back() push_back()/? Uses –Buffers –Breadth first search –Simulations –Producer-Consumer Problems
35
35 Breadth First Search Problem –Find a shortest path from start to goal Solution –Start from Node start –Visit All neighbors of the node –Stop If a neighbor is goal –Otherwise Visit neighbors two hops away –Repeat (Stop/Otherwise) Visiting neighbors N hops away 1 234 5687 9101211 start goal
36
36 Breadth First Search (2) Queue 1 234 5687 9101211 start goal 1 Push
37
37 Breadth First Search (3) Queue 1 234 5687 9101211 start goal Pop
38
38 Breadth First Search (4) Queue 1 234 5687 9101211 start goal 234 Push
39
39 Breadth First Search (5) Queue 1 234 5687 9101211 start goal Pop 34
40
40 Breadth First Search (6) Queue 1 234 5687 9101211 start goal 3456 Push
41
41 Breadth First Search (7) Queue 1 234 5687 9101211 start goal 456 Pop
42
42 Breadth First Search (8) Queue 1 234 5687 9101211 start goal 45678 Push
43
43 Breadth First Search (9) Queue 1 234 5687 9101211 start goal 5678 Pop
44
44 Breadth First Search (10) Queue 1 234 5687 9101211 start goal 678 Pop
45
45 Breadth First Search (11) Queue 1 234 5687 9101211 start goal 78 Pop
46
46 Breadth First Search (12) Queue 1 234 5687 9101211 start goal 789 Push
47
47 Breadth First Search (13) Queue 1 234 5687 9101211 start goal 89 Pop
48
48 Breadth First Search (14) Queue 1 234 5687 9101211 start goal 8910 Push
49
49 BFS Implementation BFS { queue Q; // mark the start location as visited Q.push(start); while (Q is not empty) { t = Q.front(); for (// each unvisited neighbor n of node t) { Q.push(n); if (n == goal) Success(S); } Q.pop(); } Failure(Q); }
50
50 Adaptor Class Adapts the public interface of another class Adaptee: the class being used Adaptor: the new class being defined –Uses protected object of the adaptee type –Uses the adaptee’s methods to define adaptor methods Stack and Queue implemented via adaptor classes
51
51 Stack Adaptor Requirements Stack –push() –pop() –top() –empty() –size() Can use List, Deque –Push(): push_back() –Pop(): pop_back()
52
52 Class Stack template class Stack { protected: Container c; public: void push(const T & x) { c.push_back(x); } void pop() { c.pop_back(); } T top() const { return c.back(); } int empty() const { return c.empty(); } unsigned int size() const { return c.size(); } void clear() { c.clear(); } }; Declaration –Stack > floatStack; –Stack > intStack; For STL stack container –template > class stack; –stack charStack;
53
53 Queue Adaptor Requirements Queue –push() –pop () –front() –empty() –size() Can use List, Deque –Push(): push_front() –Pop(): pop_back()
54
54 Class Queue template class Queue { protected: Container c; public: void push(const T & x) { c.push_back(x); } void pop() { c.pop_front(); } T front() const { return c.front(); } int empty() const { return c.empty(); } unsigned int size() const { return c.size(); } void clear() { c.clear(); } }; Declaration Queue > floatQueue; Queue > intQueue; For STL stack container template > class queue; queue charQueue;
55
55 Circular Array front back animal parade queue
56
56 Circular Array Q.Push(“ant”) ant front back animal parade queue
57
57 Queue Model—FIFO Q.Push(“bee”) antbee front back animal parade queue
58
58 Queue Model—FIFO Q.Push(“cat”) catantbee front back animal parade queue
59
59 Queue Model—FIFO Q.Push(“dog”) catdogantbee front back animal parade queue
60
60 Queue Model—FIFO Q.Pop() catdogbee front back animal parade queue
61
61 Queue Model—FIFO Q.Pop() catdog front back animal parade queue
62
62 Expanding the Array abc abc Where are front and back? Why can’t we use all four locations? cabcab c ababc
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.