Chapter 3 Stacks and Queues  The Stack Abstract Data Type  The Queue Abstract Data Type  A Mazing Problem  Evaluation of Expressions.

Slides:



Advertisements
Similar presentations
Stack & Queues COP 3502.
Advertisements

§3 The Stack ADT 1. ADT A stack is a Last-In-First-Out (LIFO) list, that is, an ordered list in which insertions and deletions are.
Bioinformatics Programming
Templates in C++ Template function in C++ makes it easier to reuse classes and functions. A template can be viewed as a variable that can be instantiated.
CSCE 3110 Data Structures & Algorithm Analysis Stacks and Queues Reading: Chap.3 Weiss.
CS Data Structures ( 資料結構 ) Chapter 3: Stacks and Queues Spring 2012.
Stacks Chapter 11.
Lec 7 Sept 17 Finish discussion of stack infix to postfix conversion Queue queue ADT implementation of insert, delete etc. an application of queue.
Stacks Example: Stack of plates in cafeteria.
Data Structures and Algorithms (60-254)
C o n f i d e n t i a l Developed By Nitendra NextHome Subject Name: Data Structure Using C Title : Overview of Stack.
Data Structure (Part I) Stacks and Queues. Introduction to Stack An stack is a ordered list in which insertion and deletions are made at one end. –The.
Data Structures (Second Part) Lecture 3 : Array, Linked List, Stack & Queue Bong-Soo Sohn Assistant Professor School of Computer Science and Engineering.
CSCE 3110 Data Structures & Algorithm Analysis Queues Reading: Chap. 3 Weiss.
CHAPTER 31 STACKS AND QUEUES. CHAPTER 32 A BABA DCBADCBA CBACBA DCBADCBA EDCBAEDCBA top *Figure 3.1: Inserting and deleting elements in a stack (p.102)
Chapter 3 1. Templates in C++ Template function in C++ makes it easier to reuse classes and functions. A template can be viewed as a variable that can.
 Balancing Symbols 3. Applications
