DSLAB
DSLAB
LAB MANUAL
B.TECH
(II YEAR – I SEM)
(2025-26)
By
Y SIREESHA
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING
VISION
To achieve high quality in technical education that provides the skills and attitude to adapt to
the global needs of the Information Technology sector, through academic and research
excellence.
MISSION
To equip the students with the cognizance for problem solving and to improve the teaching
learning pedagogy by using innovative techniques.
To strengthen the knowledge base of the faculty and students with motivation towards
possession of effective academic skills and relevant research experience.
To promote the necessary moral and ethical values among the engineers, for the betterment
of the society.
PROGRAMME EDUCATIONAL OBJECTIVES (PEOs)
To create and sustain a community of learning in which students acquire knowledge and learn
to apply it professionally with due consideration for ethical, ecological and economic issues.
To provide knowledge-based services to satisfy the needs of society and the industry by
providing hands on experience in various technologies in core field.
To make the students to design, experiment, analyze, interpret in the core field with the help
of other multi-disciplinary concepts wherever applicable.
To educate the students to disseminate research findings with good soft skills and become a
successful entrepreneur.
After the completion of the course, B. Tech Information Technology, the graduates will have the
following Program Specific Outcomes:
1. Fundamentals and critical knowledge of the Computer System: Able to understand the
working principles of the computer System and its components, Apply the knowledge to
build, asses, and analyze the software and hardware aspects of it.
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.
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.
DEPARTMENT OF COMPUTER SCIENCE AND ENGINEERING
GENERAL LABORATORY INSTRUCTIONS
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.
DATA STRUCTURES USING PYTHON LAB
COURSE OBJECTIVES:
1. To understand a range of Object-Oriented Programming, as well as in-depth data and
information processing techniques.
2. To understand the how linear data structures works
3. To understand the how non-linear data structures works
4. To understand the how searching sorting works.
5. To understand the how Trees and Graphs works in DS.
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.
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.
3. 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.
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].
Table of Contents
S.No Name of the Page
program No
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
week1. 1
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.
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
week2. meanings for the area( ) and perimeter( ) methods. Write a simple 5
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.
Develop an inheritance hierarchy based upon a Polygon class that has
week 3. 9
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.
Write a Python program to illustrate the following comprehensions:
week 4. a) List Comprehensions b) Dictionary Comprehensions 13
WEEK 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 = petalNumberself.price = petalPrice
print ("\n")
Output:
Exercise Programs:
WEEK 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:
@abstractmethoddef
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 area(self):
#Area of Triangle
s = self._perimeter/2product = 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()
self._area = self.area()
def area(self):
# Area of an irregular Quadrilateral semiperimeter =
sum(self._side_lengths) / 2
return math.sqrt((semiperimeter - self._side_lengths[0]) *(semiperimeter -
self._side_lengths[1]) * (semiperimeter - self._side_lengths[2]) *
(semiperimeter - self._side_lengths[3]))
class Pentagon(Polygon):
def init (self, side_lengths): super().
init (side_lengths, 5) self._perimeter =
self.perimeter()self._area = self.area()
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 Pentagonp1 =
Pentagon(1)
print(p1.perimeter(), p1.area())
Output:
WEEK 3:
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:
@abstractmethoddef
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 area(self):
#Area of Triangle
s = self._perimeter/2product = 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()
self._area = self.area()
def area(self):
# Area of an irregular Quadrilateral semiperimeter =
sum(self._side_lengths) / 2
class Pentagon(Polygon):
def init (self, side_lengths): super(). init (side_lengths, 5)
self._perimeter = self.perimeter()self._area =
self.area()
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 Pentagonp1 =
Pentagon(1)
print(p1.perimeter(), p1.area())
Output:
Exercise Programs:
WEEK 4:
a) Write a Python program that inputs a list of words, separated by whitespace, and outputs
how many times each word appears in the list.
Program:
word_list = set(words)
word_count={}
for word in word_list:
if word != '':
word_count[word]=words.count(word)
print(word_count)
Output:
Exercise Programs:
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:
#Constructing output list WITHOUT using List comprehensions
input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7]
output_list = []
Output:
Page 18
Data Structures Using Python 2024-2025
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 19
Data Structures Using Python 2024-2025
[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:
state = ['Gujarat', 'Maharashtra', 'Rajasthan']capital = ['Gandhinagar',
'Mumbai', 'Jaipur']
output_dict = {}
#
Using loop for constructing output dictionary
for (key, value) in zip(state, capital): output_dict[key] = value
Output:
Page 20
Data Structures Using Python 2024-2025
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]
set_using_comp = {var for var in input_list if var % 2 == 0}print("Output Set using set
comprehensions:",set_using_comp)
Output:
Page 21
Data Structures Using Python 2024-2025
Page 22
Data Structures Using Python 2024-2025
d) Generator Comprehensions:
Output:
Exercise Programs:
WEEK 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:
Output:
Exercise Programs:
WEEK 6:
Output:
left = 0
right = len(List) - 1global
iterations iterations = 0
Output:
Exercise Programs:
WEEK 7:
Output:
def selection_sort(alist):
for i in range(0, len(alist) - 1):smallest = i
for j in range(i + 1, len(alist)):if alist[j] <
alist[smallest]:
smallest = j
alist[i], alist[smallest] = alist[smallest], alist[i]
Output:
Exercise Programs:
WEEK 8:
Output:
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:
Exercise Programs:
WEEK 9:
Stack Program:
stack = Stack(3)
stack.push(1)
stack.push(2)
stack.pop()
stack.pop()
stack.push(3)
Output:
Queue Program:
return self.q[self.front]
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:
Exercise Programs:
WEEK 10:
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 differentoperations on the linked list.
'' '
def isempty(self):'''
Returns True if linked list is empty, otherwise False.'''
return self._size == 0
self._tail = newestself._size += 1
if self.isempty(): self._head =
newestself._tail = newest
else:
newest._link = self._headself._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._linkp._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 deletionoperation.")
return
e = self._head._element self._head =
self._head._linkself._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 deletionoperation.")
return
p = self._head
if p._link == None:e =
p._element
self._head = Noneelse:
while p._link._link != None:p = p._link
e = p._link._elementp._link =
None self._tail = p
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 -= 1return e
def display(self):
'''Utility function to display the linked list.'''
if self.isempty() == 0:p =
self._head while p:
print(p._element, end='-->')p = p._link
print("NULL")else:
print("Empty")
###################################################################
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")
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 == 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:
Exercise Programs:
WEEK 11:
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 differentoperations on the doubly linked
list.
'''
def isempty(self):'''
Returns True if doubly linked list is empty, otherwise False.
'''
return self._size == 0
self.isempty():
self._head = newestelse:
self._tail._link = newestnewest._prev = self._tail
self._tail = newestself._size += 1
if self.isempty(): self._head =
newestself._tail = newest
else:
newest._link = self._headself._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.
'''
if self.isempty():
print('List is already empty')return
e = self._head._element self._head =
self._head._linkself._size -= 1
if self.isempty(): self._tail =
None
else:
self._head._prev = Nonereturn 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._prevself._size -= 1
else:
self._tail._link = Nonereturn e
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)
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")
###################################################################
Output:
Exercise Programs:
WEEK 12:
Program:
#
Binary Search Treeclass
binarySearchTree:
def init (self,val=None):self.val = val
self.left = None self.right
None =
def insert(self,val):
# check if there is no rootif (self.val ==
None):
self.val = val
# check where to insertelse:
# 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 valueif (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)
# same steps as above here the condition we check is value to be# inserted > currentNode's value
else:
if(self.right): self.right.insert(val)
else: self.right = 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([])
# 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([])
if (self.right): self.right.traverseInOrder(lst)
return lst
if (len(nodes_effected)==1):
if (parent_node.left.val == deleteing_node.val) : parent_node.left = None
else: parent_node.right = Nonereturn
'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
= Noneself.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)
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: