You are on page 1of 6
91 Data Structures Il — Stacks and Queues Using Lists 9.1 Introduction 22 Stacks 9.3 Queues INTRODUCTION The term data structure refers to a data collection with well defined operations and behaviour or properties. A stack is a linear structure implemented in LIFO (Last In First Out) manner where insertions and deletions are restricted to occur only at one end - stack’s top. LIFO means element last inserted would be the first one to be deleted. The stack is also a dynamic data structure as it can grow (with increase in number of elements) or shrink (with decrease in number of elements). ‘A Queue is also a linear dynamic structure implemented in FIFO (First In First Out) manner where insertions can occur at the “rear” end, and deletions occur only at “front” end. FIFO means elements are deleted in the same order as they are inserted into. This chapter will talk about stacks and queues data structures and how you can implement them in Python using lists. a COMPUTER SCIENCE WITH PYTHON ~ 9.2 STACKS A stack is a linear structure implemented in LIFO (Last In First and deletions are restricted to occur only at one end ~ Stack’s t st inserted would be the first one to be deleted. Thus, we can say that a stack is alist of data that follows these rules To.s00 1. Data can only be removed from the top (pop), ie. the element at aes, the top of the stack. The removal of element from a stack is eee technically called POP operation. ys 2. A new data element can only be added to the top of the stack face (push). The insertion of element in a stack is technically called PUSH operation daca Consider Fig, 9.1 that illustrates the operations (Push and Pop) on a stack. am en . £ leemenaroe | j : | cere 1 |"top popped ! f-top iO 29 fe top 1 jer 32 32 fHtop. 2 |--top. (a) Stack empty (b) Push ‘32° (c) Push '18' —(d) Pop 1 element (e) Push 29 (f) Pop 1 element Notice, all stack operations - Push or Pop-take place at one end-the stack’s top Figure 9.2. Stack operations ~ Push and Pop. The stack is a dynamic data structure as it can grow (with increase in number of elements) or shrink (with decrease in number of elements). A static data structure, on the other Out) manner where insertions op. LIFO means element last A Stack is a linear list imple- mented in LiFO ~ Last n First 0 ‘manner where insertions and hand, is the one that has fixed size. deletions are restricted to occur, Other Stack Terms There are some other terms related to stacks, such as Peek, Overflow and Underflow. only at one end ~ Stack’s top. | Peek Refers to inspecting the value at the stack’s top without removing it, It is also sometimes referred as inspection. Overflow Refers to situation (ERROR) when one tries to push an item in stack that is full. This situation occurs when the size of the stack is fixed and cannot grow further or there is no memory left to accommodate new item. Underflow Refers to situation (ERROR) when one tries to pop/delete an item from an empty stack. That is, stack is currently having no item and still one The technical terms for insertion-in- tries to pop an item. Push and Pop respectively. ‘a-stack and deletion-from-stack are 351 CChopter 9 + DATA STRUCTURES il — STACKS AND QUEUES USING LISTS Consider some exam, ples illustrating stack-functioning in limited-size stack. (Please note, we have bound fixed thi Dee 'e capacity of the stack for understanding purposes.) sample 9.1 Given a Bounded ‘Stack of capacity 4 which is initially empty, draw pictures of the stack after each of the following steps. Initially the Stack is ae ae aan " (® Stack is empty (ii) Push ‘a’ (iii) Push ‘b’ (iv) Push ‘ce () Pop (vi) Push ‘a’ (vii) Pop (viii) Push ‘e” (ix) Push ‘f (x) Push (xi) Pop (xii) Pop (xiii) Pop (xiv) Pop (av) Pop. Solution, top=7 () Stack is empty ( top = None) (vii) oO 1 = 3 + (i) Push ‘a’ top=@ oO 1 2 3 (viii) al [ o 12 3 a al[ble| (ii) Push ‘b? top=4 + o 1 2 3 (ix) Push ‘f? top=3 a b 0 e 2 3 t alolele (iv) Push‘? top=2 t Oradea arte. (x) Push ‘g? top=3 alolec () Pop top=1 1 2 [OVERFLOW because tlie stack is bounded, it cannot o grow. If it could grow, then there would have been no albls OVERFLOW until no memory i eft. - In Pthon, for stacks implemented through tists) since Lists ean grow, OVERFLOW condition does not arse anil all the memory is exhausted.) (xi) Pop top=2 (oi) Push ‘a? top=2 Ques ame oes: ie a{[bjd|_ 352 } 92 2 COMPUTER SCIENCE WaTH PTHON — (xi) Pop top at (xiv) Pop top = None oo 1 2s oo 1 2s GT I TJ (xii) Pop top 28 (22) Pop top = None 3 oi 23 CI I SUNOERF l Imalementing Stack in Python s y Jn Python, you can use Lists to implement stacks. Python offers us a convenient set of methods to operate lists as stacks, For various stack operations, we can use a list say Stack and use Python code as described below Peek — We ean use: isa lst; tap is an integer having value equal to len(.append(citen>) where isthe item being pushed in the Stack, Pop Wecanuse: —.pop() it removes the last value from the Stack and returns it Let us now implement a stack of numbers through a program, ef Push(stk, item) 91 Python program to implement sack operations sinennehanae STACK IMPLEMENTATION eavadenentnnes Stack: implemented as a list top + integer having position of topnost elesent in Stack def istmpty( stk): Sf stem (] return True else return False CChopter 9 : DATA STRUCTURES il — STACKS. AND QUEUES USING LISTS def Push(stk, item) : stk. append(item) top = len(stk) - 1 def Pop(stk) : if isEmpty(stk return "Underflow" else: item = stk.pop() if len (stk) == 0: top = None else: top = len(stk) - 1 return item def Peek(stk) : if is Empty(stk) : return "Underflow” els ‘top = len(stk) - 1 return stk[top] def Display(stk) : if isEmpty(stk) : print("Stack empty") els top = len(stk) -1 print(stk[top], for ainrange(top-1, -1, -1): print(stk[a]) #_main_ stack = [] # initially stack is empty ‘top = None while True print ("STACK OPERATIONS") print("1. Push") print("2. Pop") print("3. Peek") print ("4. Display stack") print("S. Exit ch = int (input ("Enter your choice (1-5) :")) if ch item = int(input (“Enter item :")) Push(Stack, item) elif ch==2: item = Pop(Stack) if item == "Underflow" : print("Underflow! Stack is enpty!") else: AAS) 5) Grint ("Popped item is", item) 353 36 94 COMPUTER SCIENCE WITH PYTHON ~ xij elif cha= 3 item = Peek (Stack) if item == "Underflow" : print("Underflow! Stack is empty!") else: print("Topmost item is", item) elif ches a: Display(Stack) elifch==5; break else : print (“Invalid choice!") Sample run of the above program is as shown below : STACK OPERATIONS STACK OPERATIONS STACK OPERATIONS 1. Push 1. Push 1. Push 2. Pop 2. Pop 2. Pop 3. Peek 3. Peek 3. Peek 4. Display stack 4. Display stack 4. Display stack 5. exit 5. Exit 5. exit Enter your choice (1-5) :1 Enter your choice (1-5) :1 Enter your choice (1-5) :4 Enter item :6 Enter item :4 oe a = 2 STACK OPERATIONS, STACK OPERATIONS ‘ 1. Push 1. Push 6 2. Pop 2. Pop a ae 3. Peek 3, Peck STACK OPERATIONS 4, Display stack 4. Display stack Tren 5. Exit 5. Exit 2. Pop Enter your choice (1-5) !1_ enter your choice (1-5) 14 3" peck Enter item < a : ; on 4. Display stack STACK OPERATIONS. a eee eh : Enter your choice (1-5) 2. Pop A peek —) STACK OPERATIONS oe 1. Push Enter your choice (1-5) ee Enter item :2 oe 2 4. Display stack 5. Exit Enter your choice ( 1-5) :3 Topmost item is 4 OPPO F9

You might also like