Stacks CS 3358 – Data Structures. What is a stack? It is an ordered group of homogeneous items of elements. Elements are added to and removed from the.
CS Data Structures Chapter 3 Stacks and Queues.
CS 206 Introduction to Computer Science II 03 / 06 / 2009 Instructor: Michael Eckmann.
CS 206 Introduction to Computer Science II 10 / 17 / 2008 Instructor: Michael Eckmann.
Lecture 8 Feb 19 Goals: l applications of stack l Postfix expression evaluation l Convert infix to postfix l possibly start discussing queue.
CHAPTER 31 STACKS AND QUEUES All the programs in this file are selected from Ellis Horowitz, Sartaj Sahni, and Susan Anderson-Freed “Fundamentals of Data.
Chapter 3. Templates in C++ Template function in C++ makes it easier to reuse classes and functions. A template can be viewed as a variable that can be.
Lecture 11 Sept 26, 2011 Goals convert from infix to postfix.
CH3 Stacks and Queues Instructors: C. Y. Tang and J. S. Roger Jang All the material are integrated from the textbook "Fundamentals of Data Structures in.
CS Data Structures Chapter 3 Stacks and Queues.
CS 206 Introduction to Computer Science II 10 / 28 / 2009 Instructor: Michael Eckmann.
Evaluation of Expressions
The Stack and Queue Types Lecture 10 Hartmut Kaiser
Fundamentals of Python: From First Programs Through Data Structures Chapter 14 Linear Collections: Stacks.
Comp 245 Data Structures Stacks. What is a Stack? A LIFO (last in, first out) structure Access (storage or retrieval) may only take place at the TOP NO.
1 Stacks Chapter 4 2 Introduction Consider a program to model a switching yard –Has main line and siding –Cars may be shunted, removed at any time.
CHAPTER 05 Compiled by: Dr. Mohammad Omar Alhawarat Stacks & Queues.
Computer Science Department Data Structure & Algorithms Problem Solving with Stack.
SAK 3117 Data Structures Chapter 3: STACKS. Objective To introduce: Stack concepts Stack operations Stack applications CONTENT 3.1 Introduction 3.2 Stack.
DATA STRUCTURE & ALGORITHMS CHAPTER 3: STACKS. 2 Objectives In this chapter, you will: Learn about stacks Examine various stack operations Discover stack.
Stacks 1. Stack  What is a stack? An ordered list where insertions and deletions occur at one end called the top. Also known as last-in-first-out (LIFO)
COP3530 Data Structures600 Stack Stack is one the most useful ADTs. Like list, it is a collection of data items. Supports “LIFO” (Last In First Out) discipline.
For more notes and topics VISIT: IMPLEMENTATION OF STACKS eITnotes.com.
CHAPTER 3 STACK CSEB324 DATA STRUCTURES & ALGORITHM.
杭州师范大学信息科学与工程学院 袁贞明 STACKS AND QUEUES and their applications.
CE 221 Data Structures and Algorithms Chapter 3: Lists, Stacks, and Queues - II Text: Read Weiss, §3.6 1Izmir University of Economics.
Copyright © Curt Hill Stacks An Useful Abstract Data Type.
CHP-3 STACKS.
Been-Chian Chien, Wei-Pang Yang and Wen-Yang Lin 3-1 Chapter 3 Stacks and Queues Introduction to Data Structures CHAPTER 3 STACKS and QUEUES 3.1 The Stack.
Chap 3 Stack and Queue. Templates in C++ Template function in C++ makes it easier to reuse classes and functions. A template can be viewed as a variable.
CSCE 3110 Data Structures & Algorithm Analysis Rada Mihalcea Stack Applications Reading: Chap. 3 Weiss.
STACKS AND QUEUES.
Stacks Chapter 3 Objectives Upon completion you will be able to
CE 221 Data Structures and Algorithms Chapter 3: Lists, Stacks, and Queues - II Text: Read Weiss, §3.6 1Izmir University of Economics.
 In general, Queue is line of person waiting for their turn at some service counter like ticket window at cinema hall, at bus stand or at railway station.
STACKS & QUEUES for CLASS XII ( C++).
Queues.
Stacks Stacks.
Data Structures 5th Week
Stacks Chapter 4.
Algorithms and Data Structures
STACK CHAPTER 03 Developed By :- Misha Ann Alexander Data Structures.
Visit for more Learning Resources
PART II STACK APPLICATIONS
Subject Name: DATA STURCTURES WITH C Subject Code: 10CS35
Stacks and Queues The Stack abstract data type
The List, Stack, and Queue ADTs
Stack A data structure in which elements are inserted and removed only at one end (called the top). Enforces Last-In-First-Out (LIFO) Uses of Stacks Evaluating.
پشته ها و صف ها.
CSCE 3110 Data Structures & Algorithm Analysis
Stack.
Chapter 7 (continued) © 2011 Pearson Addison-Wesley. All rights reserved.
Presented by : Aman Gupta PGT CS KV No.1, Narimedu, Madurai
Presentation transcript:

Chapter 3 Stacks and Queues  The Stack Abstract Data Type  The Queue Abstract Data Type  A Mazing Problem  Evaluation of Expressions

3.1 The stack ADT (1/5)   A stack is an ordered list in which insertions and deletions are made at one end called the top.  If we add the elements A, B, C, D, E to the stack, in that order, then E is the first element we delete from the stack  A stack is also known as a Last-In-First-Out (LIFO) list.

fp main fp al (a) (b) *Figure 3.2: System stack after function call a1 (p.103) An application of stack: stack frame of function call (activation record) stack frame of invoking function system stack before a1 is invoked system stack after a1 is invoked fp: a pointer to current stack frame 3.1 The stack ADT (2/5)

3.1 The stack ADT (3/5)  The ADT specification of the stack is shown in Structure 3.1

3.1 The stack ADT (4/5)   Implementation: using array

3.1 The stack ADT (5/5)

