1.16k likes | 1.31k Vues
C++ Programming: Program Design Including Data Structures, Fifth Edition. Chapter 18: Stacks and Queues. Objectives. In this chapter, you will: Learn about stacks Examine various stack operations Learn how to implement a stack as an array Learn how to implement a stack as a linked list
E N D
C++ Programming:Program Design IncludingData Structures, Fifth Edition Chapter 18: Stacks and Queues
Objectives In this chapter, you will: • Learn about stacks • Examine various stack operations • Learn how to implement a stack as an array • Learn how to implement a stack as a linked list • Discover stack applications • Learn how to use a stack to remove recursion C++ Programming: Program Design Including Data Structures, Fifth Edition
Objectives (cont'd.) • Learn about queues • Examine various queue operations • Learn how to implement a queue as an array • Learn how to implement a queue as a linked list • Discover queue applications C++ Programming: Program Design Including Data Structures, Fifth Edition
Stacks • Stack: list of homogenous elements • Addition and deletion occur only at one end, called the top of the stack • Example: in a cafeteria, the second tray can be removed only if first tray has been removed • Last in first out (LIFO) data structure • Operations: • Push: to add an element onto the stack • Pop: to remove an element from the stack C++ Programming: Program Design Including Data Structures, Fifth Edition
Stacks (cont’d.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Stacks (cont’d.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Stack Operations • In the abstract class stackADT: • initializeStack • isEmptyStack • isFullStack • push • top • pop C++ Programming: Program Design Including Data Structures, Fifth Edition
Implementation of Stacks as Arrays • First element can go in first array position, the second in the second position, etc. • The top of the stack is the index of the last element added to the stack • Stack elements are stored in an array • Stack element is accessed only through top • To keep track of the top position, use a variable called stackTop C++ Programming: Program Design Including Data Structures, Fifth Edition
Implementation of Stacks as Arrays (cont'd.) • Because stack is homogeneous • You can use an array to implement a stack • Can dynamically allocate array • Enables user to specify size of the array • The class stackType implements the functions of the abstract class stackADT C++ Programming: Program Design Including Data Structures, Fifth Edition
Implementation of Stacks as Arrays (cont'd.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Implementation of Stacks as Arrays (cont'd.) • C++ arrays begin with the index 0 • Must distinguish between: • The value of stackTop • The array position indicated by stackTop • If stackTop is 0, the stack is empty • If stackTop is nonzero, the stack is not empty • The top element is given by stackTop - 1 C++ Programming: Program Design Including Data Structures, Fifth Edition
Implementation of Stacks as Arrays (cont'd.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Initialize Stack C++ Programming: Program Design Including Data Structures, Fifth Edition
Empty Stack • If stackTop is 0, the stack is empty C++ Programming: Program Design Including Data Structures, Fifth Edition
Full Stack • The stack is full if stackTop is equal to maxStackSize C++ Programming: Program Design Including Data Structures, Fifth Edition
Push • Store the newItem in the array component indicated by stackTop • Increment stackTop • Must avoid an overflow C++ Programming: Program Design Including Data Structures, Fifth Edition
Push (cont'd.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Return the Top Element C++ Programming: Program Design Including Data Structures, Fifth Edition
Pop • Simply decrement stackTop by 1 • Must check for underflow condition C++ Programming: Program Design Including Data Structures, Fifth Edition
Pop (cont’d.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Pop (cont’d.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Copy Stack C++ Programming: Program Design Including Data Structures, Fifth Edition
Constructor and Destructor C++ Programming: Program Design Including Data Structures, Fifth Edition
Constructor and Destructor (cont'd.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Copy Constructor C++ Programming: Program Design Including Data Structures, Fifth Edition
Overloading the Assignment Operator (=) C++ Programming: Program Design Including Data Structures, Fifth Edition
Stack Header File • Place definitions of class and functions (stack operations) together in a file C++ Programming: Program Design Including Data Structures, Fifth Edition
Programming Example: Highest GPA • Input: program reads an input file with each student’s GPA and name 3.5 Bill 3.6 John 2.7 Lisa 3.9 Kathy 3.4 Jason 3.9 David 3.4 Jack • Output: the highest GPA and all the names associated with the highest GPA C++ Programming: Program Design Including Data Structures, Fifth Edition
Programming Example: Problem Analysis and Algorithm Design • Read the first GPA and name of the student • This is the highest GPA so far • Read the second GPA and student name • Compare this GPA with highest GPA so far • New GPA is greater than highest GPA so far • Update highest GPA, initialize stack, add to stack • New GPA is equal to the highest GPA so far • Add name to stack • New GPA is smaller than the highest GPA • Discard C++ Programming: Program Design Including Data Structures, Fifth Edition
Programming Example: Problem Analysis and Algorithm Design (cont’d.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Programming Example: Problem Analysis and Algorithm Design (cont’d.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Linked Implementation of Stacks • Array only allows fixed number of elements • If number of elements to be pushed exceeds array size • Program may terminate • Linked lists can dynamically organize data • In a linked representation, stackTop is pointer to top element in stack C++ Programming: Program Design Including Data Structures, Fifth Edition
Linked Implementation of Stacks (cont’d.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Default Constructor • Initializes the stack to an empty state when a stack object is declared • Sets stackTop to NULL C++ Programming: Program Design Including Data Structures, Fifth Edition
Empty Stack and Full Stack • In the linked implementation of stacks, the function isFullStack does not apply • Logically, the stack is never full C++ Programming: Program Design Including Data Structures, Fifth Edition
Initialize Stack C++ Programming: Program Design Including Data Structures, Fifth Edition
Push • The newElement is added at the beginning of the linked list pointed to by stackTop C++ Programming: Program Design Including Data Structures, Fifth Edition
Push (cont'd.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Push (cont'd.) • We do not need to check whether the stack is full before we push an element onto the stack C++ Programming: Program Design Including Data Structures, Fifth Edition
Return the Top Element C++ Programming: Program Design Including Data Structures, Fifth Edition
Pop • Node pointed to by stackTop is removed C++ Programming: Program Design Including Data Structures, Fifth Edition
Pop (cont'd.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Pop (cont'd.) C++ Programming: Program Design Including Data Structures, Fifth Edition
Copy Stack C++ Programming: Program Design Including Data Structures, Fifth Edition
Copy Stack (cont'd.) • Notice that this function is similar to the definition of copyList for linked lists C++ Programming: Program Design Including Data Structures, Fifth Edition
Constructors and Destructors C++ Programming: Program Design Including Data Structures, Fifth Edition
Overloading the Assignment Operator (=) C++ Programming: Program Design Including Data Structures, Fifth Edition
Stack as Derived from the class unorderedLinkedList • Our implementation of push is similar to insertFirst (discussed for general lists) • Other functions are similar too: • initializeStack and initializeList • isEmptyList and isEmptyStack • linkedStackType can be derived from linkedListType • class linkedListType is abstract • Must implement pop as described earlier C++ Programming: Program Design Including Data Structures, Fifth Edition
Derived Stack (cont’d.) • unorderedLinkedListType is derived from linkedListType • Provides the definitions of the abstract functions of the class linkedListType • We can derive the linkedStackType from unorderedLinkedListType C++ Programming: Program Design Including Data Structures, Fifth Edition
Application of Stacks: Postfix Expressions Calculator • Infix notation: usual notation for writing arithmetic expressions • The operator is written between the operands • Example: a + b • The operators have precedence • Parentheses can be used to override precedence C++ Programming: Program Design Including Data Structures, Fifth Edition