DATA STRUCTURE & ALGORITHMS. CHAPTER 3: STACKS. Objectives. In this chapter, you will: Learn about stacks Examine various stack operations Discover stack applications. Stacks. Stack : list of homogenous elements Addition and deletion occur only at one end, called the top of the stack
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation
Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement.Téléchargez la présentation en cliquant sur ce lien.Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.
Objectives In this chapter, you will: • Learn about stacks • Examine various stack operations • Discover stack applications
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
Stack Operations • In the abstract class stackADT: • initializeStack • isEmptyStack • isFullStack • push • top • pop
Stack Application Stack applications classified into 4 broad categories: • Reversing data – e.g. reverse a list & convert decimal to binary. • Eg. 26 = 110102 • Parsing data – e.g. translate a source program to machine language. • Postponing data usage – e.g. evaluation, transformation. • Backtracking – e.g. computer gaming, decision analysis, expert systems.
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
Implementation of Stacks as Arrays • 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
Implementation of Stacks as Arrays • 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
Pop • Simply decrement stackTop by 1 • Must check for underflow condition
Stacks Example Example Suppose the following 6 elements are pushed, in order, onto an empty stacks. A, B, C, D, E, F We write the stack: STACK: A, B, C, D, E, F
Pseudocode for Array of Stacks Procedure 3.1 PUSH(STACK, TOP, MAXSTK, ITEM) This procedure pushes an ITEM onto a stack. 1. [Stack already filled ?] If TOP = MAXSTK, then: Print:OVERFLOW, and Return. 2. Set TOP := TOP + 1. [Increses TOP by 1] 3. Set STACK[TOP] :=ITEM. [Inserts ITEM in new TOP position. 4. Return.
Pseudocode for Array of Stacks Procedure 3.2 POP(STACK, TOP, ITEM) This procedures deletes the top element of STACK and assigns it to the variable ITEM. 1. [Stacks has an item to be removed?] If TOP = 0, the Print: UNDERFLOW, and RETURN. 2. Set ITEM := STACK[TOP].[Assigns TOP elements to ITEM.] 3. Set TOP := TOP – 1.[ Decreases TOP by 1] 4. Return.
Stack Exercise Exercise 1: Consider the following stack of characters, where STACK is allocated N = 8 memory cells : STACK : A,C,D, F, K, _, _ , _ ( For notational convenience, we use “_” to denote an empty memory cell). Describe the stack as the following operations take place : • POP (STACK, ITEM ) (e) POP (STACK, ITEM) • POP (STACK,ITEM) (f) PUSH(STACK, R) (c) PUSH (STACK, L) (g) PUSH(STACK, S) (d) PUSH (STACK, P) (h) POP(STACK, ITEM)
Stack Exercise Exercise 2: Consider the following stack, where STACK is allocated N = 6 memory cells : STACK : A, D, E, F, G, _______. (a) PUSH(STACK, K) (b) POP(STACK, ITEM ) (c) PUSH(STACK, L) (d) PUSH(STACK,S) (e) POP(STACK, ITEM) (f) PUSH(STACK, M)
Stack Header File • Place definitions of class and functions (stack operations) together in a file
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 29
Default Constructor Initializes the stack to an empty state when a stack object is declared Sets stackTop to NULL 31
Empty Stack and Full Stack In the linked implementation of stacks, the function isFullStack does not apply Logically, the stack is never full 32
Copy Stack Notice that this function is similar to the definition of copyList for linked lists 44
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 45
Application of Stacks: Postfix Expressions Calculator Prefix (Polish) notation: the operators are written before the operands Introduced by the Polish mathematician Jan Lukasiewicz Early 1920s The parentheses can be omitted Example: + ab 46
Application of Stacks: Postfix Expressions Calculator Reverse Polish notation: the operators follow the operands (postfix operators) Proposed by the Australian philosopher and early computer scientist Charles L. Hamblin Late 1950's Advantage: the operators appear in the order required for computation Example: a + b * c In a postfix expression: abc * + 47
Application of Stacks: Postfix Expressions Calculator Postfix notation has important applications in computer science Many compilers first translate arithmetic expressions into postfix notation and then translate this expression into machine code Evaluation algorithm: Scan expression from left to right When an operator is found, back up to get the operands, perform the operation, and continue 49