3.2 The queue ADT (1/7)   A queue is an ordered list in which all insertion take place one end, called the rear and all deletions take place at the opposite end, called the front  If we insert the elements A, B, C, D, E, in that order, then A is the first element we delete from the queue  A stack is also known as a First-In-First-Out (FIFO) list

3.2 The queue ADT (2/7)  The ADT specification of the queue appears in Structure 3.2

3.2 The queue ADT (3/7)   Implementation 1: using a one dimensional array and two variables, front and rear

3.2 The queue ADT (4/7) problem: there may be available space when IsFullQ is true i.e. movement is required.

3.2 The queue ADT (5/7)  Example 3.2 [Job scheduling]:  Figure 3.5 illustrates how an operating system might process jobs if it used a sequential representation for its queue.  As jobs enter and leave the system, the queue gradually shift to right.  In this case, queue_full should move the entire queue to the left so that the first element is again at queue[0], front is at -1, and rear is correctly positioned.  Shifting an array is very time-consuming, queue_full has a worst case complexity of O(MAX_QUEUE_SIZE).

3.2 (6/7)  We can obtain a more efficient representation if we regard the array queue[MAX_QUEUE_SIZE] as circular. Implementation 2: regard an array as a circular queue front:one position counterclockwise from the first element rear:current end Problem: one space is left when queue is full.

3.2 (7/7)  Implementing addq and deleteq for a circular queue is slightly more difficult since we must assure that a circular rotation occurs.

3.3 A Mazing Problem (1/8)  Representation of the maze  The most obvious choice is a two dimensional array  0s the open paths and 1s the barriers  Notice that not every position has eight neighbors.  To avoid checking for these border conditions we can surround the maze by a border of ones. Thus an m  p maze will require an (m+2)  (p+2) array  The entrance is at position [1][1] and the exit at [m][p] entrance exit

3.3 A Mazing Problem (2/8)  If X marks the spot of our current location, maze[row][col], then Figure 3.9 shows the possible moves from this position

3.3 A Mazing Problem (3/8)  A possible implementation:  Predefinition: the possible directions to move in an array, move, as in Figure  Obtained from Figure 3.9 typedef struct { short int vert; short int horiz; } offsets; offsets move[8]; /*array of moves for each direction*/  maze[row][col], maze[row][col],  If we are at position, maze[row][col], and we wish to find the position of the next move, maze[row][col], we set: next_row = row + move[dir].vert; next_col = col + move[dir].horiz;

3.3 A Mazing Problem (4/8)  Initial attempt at a maze traversal algorithm  maintain a second two-dimensional array, mark, to record the maze positions already checked   use stack to keep pass history #define MAX_STACK_SIZE 100 /*maximum stack size*/ typedef struct { short int row; short int col; short int dir; } element; element stack[MAX_STACK_SIZE];

maze[1][1]: entrance maze[15][11]: exit █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █  R 1 C 1 D 1 R: row C: col D: dir Initially set mark[1][1]=1 R 1 C 1 D 3   R 2 C 2 D 1  R 1 C 3 D 2  R 1 C 4 D 2  R 1 C 5 D 5  R 2 C 4 D 3  R 3 C 5 D 2  R 3 C 6 D 1  R 2 C 7 D 1  R 1 C 8 D 2  R 1 C 9 D 2  R1 C10 D 3  R2 C11 D 2  R2 C12 D 3 R3 C13 D 3 R4 C14 D 2  Pop out  R3 C13 D 6  R3 C12 D 5

3.3 A Mazing Problem (6/8)  Review of add and delete to a stack

3.3 A Mazing Problem (7/7)  Analysis:  The worst case of computing time of path is O(mp), where m and p are the number of rows and columns of the maze respectively (1,1) (m,p) (m+2)*(p+2) 0 7 N 1 6 W E 2 5 S 3 4

3.3 A Mazing Problem (8/8)  The size of a stack *Figure 3.11: Simple maze with a long path (p.116) m*pm*p

