What are Stacks?
A Stack
is a Linear Data Structure that follows a process of FILO
or First In - Last Out.
To understand how a stack works, you can think of it as a pile of plates. If you were to add a plate, you would add it to the top of the pile, and if you were to remove a plate, you can only remove the top plate.
We will be using an array called stack
for the demonstration and a variable top
initialized as -1
to indicate an empty stack
and let us assume that the stack
has to be of size 5
. The various operations that can be performed on a stack are:
Push
The push
operation adds
the value to the top of the stack
. If the top
value is the same
as the size of the stack
, if a push operation is attempted, it will lead to Stack Overflow
indicating that you're trying to add a value past the allocated space. The function for the push operation:
def push():
#let us assume the stack to be of size 5
global top
global stack
# value from 0 to size-1, as top begins from -1
if(top == 4):
print("Stack Overflow")
else:
a = int(input("Enter value"))
stack.append(a)
top+=1
print(f"{a} pushed to stack")
Pop
The pop
operation removes
the value at the top of the stack
. If the value of top
is -1
(ie, the stack is empty) and the pop operation is attempted, it will lead to Stack Underflow
indicating that you're trying to remove a value from an empty stack. The function for the pop operation:
def pop():
global top
global stack
if(top == -1):
print("Stack Underflow")
else:
print(f"{stack[top]} has been popped")
stack.pop(top)
top -= 1
Peek
The Peek Operation displays the value at the top of the stack. The function for the peek operation is:
def peek():
global top
global stack
if(top == -1):
print("Stack is empty")
else:
print(f"Top: {stack[top]}")
State of Stack
This function combines the three operations is_empty()
which tells you whether or not the stack is empty, is_full()
which tells you whether or not the stack is full. The function for the operation is:
def state_of_stack():
if(top==4):
print("Stack is full")
elif(top == -1):
print("Stack is empty")
else:
print("Stack is partially empty")
To simulate the functioning of the stack, the complete code is given below
import array as ar
## Global variables
stack = ar.array('i', [])
top = -1
def push():
global top
global stack
if(top == 4):
print("Stack Overflow")
else:
a = int(input("Enter value"))
stack.append(a)
top+=1
print(f"{a} pushed to stack")
def pop():
global top
global stack
if(top == -1):
print("Stack Underflow")
else:
print(f"{stack[top]} has been popped")
stack.pop(top)
top -= 1
def peek():
global top
global stack
if(top == -1):
print("Stack is empty")
else:
print(f"Top: {stack[top]}")
def state_of_stack():
if(top==4):
print("Stack is full")
elif(top == -1):
print("Stack is empty")
else:
print("Stack is partially empty")
## Driver Code
while(True):
print("1.Push\n2.Pop\n3.Peek\n4.State of Stack\n5.Exit")
ch = int(input())
if(ch==1):
push()
elif(ch==2):
pop()
elif(ch==3):
peek()
elif(ch==4):
state_of_stack()
else:
break
Note
Since we will be modifying the stack in the functions, we use the global value to modify the variables that are being used
Top comments (0)