Chapter 3
Stacks
Objectives
Upon completion you will be able to
• Explain the design, use, and operation of a stack
• Implement a stack using a linked list structure
• Understand the operation of the stack ADT
• Write application programs using the stack ADT
• Discuss reversing data, parsing, postponing and backtracking
Data Structures: A Pseudocode Approach with C 1
Data Structures: A Pseudocode Approach with C 2
3-1 Basic Stack Operations
The stack concept is introduced and three basic stack
operations are discussed.
• Push
• Pop
• Stack Top
Data Structures: A Pseudocode Approach with C 3
Data Structures: A Pseudocode Approach with C 4
Data Structures: A Pseudocode Approach with C 5
Data Structures: A Pseudocode Approach with C 6
Data Structures: A Pseudocode Approach with C 7
3-2 Stack Linked List Implementation
In this section we present a linked-list design for a
stack. After developing the data structures, we write
pseudocode algorithms for the stack ADT.
• Data Structure
• Algorithms
Data Structures: A Pseudocode Approach with C 8
Data Structures: A Pseudocode Approach with C 9
Data Structures: A Pseudocode Approach with C 10
Data Structures: A Pseudocode Approach with C 11
Data Structures: A Pseudocode Approach with C 12
Data Structures: A Pseudocode Approach with C 13
Data Structures: A Pseudocode Approach with C 14
Data Structures: A Pseudocode Approach with C 15
Data Structures: A Pseudocode Approach with C 16
Data Structures: A Pseudocode Approach with C 17
Data Structures: A Pseudocode Approach with C 18
Data Structures: A Pseudocode Approach with C 19
Data Structures: A Pseudocode Approach with C 20
Data Structures: A Pseudocode Approach with C 21
Data Structures: A Pseudocode Approach with C 22
3-3 C Language Implementations
This section presents a simple non-ADT implementation
of a stack. We develop a simple program that inserts
random characters into the stack and then prints them.
Data Structures: A Pseudocode Approach with C 23
Data Structures: A Pseudocode Approach with C 24
Data Structures: A Pseudocode Approach with C 25
Data Structures: A Pseudocode Approach with C 26
Data Structures: A Pseudocode Approach with C 27
(Continued)
Data Structures: A Pseudocode Approach with C 28
Data Structures: A Pseudocode Approach with C 29
Data Structures: A Pseudocode Approach with C 30
Data Structures: A Pseudocode Approach with C 31
3-4 Stack ADT
We begin the discussion of the stack ADT with a
discussion of the stack structure and its application
interface. We then develop the required functions.
• Data Structure
• ADT Implemenation
Data Structures: A Pseudocode Approach with C 32
Data Structures: A Pseudocode Approach with C 33
Data Structures: A Pseudocode Approach with C 34
Data Structures: A Pseudocode Approach with C 35
Data Structures: A Pseudocode Approach with C 36
Data Structures: A Pseudocode Approach with C 37
Data Structures: A Pseudocode Approach with C 38
Data Structures: A Pseudocode Approach with C 39
Data Structures: A Pseudocode Approach with C 40
Data Structures: A Pseudocode Approach with C 41
Data Structures: A Pseudocode Approach with C 42
Data Structures: A Pseudocode Approach with C 43
Data Structures: A Pseudocode Approach with C 44
Data Structures: A Pseudocode Approach with C 45
3-5 Stack Applications
Three basic application problems-parsing,
postponement, and backtracking-are discussed and
sample programs developed. In addition, several other
stack applications are presented, including the classic
Eight Queens problem.
• Reversing Data
• Converting Decimal to Binary
• Parsing
• Postponement
• Backtracking
Data Structures: A Pseudocode Approach with C 46
Data Structures: A Pseudocode Approach with C 47
Data Structures: A Pseudocode Approach with C 48
Data Structures: A Pseudocode Approach with C 49
(continued)
Data Structures: A Pseudocode Approach with C 50
Data Structures: A Pseudocode Approach with C 51
Data Structures: A Pseudocode Approach with C 52
Data Structures: A Pseudocode Approach with C 53
Data Structures: A Pseudocode Approach with C 54
Data Structures: A Pseudocode Approach with C 55
Data Structures: A Pseudocode Approach with C 56
Data Structures: A Pseudocode Approach with C 57
Data Structures: A Pseudocode Approach with C 58
Data Structures: A Pseudocode Approach with C 59
Data Structures: A Pseudocode Approach with C 60
Data Structures: A Pseudocode Approach with C 61
Data Structures: A Pseudocode Approach with C 62
Data Structures: A Pseudocode Approach with C 63
Data Structures: A Pseudocode Approach with C 64
Data Structures: A Pseudocode Approach with C 65
Data Structures: A Pseudocode Approach with C 66
Data Structures: A Pseudocode Approach with C 67
Data Structures: A Pseudocode Approach with C 68
Data Structures: A Pseudocode Approach with C 69
Data Structures: A Pseudocode Approach with C 70
Data Structures: A Pseudocode Approach with C 71
Data Structures: A Pseudocode Approach with C 72
Data Structures: A Pseudocode Approach with C 73
Data Structures: A Pseudocode Approach with C 74
Data Structures: A Pseudocode Approach with C 75
Data Structures: A Pseudocode Approach with C 76
Data Structures: A Pseudocode Approach with C 77
(continued)
Data Structures: A Pseudocode Approach with C 78
Data Structures: A Pseudocode Approach with C 79
Data Structures: A Pseudocode Approach with C 80
Data Structures: A Pseudocode Approach with C 81
Data Structures: A Pseudocode Approach with C 82
Data Structures: A Pseudocode Approach with C 83
Data Structures: A Pseudocode Approach with C 84
Data Structures: A Pseudocode Approach with C 85
Data Structures: A Pseudocode Approach with C 86
Data Structures: A Pseudocode Approach with C 87
Data Structures: A Pseudocode Approach with C 88
Data Structures: A Pseudocode Approach with C 89
Data Structures: A Pseudocode Approach with C 90
3-6 How Recursion Works
This section discusses the concept of the stack frame
and the use of stacks in writing recursive software
• Enqueue
• Dequeue
• Queue Front
• Queue Rear
• Queue Example
Data Structures: A Pseudocode Approach with C 91
Data Structures: A Pseudocode Approach with C 92
Data Structures: A Pseudocode Approach with C 93
Data Structures: A Pseudocode Approach with C 94
Data Structures: A Pseudocode Approach with C 95