Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Stacks and Queues Sections 3.6 and 3.7 Chapter 3 Lists, Stacks, and Queues Abstract Data Types, Vectors.

Similar presentations


Presentation on theme: "1 Stacks and Queues Sections 3.6 and 3.7 Chapter 3 Lists, Stacks, and Queues Abstract Data Types, Vectors."— Presentation transcript:

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


Download ppt "1 Stacks and Queues Sections 3.6 and 3.7 Chapter 3 Lists, Stacks, and Queues Abstract Data Types, Vectors."

Similar presentations


Ads by Google