3.4 Evaluation of Expressions (1/14)  Introduction  The representation and evaluation of expressions is of great interest to computer scientists.  ((rear+1==front) || ((rear==MAX_QUEUE_SIZE-1) && !front)) (3.1)  x = a/b - c+d*e - a*c (3.2)  If we examine expressions (3.1), we notice that they contains:  operators: ==, +, -, ||, &&, !  operands: rear, front, MAX_QUEUE_SIZE  parentheses: ( )

3.4 Evaluation of Expressions (2/14)  Understanding the meaning of these or any other expressions and statements  assume a = 4, b = c = 2, d = e = 3 in the statement (3.2), finding out the value of x = a/b – c + d*e - a*c  Interpretation 1: ((4/2)-2)+(3*3)-(4*2) = = 1  Interpretation 2: (4/(2-2+3))*(3-4)*2 = (4/3)*(-1)*2 = …  we would have written (3.2) differently by using parentheses to change the order of evaluation:  x = ((a/(b - c+d))*(e - a)*c(3.3)  How to generate the machine instructions corresponding to a given expression? precedence rule + associative rule

3.4 (3/14)   Precedence hierarchy and associative for C

3.4 Evaluation of Expressions (4/14)  Evaluating postfix expressions  The standard way of writing expressions is known as infix notation  binary operator in-between its two operands  Infix notation is not the one used by compilers to evaluate expressions  Instead compilers typically use a parenthesis-free notation referred to as postfix Postfix: no parentheses, no precedence

3.4 Evaluation of Expressions (5/14)  Evaluating postfix expressions is much simpler than the evaluation of infix expressions:  There are no parentheses to consider.  To evaluate an expression we make a single left-to- right scan of it.  We can evaluate an expression easily by using a stack Figure 3.14 shows this processing when the input is nine character string 6 2/3-4 2*+

3.4 Evaluation of Expressions (6/14)  Representation  We now consider the representation of both the stack and the expression

3.4 Evaluation of Expressions (7/14)  Get Token

3.4 (8/14)  Evaluation of Postfix Expression

3.4 Evaluation of Expressions (9/14) string: 6 2/3-4 2*+ STACK we make a single left-to-right scan of it top 6 2 / * + not an operator, put into the stack 6 now, top must +1 not an operator, put into the stack 2 is an operator, pop two elements of the stack now, top must -2 add the string with the operator 6/2 not an operator, put into the stack 3 is an operator, pop two elements of the stack 6/2-3 not an operator, put into the stack 4 2 is an operator, pop two elements of the stack 4*2 is an operator, pop two elements of the stack 6/2-3+4*2 end of string, pop the stack and get answer now, top must -1 6 / * 2 the answer is

We can describe am algorithm for producing a postfix expression from an infix one as follows (1) Fully parenthesize expression a / b - c + d * e - a * c  ((((a / b) - c) + (d * e)) - (a * c)) (2) All operators replace their corresponding right parentheses ((((a / b) - c) + (d * e)) - (a * c)) (3)Delete all parentheses a b / c - d e * + a c * -  The order of operands is the same in infix and postfix / - * + * Evaluation of Expressions (10/14) two passes

3.4 Evaluation of Expressions (11/14)  Example 3.3 [Simple expression]: Simple expression a+b*c, which yields abc*+ in postfix.  Example 3.5 [Parenthesized expression]: The expression a*(b+c)*d, which yields abc+*d* in postfix match ) icp isp icp isp

