Data Structures Using Python Lab Manual (R20a0583)
Data Structures Using Python Lab Manual (R20a0583)
LAB MANUAL
(R20A0583)
B.TECH
II YEAR – I SEM
(2021-22)
Vision
Mission
2. Problem analysis: Identify, formulate, review research literature, and analyze complex
engineering problems reaching substantiated conclusions using first principles of
mathematics, natural sciences, and engineering sciences.
5. Modern tool usage: Create, select, and apply appropriate techniques, resources, and
modern engineering and IT tools including prediction and modeling to complex
engineering activities with an understanding of the limitations.
6. The engineer and society: Apply reasoning informed by the contextual knowledge to
assess societal, health, safety, legal and cultural issues and the consequent
responsibilities relevant to the professional engineering practice.
8. Ethics: Apply ethical principles and commit to professional ethics and responsibilities
and norms of the engineering practice.
11. Project management and finance: Demonstrate knowledge and understanding of the
engineering and management principles and apply these to one’s own work, as a
member and leader in a team, to manage projects and in multi disciplinary environments.
12. Life- long learning: Recognize the need for, and have the preparation and ability to
engage in independent and life-long learning in the broadest context of technological
change.
MALLA REDDY COLLEGE OF ENGINEERING & TECHNOLOGY
Maisammaguda, Dhulapally Post, Via Hakimpet, Secunderabad – 500100
1. Students are advised to come to the laboratory at least 5 minutes before (to the starting time),
those who come after 5 minutes will not be allowed into the lab.
2. Plan your task properly much before to the commencement, come prepared to the lab with the
synopsis / program / experiment details.
3. Student should enter into the laboratory with:
a. Laboratory observation notes with all the details (Problem statement, Aim, Algorithm,
Procedure, Program, Expected Output, etc.,) filled in for the lab session.
b. Laboratory Record updated up to the last session experiments and other utensils (if any) needed
in the lab.
c. Proper Dress code and Identity card.
4. Sign in the laboratory login register, write the TIME-IN, and occupy the computer system
allotted to you by the faculty.
5. Execute your task in the laboratory, and record the results / output in the lab observation note
book, and get certified by the concerned faculty.
6. All the students should be polite and cooperative with the laboratory staff, must maintain the
discipline and decency in the laboratory.
7. Computer labs are established with sophisticated and high end branded systems, which should
be utilized properly.
8. Students / Faculty must keep their mobile phones in SWITCHED OFF mode during the lab
sessions. Misuse of the equipment, misbehaviors with the staff and systems etc., will attract
severe punishment.
9. Students must take the permission of the faculty in case of any urgency to go out; if anybody
found loitering outside the lab / class without permission during working hours will be treated
seriously and punished appropriately.
10. Students should LOG OFF/ SHUT DOWN the computer system before he/she leaves the lab
after completing the task (experiment) in all aspects. He/she must ensure the system / seat is
kept properly.
1. Write a Python program for class, Flower, that has three instance variables of type str, int,
and float, that respectively represent the name of the flower, its number of petals, and its
price. Your class must include a constructor method that initializes each variable to an
appropriate value, and your class should include methods for setting the value of each type,
and retrieving the value of each type.
Program:
class Flower:
#Common base class for all Flowers
def init (self, petalName, petalNumber, petalPrice):
self.name = petalName
self.petals = petalNumber
self.price = petalPrice
def getName(self):
return self.name
def getPetals(self):
return self.petals
def getPrice(self):
return self.price
print ("\n")
Page 1
Data Structures using Python Lab 2021-2022
Output:
Page 2
Data Structures using Python Lab 2021-2022
Exercise Programs:
Page 3
Data Structures using Python Lab 2021-2022
Page 4
Data Structures using Python Lab 2021-2022
2. Develop an inheritance hierarchy based upon a Polygon class that has abstract methods
area( ) and perimeter( ). Implement classes Triangle, Quadrilateral, Pentagon, that extend this
base class, with the obvious meanings for the area( ) and perimeter( ) methods. Write a
simple program that allows users to create polygons of the various types and input their
geometric dimensions, and the program then outputs their area and perimeter.
Program:
from abc import abstractmethod, ABCMeta
import math
@abstractmethod
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
class Triangle(Polygon):
def init (self, side_lengths):
super(). init (side_lengths, 3)
self._perimeter = self.perimeter()
self._area = self.area()
def perimeter(self):
return(sum(self._side_lengths))
def area(self):
#Area of Triangle
s = self._perimeter/2
product = s
for i in self._side_lengths:
product*=(s-i)
return product**0.5
class Quadrilateral(Polygon):
def init (self, side_lengths):
super(). init (side_lengths, 4)
self._perimeter = self.perimeter()
Page 5
Data Structures using Python Lab 2021-2022
self._area = self.area()
def perimeter(self):
return(sum(self._side_lengths))
def area(self):
class Pentagon(Polygon):
def init (self, side_lengths):
super(). init (side_lengths, 5)
self._perimeter = self.perimeter()
self._area = self.area()
def perimeter(self):
return((self._side_lengths) * 5)
def area(self):
#object of Triangle
t1 = Triangle([1,2,2])
print(t1.perimeter(), t1.area())
#object of Quadrilateral
q1 = Quadrilateral([1,1,1,1])
print(q1.perimeter(), q1.area())
#object of Pentagon
p1 = Pentagon(1)
print(p1.perimeter(), p1.area())
Output:
Page 6
Data Structures using Python Lab 2021-2022
Exercise Programs:
Page 7
Data Structures using Python Lab 2021-2022
Page 8
Data Structures using Python Lab 2021-2022
Method Overloading
Method overloading is an OOPS concept which provides ability to have several methods
having the same name with in the class where the methods differ in types or number of
arguments passed.
Method overloading in its traditional sense (as defined above) as exists in other languages
like method overloading in Java doesn’t exist in Python.
In Python if you try to overload a function by having two or more functions having the same
name but different number of arguments only the last defined function is recognized, calling
any other overloaded function results in an error.
Since using the same method name again to overload the method is not possible in Python, so
achieving method overloading in Python is done by having a single method with several
parameters. Then you need to check the actual number of arguments passed to the method
and perform the operation accordingly.
Program:
class OverloadDemo:
# sum method with default as None for parameters
def sum(self, a=None, b=None, c=None):
# When three params are passed
if a!=None and b!=None and c!=None:
s = a + b + c
print('Sum = ', s)
# When two params are passed
elif a!=None and b!=None:
s = a + b
print('Sum = ', s)
od = OverloadDemo()
od.sum(7, 8)
od.sum(7, 8, 9)
Output:
Page 9
Data Structures using Python Lab 2021-2022
Method overriding provides ability to change the implementation of a method in a child class
which is already defined in one of its super class. If there is a method in a super class and
method having the same name and same number of arguments in a child class then the child
class method is said to be overriding the parent class method.
When the method is called with parent class object, method of the parent class is executed.
When method is called with child class object, method of the child class is executed. So the
appropriate overridden method is called based on the object type, which is an example of
Polymorphism.
Program:
class Person:
def init (self, name, age):
self.name = name
self.age = age
def displayData(self):
print('In parent class displayData method')
print(self.name)
print(self.age)
class Employee(Person):
def init (self, name, age, id):
# calling constructor of super class
super(). init (name, age)
self.empId = id
def displayData(self):
print('In child class displayData method')
print(self.name)
print(self.age)
print(self.empId)
Output:
Page 10
Data Structures using Python Lab 2021-2022
Exercise Programs:
Page 11
Data Structures using Python Lab 2021-2022
Page 12
Data Structures using Python Lab 2021-2022
Comprehensions in Python
Comprehensions in Python provide us with a short and concise way to construct new
sequences (such as lists, set, dictionary etc.) using sequences which have been already
defined. Python supports the following 4 types of comprehensions:
a) List Comprehensions
b) Dictionary Comprehensions
c) Set Comprehensions
d) Generator Comprehensions
a) List Comprehensions:
List Comprehensions provide an elegant way to create new lists. The following is the basic
structure of a list comprehension:
output_list = [output_exp for var in input_list if (var satisfies this condition)]
Note that list comprehension may or may not contain an if condition. List comprehensions
can contain multiple for (nested list comprehensions).
Example: Suppose we want to create an output list which contains only the even numbers
which are present in the input list. Let’s see how to do this using for loop and list
comprehension and decide which method suits better.
Using Loop:
output_list = []
Output:
Page 13
Data Structures using Python Lab 2021-2022
input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7]
Output:
b) Dictionary Comprehensions:
Extending the idea of list comprehensions, we can also create a dictionary using dictionary
comprehensions. The basic structure of a dictionary comprehension looks like below.
output_dict = {key:value for (key, value) in iterable if (key, value satisfy this condition)}
Example 1: Suppose we want to create an output dictionary which contains only the odd
numbers that are present in the input list as keys and their cubes as values. Let’s see how to
do this using for loops and dictionary comprehension.
Using Loop:
input_list = [1, 2, 3, 4, 5, 6, 7]
output_dict = {}
Output:
Page 14
Data Structures using Python Lab 2021-2022
input_list = [1,2,3,4,5,6,7]
Output:
Example 2: Given two lists containing the names of states and their corresponding capitals,
construct a dictionary which maps the states with their respective capitals. Let’s see how to
do this using for loops and dictionary comprehension.
Using Loop:
output_dict = {}
Output:
Page 15
Data Structures using Python Lab 2021-2022
Output:
c) Set Comprehensions:
Set comprehensions are pretty similar to list comprehensions. The only difference between
them is that set comprehensions use curly brackets { }. Let’s look at the following example
to understand set comprehensions.
Example : Suppose we want to create an output set which contains only the even numbers
that are present in the input list. Note that set will discard all the duplicate values. Let’s see
how we can do this using for loops and set comprehension.
Using Loop:
input_list = [1, 2, 3, 4, 4, 5, 6, 6, 6, 7, 7]
output_set = set()
Output:
input_list = [1, 2, 3, 4, 4, 5, 6, 6, 6, 7, 7]
Output:
Page 16
Data Structures using Python Lab 2021-2022
d) Generator Comprehensions:
Generator Comprehensions are very similar to list comprehensions. One difference between
them is that generator comprehensions use circular brackets whereas list comprehensions
use square brackets. The major difference between them is that generators don’t allocate
memory for the whole list. Instead, they generate each value one by one which is why they
are memory efficient. Let’s look at the following example to understand generator
comprehension:
input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7]
Output:
Page 17
Data Structures using Python Lab 2021-2022
Exercise Programs:
Page 18
Data Structures using Python Lab 2021-2022
Page 19
Data Structures using Python Lab 2021-2022
5. Write a Python program to generate the combinations of n distinct objects taken from the
elements of a given list. Example: Original list: [1, 2, 3, 4, 5, 6, 7, 8, 9] Combinations of 2
distinct objects: [1, 2] [1, 3] [1, 4] [1, 5] [7, 8] [7, 9] [8, 9].
Program:
def combination(n, n_list):
if n<=0:
yield []
return
for i in range(len(n_list)):
c_num = n_list[i:i+1]
for a_num in combination(n-1, n_list[i+1:]):
yield c_num + a_num
n_list = [1,2,3,4,5,6,7,8,9]
print("Original list:")
print(n_list)
n = 2
result = combination(n, n_list)
print("\nCombinations of",n,"distinct objects:")
for e in result:
print(e)
Output:
Page 20
Data Structures using Python Lab 2021-2022
Exercise Programs:
Page 21
Data Structures using Python Lab 2021-2022
Page 22
Data Structures using Python Lab 2021-2022
Output:
Page 23
Data Structures using Python Lab 2021-2022
left = 0
right = len(List) - 1
global iterations
iterations = 0
Output:
Page 24
Data Structures using Python Lab 2021-2022
Exercise Programs:
Page 25
Data Structures using Python Lab 2021-2022
Page 26
Data Structures using Python Lab 2021-2022
Output:
Output:
Page 27
Data Structures using Python Lab 2021-2022
Exercise Programs:
Page 28
Data Structures using Python Lab 2021-2022
Page 29
Data Structures using Python Lab 2021-2022
Output:
Page 30
Data Structures using Python Lab 2021-2022
while True:
while (i <= j and alist[i] <= pivot):
i = i + 1
while (i <= j and alist[j] >= pivot):
j = j - 1
if i <= j:
alist[i], alist[j] = alist[j], alist[i]
else:
alist[start], alist[j] = alist[j], alist[start]
return j
Output:
Page 31
Data Structures using Python Lab 2021-2022
Exercise Programs:
Page 32
Data Structures using Python Lab 2021-2022
Page 33
Data Structures using Python Lab 2021-2022
Stack Program:
Page 34
Data Structures using Python Lab 2021-2022
stack = Stack(3)
Output:
Page 35
Data Structures using Python Lab 2021-2022
Page 36
Data Structures using Python Lab 2021-2022
Queue Program:
# Initialize queue
def init (self, size):
self.q = [None] * size # list to store queue elements
self.capacity = size # maximum capacity of the queue
self.front = 0 # front points to the front element in the queue
self.rear = -1 # rear points to the last element in the queue
self.count = 0 # current size of the queue
return self.q[self.front]
Page 37
Data Structures using Python Lab 2021-2022
q.append(1)
q.append(2)
q.append(3)
q.pop()
q.pop()
if q.isEmpty():
print("The queue is empty")
else:
print("The queue is not empty")
Output:
Page 38
Data Structures using Python Lab 2021-2022
Page 39
Data Structures using Python Lab 2021-2022
Exercise Programs:
Page 40
Data Structures using Python Lab 2021-2022
Page 41
Data Structures using Python Lab 2021-2022
Program:
import os
from typing import NewType
class _Node:
'''
Creates a Node with two fields:
1. element (accesed using ._element)
2. link (accesed using ._link)
'''
slots = '_element', '_link'
class LinkedList:
'''
Consists of member funtions to perform different
operations on the linked list.
'''
def isempty(self):
'''
Returns True if linked list is empty, otherwise False.
'''
return self._size == 0
Page 42
Data Structures using Python Lab 2021-2022
if self.isempty():
self._head = newest
else:
self._tail._link = newest
self._tail = newest
self._size += 1
if self.isempty():
self._head = newest
self._tail = newest
else:
newest._link = self._head
self._head = newest
self._size += 1
i = index - 1
p = self._head
if self.isempty():
self.addFirst(e)
else:
for i in range(i):
p = p._link
newest._link = p._link
p._link = newest
print(f"Added Item at index {index}!\n\n")
self._size += 1
def removeFirst(self):
'''
Removes element from the beginning of the linked list.
Returns the removed element.
'''
if self.isempty():
print("List is Empty. Cannot perform deletion
operation.")
return
Page 43
Data Structures using Python Lab 2021-2022
e = self._head._element
self._head = self._head._link
self._size = self._size - 1
if self.isempty():
self._tail = None
return e
def removeLast(self):
'''
Removes element from the end of the linked list.
Returns the removed element.
'''
if self.isempty():
print("List is Empty. Cannot perform deletion
operation.")
return
p = self._head
if p._link == None:
e = p._element
self._head = None
else:
while p._link._link != None:
p = p._link
e = p._link._element
p._link = None
self._tail = p
self._size = self._size - 1
return e
if index == 0:
return self.removeFirst()
elif index == self._size - 1:
return self.removeLast()
else:
for x in range(i):
p = p._link
e = p._link._element
p._link = p._link._link
self._size -= 1
return e
def display(self):
'''
Page 44
Data Structures using Python Lab 2021-2022
###################################################################
def options():
'''
Prints Menu for operations
'''
options_list = ['Add Last', 'Add First', 'Add Anywhere',
'Remove First', 'Remove Last', 'Remove Anywhere',
'Display List', 'Print Size', 'Search', 'Exit']
print("MENU")
for i, option in enumerate(options_list):
print(f'{i + 1}. {option}')
def switch_case(choice):
'''
Switch Case for operations
'''
if choice == 1:
elem = int(input("Enter Item: "))
L.addLast(elem)
print("Added Item at Last!\n\n")
elif choice == 2:
elem = int(input("Enter Item: "))
L.addFirst(elem)
print("Added Item at First!\n\n")
Page 45
Data Structures using Python Lab 2021-2022
elif choice == 3:
elem = int(input("Enter Item: "))
index = int(input("Enter Index: "))
L.addAnywhere(elem, index)
elif choice == 4:
print("Removed Element from First:", L.removeFirst())
elif choice == 5:
print("Removed Element from last:", L.removeLast())
elif choice == 6:
index = int(input("Enter Index: "))
print(f"Removed Item: {L.removeAnywhere(index)} !\n\n")
elif choice == 7:
print("List: ", end='')
L.display()
print("\n")
elif choice == 8:
print("Size:", len(L))
print("\n")
elif choice == 9:
key = int(input("Enter item to search: "))
if L.search(key) >= 0:
print(f"Item {key} found at index position
{L.search(key)}\n\n")
else:
print("Item not in the list\n\n")
###################################################################
Output:
Page 46
Data Structures using Python Lab 2021-2022
Page 47
Data Structures using Python Lab 2021-2022
Exercise Programs:
Page 48
Data Structures using Python Lab 2021-2022
Page 49
Data Structures using Python Lab 2021-2022
Program:
import os
class _Node:
'''
Creates a Node with three fields:
1. element (accessed using ._element)
2. link (accessed using ._link)
3. prev (accessed using ._prev)
'''
slots = '_element', '_link', '_prev'
class DoublyLL:
'''
Consists of member funtions to perform different
operations on the doubly linked list.
'''
def isempty(self):
'''
Returns True if doubly linked list is empty, otherwise False.
'''
return self._size == 0
Page 50
Data Structures using Python Lab 2021-2022
if self.isempty():
self._head = newest
else:
self._tail._link = newest
newest._prev = self._tail
self._tail = newest
self._size += 1
if self.isempty():
self._head = newest
self._tail = newest
else:
newest._link = self._head
self._head._prev = newest
self._head = newest
self._size += 1
def removeFirst(self):
'''
Removes element from the beginning of the doubly linked list.
Returns the removed element.
'''
Page 51
Data Structures using Python Lab 2021-2022
if self.isempty():
print('List is already empty')
return
e = self._head._element
self._head = self._head._link
self._size -= 1
if self.isempty():
self._tail = None
else:
self._head._prev = None
return e
def removeLast(self):
'''
Removes element from the end of the doubly linked list.
Returns the removed element.
'''
if self.isempty():
print("List is already empty")
return
e = self._tail._element
self._tail = self._tail._prev
self._size -= 1
if self.isempty():
self._head = None
else:
self._tail._link = None
return e
Page 52
Data Structures using Python Lab 2021-2022
def display(self):
'''
Utility function to display the doubly linked list.
'''
if self.isempty():
print("List is Empty")
return
p = self._head
print("NULL<-->", end='')
while p:
print(p._element, end="<-->")
p = p._link
print("NULL")
###################################################################
def options():
'''
Prints Menu for operations
'''
options_list = ['Add Last', 'Add First', 'Add Anywhere',
'Remove First', 'Remove Last', 'Remove Anywhere',
'Display List', 'Exit']
print("MENU")
for i, option in enumerate(options_list):
print(f'{i + 1}. {option}')
def switch_case(choice):
'''
Switch Case for operations
'''
os.system('cls')
if choice == 1:
elem = int(input("Enter Item: "))
DL.addLast(elem)
print("Added Item at Last!\n\n")
elif choice == 2:
elem = int(input("Enter Item: "))
DL.addFirst(elem)
print("Added Item at First!\n\n")
elif choice == 3:
elem = int(input("Enter Item: "))
index = int(input("Enter Index: "))
DL.addAnywhere(elem, index)
Page 53
Data Structures using Python Lab 2021-2022
elif choice == 4:
print("Removed Element from First:", DL.removeFirst())
elif choice == 5:
print("Removed Element from last:", DL.removeLast())
elif choice == 6:
index = int(input("Enter Index: "))
print(f"Removed Item: {DL.removeAnywhere(index)} !\n\n")
elif choice == 7:
print("List:")
DL.display()
print("\n")
elif choice == 8:
import sys
sys.exit()
###################################################################
Output:
Page 54
Data Structures using Python Lab 2021-2022
Page 55
Data Structures using Python Lab 2021-2022
Exercise Programs:
Page 56
Data Structures using Python Lab 2021-2022
Page 57
Data Structures using Python Lab 2021-2022
Program:
def insert(self,val):
# check if there is no root
if (self.val == None):
self.val = val
# check where to insert
else:
# check for duplicate then stop and return
if val == self.val: return 'no duplicates allowed in binary search tree'
# check if value to be inserted < currentNode's value
if (val < self.val):
# check if there is a left node to currentNode if true then recurse
if(self.left):
self.left.insert(val)
# insert where left of currentNode when currentNode.left=None
else: self.left = binarySearchTree(val)
def breadthFirstSearch(self):
currentNode = self
bfs_list = []
queue = []
queue.insert(0,currentNode)
while(len(queue) > 0):
currentNode = queue.pop()
bfs_list.append(currentNode.val)
if(currentNode.left):
queue.insert(0,currentNode.left)
if(currentNode.right):
queue.insert(0,currentNode.right)
return bfs_list
# In order means first left child, then parent, at last right child
def depthFirstSearch_INorder(self):
return self.traverseInOrder([])
Page 58
Data Structures using Python Lab 2021-2022
# Pre order means first parent, then left child, at last right child
def depthFirstSearch_PREorder(self):
return self.traversePreOrder([])
# Post order means first left child, then right child , at last parent
def depthFirstSearch_POSTorder(self):
return self.traversePostOrder([])
Page 59
Data Structures using Python Lab 2021-2022
if (len(nodes_effected)==1):
if (parent_node.left.val == deleteing_node.val) : parent_node.left = None
else: parent_node.right = None
return 'Succesfully deleted'
# if len(nodes_effected) > 1 which means the node we are
# going to delete has 'children',
# so the tree must be rearranged from the deleteing_node
else:
# if the node we want to delete doesn't have any parent
# means the node to be deleted is 'root' node
if (parent_node == None):
nodes_effected.remove(deleteing_node.val)
# make the 'root' nodee i.e self value,left,right to None,
# this means we need to implement a new tree again without
# the deleted node
self.left = None
self.right = None
self.val = None
bst = binarySearchTree()
bst.insert(7)
bst.insert(4)
bst.insert(9)
bst.insert(0)
bst.insert(5)
bst.insert(8)
bst.insert(13)
Page 60
Data Structures using Python Lab 2021-2022
# 7
# / \
# / \
# 4 9
# / \ / \
# 0 5 8 13
print(bst.delete(5))
print(bst.delete(9))
print(bst.delete(7))
# after deleting
print('IN order: ',bst.depthFirstSearch_INorder())
print('PRE order:' ,bst.depthFirstSearch_PREorder())
print('POST order:', bst.depthFirstSearch_POSTorder())
Output:
Page 61
Data Structures using Python Lab 2021-2022
Exercise Programs:
Page 62
Data Structures using Python Lab 2021-2022
Page 63