3.4 Evaluation of Expressions (12/14)   Algorithm to convert from infix to postfix   Assumptions:   operators: (, ), +, -, *, /, %   operands: single digit integer or variable of one character 1. 1.Operands are taken out immediately 2. 2.Operators are taken out of the stack as long as their in-stack precedence (isp) is higher than or equal to the incoming precedence (icp) of the new operator 3. 3.‘(‘ has low isp, and high icp op()+-*/%eos Isp Icp precedence stack[MAX_STACK_SIZE]; /* isp and icp arrays -- index is value of precedence lparen, rparen, plus, minus, times, divide, mod, eos */ static int isp [ ] = {0, 19, 12, 12, 13, 13, 13, 0}; static int icp [ ] = {20, 19, 12, 12, 13, 13, 13, 0};

3.4 Evaluation of Expressions (13/14) a * ( b + c ) / d stack top output a*b+cd/ operand, print out operator * now, top must +1 push into the stack operator the isp of “( “ is 0 and the icp of “* “ is 13the isp of “/ “ is 13 and the icp of “* “ is 13 ( operand, print out operator the isp of “+“ is 12 and the icp of “( “ is 20 + operand, print out operator operator “)”, pop and print out until “(” now, top must - 1 operator pop the stack and printout operand, print out eos /

3.4 Evaluation of Expressions (14/14)  Complexity:  (n)  The total time spent here is  (n) as the number of tokens that get stacked and unstacked is linear in n  where n is the number of tokens in the expression

3.5 MULTIPLE STACKS AND QUEUE (1/5)   Two stacks m[0], m[1],…, m[n-2],m[n-1] bottommostbottommost stack 1stack 2 More than two stacks (n) memory is divided into n equal segments boundary[stack_no] 0  stack_no < MAX_STACKS top[stack_no] 0  stack_no < MAX_STACKS

3.5 MULTIPLE STACKS AND QUEUE (2/5) boundary[ 0] boundary[1] boundary[ 2] boundary[n] top[ 0] top[ 1] top[ 2] All stacks are empty and divided into roughly equal segments. *Figure 3.18: Initial configuration for n stacks in memory [m]. (p.129) 0 1 [ m/n ] 2[ m/n ] m-1 Initially, boundary[i]=top[i].

3.5 MULTIPLE STACKS AND QUEUE (3/5) a*(p.128) #define MEMORY_SIZE 100 /* size of memory */ #define MAX_STACK_SIZE 100 /* max number of stacks plus 1 */ /* global memory declaration */ element memory [MEMORY_SIZE]; element memory [MEMORY_SIZE]; int top [MAX_STACKS]; int top [MAX_STACKS]; int boundary [MAX_STACKS]; int boundary [MAX_STACKS]; int n; /* number of stacks entered by the user */ int n; /* number of stacks entered by the user */ *(p.129) To divide the array into roughly equal segments : top[0] = boundary[0] = -1; top[0] = boundary[0] = -1; for (i = 1; i < n; i++) for (i = 1; i < n; i++) top [i] =boundary [i] =(MEMORY_SIZE/n)*i; top [i] =boundary [i] =(MEMORY_SIZE/n)*i; boundary [n] = MEMORY_SIZE-1; boundary [n] = MEMORY_SIZE-1;

3.5 MULTIPLE STACKS AND QUEUE (4/5) *Program 3.12:Add an item to the stack stack-no (p.129) void add (int i, element item) { /* add an item to the ith stack */ /* add an item to the ith stack */ if (top [i] == boundary [i+1]) if (top [i] == boundary [i+1]) stack_full (i); may have unused storage stack_full (i); may have unused storage memory [++top [i] ] = item; memory [++top [i] ] = item;} *Program 3.13:Delete an item from the stack stack-no (p.130) element delete (int i) { /* remove top element from the ith stack */ if (top [i] == boundary [i]) if (top [i] == boundary [i]) return stack_empty (i); return stack_empty (i); return memory [ top [i]--]; return memory [ top [i]--];}

3.5 MULTIPLE STACKS AND QUEUE (5/5) b[0] t[0] b[1] t[1] b[i] t[i] t[i+1] t[j] b[j+1] b[n] b[i+1] b[i+2] b=boundary, t=top *Figure 3.19: Configuration when stack i meets stack i+1, but the memory is not full (p.130) Find j, stack_no < j < n such that top[j] < boundary[j+1] or, 0  j < stack_no meet 往左或右找一個空間 ( 往左 ) ( 往右 )