DSA Lab Manual 2024-2025 Updated
DSA Lab Manual 2024-2025 Updated
LABORATORY MANUAL
Semester : III
NAME:
USN:
SECTION:
PROGRAM OUTCOMES
Problem analysis: Identify, formulate, review research literature, and analyse complex engineering
problems reaching substantiated conclusions using first principles of mathematics, natural sciences,
and engineering sciences.
Design/development of solutions: Design solutions for complex engineering problems and design
system components or processes that meet the specified needs with appropriate consideration for the
public health and safety, and the cultural, societal, and environmental considerations.
Conduct investigations of complex problems: Use research-based knowledge and research methods
including design of experiments, analysis and interpretation of data, and synthesis of the information
to provide valid conclusions.
Modern tool usage: Create, select, and apply appropriate techniques, resources, and modern
engineering and IT tools including prediction and modeling to complex engineering activitieswith an
understanding of the limitations.
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.
Environment and sustainability: Understand the impact of the professional engineering solutions in
societal and environmental contexts, and demonstrate the knowledge of, and need for sustainable
development.
Ethics: Apply ethical principles and commit to professional ethics and responsibilities and norms of the
engineering practice.
Individual and team work: Function effectively as an individual, and as a member or leader in diverse
teams, and in multidisciplinary settings.
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
VISION
The East Point College of Engineering and Technology aspires to be a globally acclaimed
institution, recognized for excellence in engineering education, applied research and
nurturing students for holistic development.
MISSION
M2: To serve the technical, scientific, economic and societal developmental needsof our
communities
VISION
MISSION
M2: To augment experiential learning skills to serve technical, scientific, economic, and social
developmental needs.
M3: To instil integrity, critical thinking, personality development, and ethics in students for a
successful career in Industries, Research, and Entrepreneurship.
PEO 1: To produce graduates who can perform technical roles to contribute effectively in software
industries and R&D Centre
.
PEO 2: To produce graduates having the ability to adapt and contribute in key domains of computer
science and engineering to develop competent solutions.
PEO 3: To produce graduates who can provide socially and ethically responsible solutions while
adapting to new trends in the domain to carve a successful career in the industry
PROGRAM SPECIFIC OUTCOMES (PSOs)
PSO1: To conceptualize, model, design, simulate, analyse, develop, test, and validate computing
systems and solve technical problems arising in the field of computer science & engineering.
PSO2: To specialize in the sub-areas of computer science & engineering systems such as cloud
computing, Robotic Process Automation, cyber security, big data analytics, user interface design,
and IOT to meet industry requirements.
PSO3: To build innovative solutions to meet the demands of the industry using appropriate tools
and techniques.
This laboratory course enables students to get practical experience in design, develop,
implement, analyze and evaluation/testing of
CLO 2. Linear data structures and their applications such as stacks, queues and lists
CLO 3. Non-Linear data structures and their applications such as trees and graphs
COURSE OUTCOMES
CO 4. Explore the applications of trees and graphs to model and solve the real-world problem
CO 5. Make use of hashing techniques and resolve collisions during mapping of key value pairs
DATA STRUCTURES AND APPLICATIONS
[As per Choice Based Credit System (CBCS) scheme]
(Effective from the academic year 2023-2024)
SEMESTER – III
Course Code BCSL305 CIE Marks 50
Number of Lecture Hours/Week 0:0:2 SEE Marks 50
Total Number of Lecture Hours 28
CREDITS – 01
Course Learning Objectives:
This laboratory course enables students to get practical experience in design, develop,
implement, analyze and evaluation/testing of
Prerequisite
Sl.No List of problems for which student should develop program and execute in the
Laboratory
1 Aim: Demonstrate Creation and Display of array of structures
Program: Develop a Program in C for the following:
a. Declare a calendar as an array of 7 elements (A dynamically Created array) to represent
7 days of a week. Each Element of the array is a structure having three fields. The first
field is the name of the Day (A dynamically allocated String), The second field is the
date of the Day (A integer), the third field is the description of the activity for a
particular day (A dynamically allocated String).
b. Write functions create(), read() and display(); to create the calendar, to read the data
from the keyboard and to print weeks activity details report on screen.
2 Aim: Demonstrate the string Operations
Program: Develop a Program in C for the following operations on Strings.
a. Read a main String (STR), a Pattern String (PAT) and a Replace String (REP)
b. Perform Pattern Matching Operation: Find and Replace all occurrences of PAT in STR
with REP if PAT exists in STR. Report suitable messages in case PAT does not exist
in STR
Support the program with functions for each of the above operations. Don't use Built-in
functions.
3 Aim: Implement stack operations
Program: Develop a menu driven Program in C for the following operations on STACK of
Integers (Array Implementation of Stack with maximum size MAX)
a. Push an Element on to Stack
b. Pop an Element from Stack
c. Demonstrate how Stack can be used to check Palindrome
d. Demonstrate Overflow and Underflow situations on Stack
e. Display the status of Stack
f. Exit
Support the program with appropriate functions for each of the above operations
4 Aim: Implement the applications of stack
Program: Develop a Program in C for converting an Infix Expression to Postfix Expression.
Program should support for both parenthesized and free parenthesized expressions with the
operators: +, -, *, /, % (Remainder), ^ (Power) and alphanumeric operands
5 Aim: Implement the applications of stack
Program: Design, Develop and Implement a Program in C for the following Stack
Application
a. Evaluation of Suffix expression with single digit operands and operators: +, -, *, /, %, ^
b. Solving Tower of Hanoi problem with n disks
Course Outcomes
At the end of the course the student will be able to:
Reference Books:
1. Seymour Lipschutz, Data Structures Schaum's Outlines, Revised 1st Ed, McGraw Hill, 2014.
2. Reema Thareja, Data Structures using C, 3rd Ed, Oxford press, 2012
3. Gilberg and Forouzan, Data Structures: A Pseudo-code approach with C, 2nd Ed, Cengage
Learning,2014.
4. Jean-Paul Tremblay & Paul G. Sorenson, An Introduction to Data Structures with Applications,2nd
Ed, McGraw Hill, 2013
5. A M Tenenbaum, Data Structures using C, PHI, 1989
6. Robert Kruse, Data Structures and Program Design in C, 2nd Ed, PHI, 1996.
● http://elearning.vtu.ac.in/econtent/courses/video/CSE/06CS35.html
● https://nptel.ac.in/courses/106/105/106105171/
● http://www.nptelvideos.in/2012/11/data-structures-and-algorithms.html
● https://www.youtube.com/watch?v=3Xo6P_V-qns&t=201s
● https://ds2-iiith.vlabs.ac.in/exp/selection-sort/index.html
● https://nptel.ac.in/courses/106/102/106102064/
● https://ds1-iiith.vlabs.ac.in/exp/stacks-queues/index.html
● https://ds1-iiith.vlabs.ac.in/exp/linked-list/basics/overview.html
● https://ds1-iiith.vlabs.ac.in/List%20of%20experiments.html
● https://ds1-iiith.vlabs.ac.in/exp/tree-traversal/index.html
● https://ds1-iiith.vlabs.ac.in/exp/tree-traversal/depth-first-traversal/dft-practice.html
● https://infyspringboard.onwingspan.com/web/en/app/toc/lex_auth_013501595428077568125 59/overview
Conduct of Practical Examination:
➢ Experiment distribution
Students are allowed to pick one experiment from the lot with equal opportunity.
➢ Change of experiment is allowed only once and marks allotted for procedure to be made zero of
the changed part only.
Data Structure is defined as the way in which data is organized in the memory
EXPERIMENT - 01
Develop a Program in C for the following:
a. Declare a calendar as an array of 7 elements (A dynamically Created array) to represent 7 days of a
week. Each Element of the array is a structure having three fields. The first field is the name of the
Day (A dynamically allocated String), The second field is the date of the Day (A integer), the third
field is the description of the activity for a particular day (A dynamically allocated String).
b.Write functions create(), read() and display(); to create the calendar, to read the data from the keyboard
and to print weeks activity details report on screen.
ALGORITHM:
Step 1: Create a structure to represent day.
Step 2: Read data for the calendar.
Step 3: Display the weekly activity report
Step 4: Stop.
PROGRAM CODE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int weekSize = 7;
struct Day calendar[weekSize];
// Create the calendar
read(calendar, weekSize);
// Display the weekly activity details
display(calendar, weekSize);
// Free dynamically allocated memory
for (int i = 0; i < weekSize; i++)
{
free(calendar[i].name);
free(calendar[i].activity);
}
return 0;
}
Sample Output
Enter the day name: Monday
Enter the date: 161023
Enter the activity for the day: Reading
Enter the day name: Tuesday
Enter the date: 171023
Enter the activity for the day: Coding
Enter the day name: Wednesday
Enter the date: 181023
Enter the activity for the day: Painting
Enter the day name: Thursday
Enter the date: 191023
Dept. of CSE, EPCET, Bengaluru 16 2024-25
Data Structures Laboratory – BCSL305 III Semester / B.E.
Day 2: Tuesday
Date: 171023
Activity: Coding
Day 3: Wednesday
Date: 181023
Activity: Painting
Day 4: Thursday
Date: 191023
Activity: playing
Day 5: Friday
Date: 201023
Activity: shopping
Day 6: Saturday
Date: 211023
Activity: Watching Movie
Day 7: Sunday
Date: 221023
Activity: Completing Assignments
EXPERIMENT - 02
Design, Develop and Implement a program in C for the following operations on Strings
a. Read a Main String (STR), a Pattern String (PAT) and a Replace String (REP).
b. Perform Pattern Matching Operation: Find and Replace all occurrences of PAT in STR with
REP if PATexists in STR. Repost suitable messages in case PAT does not exist in STR.
Support the program with functions for each of the above operations. Don’t use built-in functions.
If you follow the rule of array initialization then you can write the above statement as follows:
C language supports a wide range of built-in functions that manipulate null-terminated strings
as follows:
ALGORITHM:
Step 1: Start.
Step 2: Read main string STR, pattern string PAT and replace
string REP.Step 3: Search / find the pattern string PAT in the
main string STR.
Step 4: if PAT is found then replace all occurrences of PAT in main string STR with
REP string.Step 5: if PAT is not found give a suitable error message.
Step 6: Stop.
PROGRAM CODE:
#include<stdio.h>
//Declarations
char str[100], pat[50], rep[50], ans[100];
int i, j, c,m, k, flag=0;
void stringmatch()
{
i = m = c = j = 0;
while(str[c] ! = '\0')
{
if(str[m] = = pat[i]) //........matching
{
i++; m++;
if(pat[i] = = '\0') //.....found occurrences.
{
flag = 1;
//.....copy replace string in ans string.
for(k = 0; rep[k] != '\0'; k++, j++)
ans[j] = rep[k];
i = 0;
c = m;
}
} // if ends.
else //... mismatch
{
ans[j] = str[c];
j++; c++;
m = c; i = 0;
}//else ends
} //end of while ans[j] = '\0';
} //end stringmatch()
void main()
{
printf("Enter the main stringn");
scanf(" %[^\n]", str);
printf("nEnter the Pattern stringn");
scanf(" %[^\n]", pat);
printf("nEnter the Replace stringn");
scanf(" %[^\n]", rep);
stringmatch();
if(flag = = 1)
printf("\nThe resultant string is\n %s" , ans);
else
printf("\nPattern string NOT found\n");
} // end of main
SAMPLE OUTPUT:
RUN 1:
RUN 2:
EXPERIMENT - 03
Design, Develop and Implement a menu driven program in C for the following operations on STACK of
integers (Array implementation of stack with maximum size MAX)
a. Push an element on to stack
b. Pop an element from stack.
c. Demonstrate how stack can be used to check palindrome.
d. Demonstrate Overflow and Underflow situations on stack.
e. Display the status of stack.
f. Exit.
Support the program with appropriate functions for each of the above operations.
A real-world stack allows operations at one end only. For example, we can place or remove a card or plate
from top of the stack only. Likewise, Stack ADT allows all data operations at one end only. At any given time,
we can only access the top element of a stack.
This feature makes it LIFO data structure. LIFO stands for Last-in-first-out. Here, the element which is
placed (inserted or added) last is accessed first. In stack terminology, insertion operation is called PUSH
operation and removal operation is called POP operation.
A stack can be implemented by means of Array, Structure, Pointer and Linked-List. Stack can either bea
fixed size one or it may have a sense of dynamic resizing. Here, we are going to implement stack using arrays
which makes it a fixed size stack implementation.
Basic Operations:
• push() - pushing (storing) an element on the stack.
• pop() - removing (accessing) an element from the stack.
To use a stack efficiently we need to check status of stack as well. For the same purpose, the following
functionality is added to stacks;
• . isFull() − check if stack is full.
ALGORITHM:
Step 1: Start.
Step 2: Initialize stack size MAX and top of stack -1.
Step 3: Push integer element on to stack and display the contents of the stack.if stack is full give a message as ‘Stack is
Overflow’.
Step 4: Pop element from stack along with display the stack contents.if stack is empty give a message as ‘Stack is
Underflow’.
Step 5: Check whether the stack contents are Palindrome or not.
Step 6: Stop.
PROGRAM CODE
#include<stdio.h>
#include<string.h>
#define max 5
int st[max],top=-1;
top=top+1;
st[top]=item;
}
int pop()
{
if(top==-1)
{
printf("Stack underflow\n");
return 0;
}
return(st[top]);
top=top-1;
}
void disp()
{
int i;
if(top==-1)
{
printf("Stack Empty\n");
return
}
void palin()
{
int i;
char p[100];
top=-1;
printf("Enter a number to check for palindrome\n");
scanf(“%s”,p);
for(i=0;i<strlen(p);i++)
push(p[i]-'0');
for(i=0;i<strlen(p)/2;i++)
if((p[i]-'0')!=pop())
{
printf("the number is not palindrome\n");
return;
}
printf("the number is palindrome\n");
}
void main()
{
int ch,k,item;
while(1)
{
printf("MAIN MENU\n");
printf(" 1:Push\n 2:Pop\n 3:Display\n 4:Palindrome\n 5:Exit\n");
printf("Enter your choice\n");
scanf("%d",&ch);
switch(ch)
{
case 1:printf("Enter an item to push\n");
scanf("%d",&item);
push(item);
break;
case 2: k=pop();
if(k)
printf("popped element is %d\n",k);
break;
case 3:disp();
break;
case 4:palin();
break;
case 5:exit(0);
}
}
}
----MAIN MENU----
1.PUSH
2 POP
3. DISPLAY
4. PALINDROME
5. EXIT
----MAIN MENU----
PUSH
POP
3. DISPLAY
4. EXIT
----MAIN MENU----
1. PUSH
2. POP
3.DISPLAY
4. PALINDROME
4. EXIT
Ener Your Choice: 3
Stack contents are
|4|
|3|
|2|
|1|
----MAIN MENU----
1. PUSH
2. POP
3.DISPLAY
4. PALINDROME
4. EXIT
Ener Your Choice: 2
Poped element is: 4
----MAIN MENU----
1. PUSH
2. POP
3.DISPLAY
4. PALINDROME
4. EXIT
Enter Your Choice: 2
Stack is Underflow
---MAIN MENU----
1. PUSH
2. POP
3.DISPLAY
3. PALINDROME
4. EXIT
Enter Your Choice: 4
Enter the number to check for palindrome:123
The number is not palindrome
EXPERIMENT - 04
Design, Develop and Implement a Program in C for converting an Infix Expression to Postfix Expression.
Program should support for both parenthesized and free parenthesized expressions with the operators: +, -, *, /,
%( Remainder), ^ (Power) and alphanumeric operands.
(
( ((
A (( A
+ ((+ A
B ((+ AB
^ ( ( +^ AB
D ( ( +^ ABD
) ( A B D^ +
/ (/ A B D^ +
( (/( A B D^ +
E (/( A B D^ +E
- (/ (- A B D^ +E
F (/ (- A B D^ +E
) (/ A B D^ +E -
+ (+ A B D^ +E - /
G (+ A B D^ +E - / G
) A B D^ +E - / G +
PROGRAM CODE:
#include<stdio.h>
#include<string.h>
int F(char symbol)
{
switch(symbol)
{
case '+' :
case '-': return 2;
case '*':
case '/': return 4;
case '^':
case '$': return 5;
default: return 8;
}
int G(char symbol)
{
switch(symbol)
{
case '+':
case '-': return 1;
case '*':
case '/': return 3;
case '^':
case '$': return 6;
default: return 7;
}
}
while(s[top] != '#')
{
postfix[j++] = s[top--];
}
postfix[j] = '\0';
}
void main()
{
char infix[20], postfix[20];
printf("\nEnter a valid infix expression\n");
scanf(“%s”,infix);
infix_postfix(infix,postfix);
printf("\nThe infix expression is:\n");
printf ("%s",infix);
printf("\nThe postfix expression is:\n");
printf ("%s",postfix);
}
SAMPLE OUTPUT:
Enter a valid infix expression
(a+(b-c)*d)
The infix expression is:
(a+(b-c)*d)
The postfix expression is:
abc-d*+
EXPERIMENT - 05
Design, Develop and Implement a Program in C for the following Stack Applications
a. Evaluation of Suffix expression with single digit operands and operators: +, -, *, /, %, ^
b. Solving Tower of Hanoi problem with n disks.
Initially the Stack is empty. Now, the first three characters scanned are 1,2 and 3, which are operands. Thus they will be pushed into
the stack in that order.
Expression
Stack
Next character scanned is "*", which is an operator. Thus, we pop the top two elements from the stack and perform the "*" operation
with the two operands. The second operand will be the first element that is popped.
Expression
Stack
The value of the expression(2*3) that has been evaluated(6) is pushed into the stack.
Expression
Stack
Next character scanned is "+", which is an operator. Thus, we pop the top two elements from the stack and perform the "+" operation
with the two operands. The second operand will be the first element that is popped.
Expression
Stack
Next character scanned is "4", which is added to the stack.
Expression
Stack
Next character scanned is "-", which is an operator. Thus, we pop the top two elements from the stack and perform the "-" operation
with the two operands. The second operand will be the first element that is popped.
Expression
Stack
The value of the expression(7-4) that has been evaluated(3) is pushed into the stack.
Expression
Stack
Now, since all the characters are scanned, the remaining element in the stack (there will be only one element in the stack) will be
returned.
End result:
Postfix String: 123*+4-
Result: 3
ALGORITHM:
Step 1: Start.
Step 2: Read the postfix/suffix expression.
Step 3: Evaluate the postfix expression based on the precedence of the operator.
Step 4: Stop.
The Tower of Hanoi is a mathematical game or puzzle. It consists of three rods, and a number of disks
of different sizes which can slide onto any rod. The puzzle starts with the disks in a neat stack in ascending order
of size on one rod, the smallest at the top, thus making a conical shape.
The objective of the puzzle is to move the entire stack to another rod, obeying the following simple rules:
• Only one disk can be moved at a time.
• Each move consists of taking the upper disk from one of the stacks and placing it on top of another stack
i.e. a disk can only be moved if it is the uppermost disk on a stack.
• No disk may be placed on top of a smaller disk.
With three disks, the puzzle can be solved in seven moves. The minimum number of moves required to
solve a Tower of Hanoi puzzle is 2n - 1, where n is the number of disks.
ALGORITHM:
Step 1: Start.
Step 2: Read N number of discs.
Step 3: Move all the discs from source to destination by using temp rod.
Step 4: Stop.
PROGRAM CODE:
PROGRAM 4A:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<ctype.h>
double compute(char symbol, double op1, double op2)
{
switch(symbol)
{
case '+': return op1 + op2;
case '-': return op1 - op2;
case '*': return op1 * op2;
case '/': return op1 / op2;
case '$':
case '^': return pow(op1, op2);
default: return 0;
}
int main()
{
double s[20], res, op1, op2;
int top = -1, i;
char postfix[20], symbol;
printf("\nEnter the postfix expression:\n");
scanf("%s", postfix);
for(i = 0; i < strlen(postfix); i++)
{
symbol = postfix[i];
if(isdigit(symbol))
{
s[++top] = symbol - '0';
}
else
{
op2 = s[top--];
op1 = s[top--];
res = compute(symbol, op1, op2);
s[++top] = res;
}
}
res = s[top--]; // Final result
printf("\nThe result is : %f\n", res);
return 0;
}
SAMPLE OUTPUT:
RUN1:
RUN2:
Enter the postfix expression:23+7*
PROGRAM 5B:
#include<stdio.h>
#include<conio.h>
void main()
{
int n; clrscr();
printf("\nEnter the number of discs: \n");
scanf("%d", &n);
tower(n, 'A', 'B', 'C');
printf("\n\nTotal Number of moves are: %d", (int)pow(2,n)-1);
getch();
}
SAMPLE OUTPUT:
EXPERIMENT - 06
Design, Develop and Implement a menu driven Program in C for the following operations on Circular
QUEUE of Characters (Array Implementation of Queue with maximum size MAX)
a. Insert an Element on to Circular QUEUE
b. Delete an Element from Circular QUEUE
c. Demonstrate Overflow and Underflow situations on Circular QUEUE
d. Display the status of Circular QUEUE
e. Exit
Support the program with appropriate functions for each of the above operations
ALGORITHM:
Step 1: Start.
Step 2: Initialize queue size to MAX.
Step 3: Insert the elements into circular queue. If queue is full give a message as ‘queue is overflow”
Step 4: Delete an element from the circular queue. If queue is empty give a message as ‘queue is underflow’.Step 5:
Display the contents of the queue.
Step 6: Stop.
PROGRAM CODE:
#include<stdio.h>
#define MAX 4
int ch, front = 0, rear = -1, count=0;
char q[MAX], item;
}
}
void del()
{
if(count == 0)
printf("\nQueue is Empty");
return;
else
{
if(front > rear && rear==MAX-1)
{
front=0; rear=-1;count=0;
}
else
{
item=q[front];
printf("\nDeleted item is: %c",item);
front = (front + 1) % MAX;
count--;
}
}
}
void display()
{
int i, f=front, r=rear;
if(count == 0)
printf("\nQueue is Empty");
else
{
printf("\nContents of Queue is:\n");
for(i=0; i<=count; i++)
{
printf("%c\t", q[f]);
f = (f + 1) % MAX;
}
}
}
void main()
{
do
{
}
}while(ch!=4);
}
SAMPLE POUTPUT:
1. Insert 2. Delete 3. Display 4. Exit
Enter the choice: 1
Enter the character / item to be inserted: A
Queue is Full
EXPERIMENT - 07
Design, Develop and Implement a menu driven Program in C for the following operations on
Singly Linked List (SLL) of Student Data with the fields: USN, Name, Branch, Sem, PhNo
a. Create a SLL of N Students Data by using front insertion.
b. Display the status of SLL and count the number of nodes in it
c. Perform Insertion and Deletion at End of SLL
d. Perform Insertion and Deletion at Front of SLL
e. Demonstrate how this SLL can be used as STACK and QUEUE
f. Exit
• They are a dynamic in nature which allocates the memory when required.
• Insertion and deletion operations can be easily implemented.
• Stacks and queues can be easily executed.
• Linked List reduces the access time.
• Linked lists are used to implement stacks, queues, graphs, etc.
• Linked lists let you insert elements at the beginning and end of the list.
• In Linked Lists we don’t need to know the size in advance.
Doubly Linked List: In a doubly linked list, each node contains two links the first link points to the previous
node and the next link points to the next node in the sequence.
Circular Linked List: In the circular linked list the last node of the list contains the address of the first
node and forms a circular chain.
ALGORITHM:
Step 1: Start.
Step 2: Read the value of N. (N student’s information)
Step 3: Create a singly linked list. (SLL)
Step 4: Display the status of SLL.
Step 5: Count the number of nodes.
Step 6: Perform insertion at front of list.
Step 7: Perform deletion at the front of the list.
Step 8: Perform insertion at end of the list.
Step 9: Perform deletion at the end of the list.
Step 10: Demonstrate how singly linked list can be used as stack.
Step 11: Demonstrate how singly linked list can be used as queue.
Step 12: Stop.
PROGRAM CODE:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define null 0 struct
student
{
char usn[15],name[20],branch[10];
int sem;
char phno[20];
struct student *link;
};
typedef struct student node;
node *start;
void main()
{
void create(),insert_end(),del_front(),disp();
int ch;
clrscr();
while(1)
{
printf("Main Menu\n");
printf("1:Create\n2:Display\n3:Insert Endt\n4:Delete Front\n5:Exit\n");
printf("Enter your choice\n");
scanf("%d",&ch);
switch(ch)
{
case 1:create();
break;
case 2:disp();
break;
case 3:insert_end();
break;
case 4:del_front();
break;
case 5:exit(0);
}
Dept. of CSE, EPCET, Bengaluru 45 2024-25
Data Structures Laboratory – BCSL305 III Semester / B.E.
}
}
void create()
{
int i,n; node *p;
printf("Enter the number of students\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
p=(node*)malloc(sizeof(node));
printf("Enter the student USN , NAME ,BRANCH,SEM,PHNO\n");
scanf("%s%s%s%d%s",
p- >usn,p->name,p->branch,&p->sem,p->phno);
p->link=start;
start=p;
}
}
void disp()
{
int cnt=0;
node *t;
t=start;
while(t)
{
cnt++;
printf("%s\t%s\t%s\t%d\t%s->\n",t->usn,t->name,t->branch,t->sem,t->phno);
t=t->link;
}
printf("Total number of nodes=%d\n",cnt);
}
void insert_end()
{
node *p,*r; p=(node*)malloc(sizeof(node));
printf("Enter the student USN , NAME ,BRANCH,SEM,PHNO\n");
scanf("%s%s%s%d%s",p->usn,p->name,p->branch,&p->sem,p->phno);
r=start;
while(r->link!=null)
r=r->link;
r->link=p;
p->link=null;
}
void del_front()
{
node *q;
if(start==null)
{
printf("List empty\n");return;
}
q=start;
Dept. of CSE, EPCET, Bengaluru 46 2024-25
Data Structures Laboratory – BCSL305 III Semester / B.E.
SAMPLE OUTPUT:
EXPERIMENT - 08
Design, Develop and Implement a menu driven Program in C for the following operations on Doubly Linked
List (DLL) of Employee Data with the fields: SSN, Name, Dept, Designation, Sal, PhNo.
a. Create a DLL of N Employees Data by using end insertion.
b. Display the status of DLL and count the number of nodes in it
c. Perform Insertion and Deletion at End of DLL
d. Perform Insertion and Deletion at Front of DLL
e. Demonstrate how this DLL can be used as Double Ended Queue
f. Exit
In computer science, a doubly linked list is a linked data structure that consists of a set of sequentially linked
records called nodes. Each node contains two fields, called links, that are references to the previous andto the next
node in the sequence of nodes. The beginning and ending nodes' previous and next links, respectively, pointto
some kind of terminator, typically a sentinel node or null, to facilitate traversal of the list. If there is only one
sentinel node, then the list is circularly linked via the sentinel node. It can be conceptualized as two singly linked
lists formed from the same data items, but in opposite sequential orders.
A doubly linked list whose nodes contain three fields: an integer value, the link to the next node, and the link to
the previous node.
The two-node links allow traversal of the list in either direction. While adding or removing a node in a doubly
linked list requires changing more links than the same operations on a singly linked list, the operations are simpler
and potentially more efficient (for nodes other than first nodes) because there is no need to keep track ofthe
previous node during traversal or no need to traverse the list to find the previous node, so that its link can be
modified.
ALGORITHM:
Step 1: Start.
Step 2: Read the value of N. (N student’s information)
Step 3: Create a doubly linked list. (DLL)
Step 4: Display the status of DLL.
Step 5: Count the number of nodes.
Step 6: Perform insertion at front of list.
Step 7: Perform deletion at the front of the list.
Step 8: Perform insertion at end of the list.
Step 9: Perform deletion at the end of the list.
Step 10: Demonstrate how doubly linked list can be used as double ended queue.
Step 11: Stop.
Program Code
#include<stdio.h>
#include<stdlib.h>
#define null 0
struct emp
{
char name[40],dept[40],desig[40];
int ssn;
long int sal;
char phno[20];
struct emp *llink;
struct emp *rlink;
};
typedef struct emp node;
node *start;
void create(),insert_front(),del_front(),disp();
void main()
{
int ch;
clrscr();
while(1)
{
printf("\nMain Menu\n");
printf("1:Create\n2:Display\n3:Insert_Front\n4:Del_Front\n5:Exit\n");
printf("Enter your choice\n");
scanf("%d",&ch);
switch(ch)
{
case 1:create();
break;
case 2:disp();
break;
case 3:insert_front();
break;
case 4:del_front();
break;
case 5:exit(0);
}
}
}
void create()
{
node *p, *t;
int i, n;
printf("Enter the number of employees \n");
scanf("%d", &n);
printf("Enter the employee details[SSN,NAME,DEPT,DESIG,SAL AND PH.NO.]\n");
for(i=0; i<n; i++)
{
printf("enter the Employee %d details\n",i+1);
p=(node*)malloc(sizeof(node));
p->rlink=null;
SAMPLE OUTPUT:
----------Employee Database-----------
1. Create 2. Display 3. Insert front 4. Delete front 5. Exit
Enter your choice: 1
EXPERIMENT - 09
Design, Develop and Implement a Program in C for the following operations on Singly Circular Linked List
(SCLL) with header nodes
a. Represent and Evaluate a Polynomial P(x,y,z) = 6x2y2z-4yz5+3x3yz+2xy5z-2xyz3
b. Find the sum of two polynomials POLY1(x,y,z) and POLY2(x,y,z) and store the result in
POLYSUM(x,y,z)
Support the program with appropriate functions for each of the above operations
Polynomial:
A polynomial equation is an equation that can be written in the form. axn + bxn-1 + . . . + rx + s = 0,
where a, b, . . . , r and s are constants. We call the largest exponent of x appearing in a non-zero term of a
polynomial the degree of that polynomial.
As with polynomials with one variable, you must pay attention to the rules of exponents and the order of
operations so that you correctly evaluate an expression with two or more variables. Evaluate x2 + 3y3for x = 7
and y = −2. Substitute the given values for x and y. Evaluate4x2y – 2xy2 + x – 7 for x = 3 and y = −1.
When a term contains both a number and a variable part, the number part is called the "coefficient". The
coefficient on the leading term is called the "leading" coefficient.
In the above example, the coefficient of the leading term is 4; the coefficient of the second term is 3; the
constant term doesn't have a coefficient.
ALGORITHM:
Step 1: Start.
Step 2: Read a polynomial.
Step 3: Represent the polynomial using singly circular linked list.
Step 3: Evaluate the given polynomial
Step 4: Read two polynomials and find the sum of the polynomials.
Step 5: Stop
PROGRAM CODE:
#include<stdio.h>
#include<alloc.h>
#include<math.h>
struct node
{
int cf, px, py, pz;
int flag;
struct node *link;
};
Dept. of CSE, EPCET, Bengaluru 55 2024-25
Data Structures Laboratory – BCSL305 III Semester / B.E.
NODE* getnode()
{
NODE *x;
x=(NODE*)malloc(sizeof(NODE));
if(x==NULL)
{
printf("Insufficient memory\n");exit(0);
}
return x;
}
h3=insert_rear(cf1,x1,y1,z1,h3)
p1=p1->link;
p2=h2->link;
while(p2!=h2)
{
if(p2->flag==0)
h3=insert_rear(p2->cf,p2->px,p2->py,p2->pz,h3);
p2=p2->link;
}
return h3;
}
void main()
{
NODE *h1,*h2,*h3;
int ch;
clrscr();
h1=getnode();
h2=getnode();
h3=getnode();
h1->link=h1;
h2->link=h2;
h3->link=h3;
while(1)
{
printf("\n\n1.Evaluate polynomial\n2.Add two polynomials\n3.Exit\n");
printf("Enter your choice: ");
scanf("%d", &ch);
switch(ch)
{
case 1:
printf("\nEnter polynomial to evaluate:\n");
h1=read_poly(h1);
display(h1);
evaluate(h1);
break;
case 2:
printf("\nEnter the first polynomial:");
Dept. of CSE, EPCET, Bengaluru 58 2024-25
Data Structures Laboratory – BCSL305 III Semester / B.E.
h1=read_poly(h1);
printf("\nEnter the second polynomial:");
h2=read_poly(h2);
h3=add_poly(h1,h2,h3);
printf("\nFirst polynomial is: ");
display(h1);
printf("\nSecond polynomial is: ");
display(h2);
printf("\nThe sum of 2 polynomials is: ");
display(h3);
break;
case 3: exit(0);
break;
default:printf("\nInvalid entry");
break;
}
getch();
}
}
SAMPLE OUTPUT:
1. Evaluate polynomial P(x,y,z) = 6x2y2z-4yz5+3x3yz+2xy5z-2xyz3
2. Add two polynomials
3. Exit
Enter your choice: 1
Enter polynomial to evaluate:
Enter coeff: 6
Enter x, y, z powers (0-indiacate NO term: 2
If you wish to continue press 1 otherwise 0: 1 2 1
Enter coeff: -4
Enter x, y, z powers (0-indiacate NO term: 0 1 5
If you wish to continue press 1 otherwise 0: 1
Enter coeff: 3
Enter x, y, z powers (0-indiacate NO term: 3 1 1
If you wish to continue press 1 otherwise 0: 1
Enter coeff: 2
Enter x, y, z powers (0-indiacate NO term: 1 5 1
If you wish to continue press 1 otherwise 0: 1
Enter coeff: -2
Enter x, y, z powers (0-indiacate NO term: 1
1
3
If you wish to continue press 1 otherwise 0: 0
Polynomial is:
6 x^2 y^2 z^1 + -4 x^0 y^1 z^5 + 3 x^3 y^1 z^1 + 2 x^1 y^5 z^1 + -2 x^1 y^1 z^3
2Enter 1st
polynomial:
Enter coeff: 4
Enter x, y, z powers (0-indiacate NO term: 22 2
If you wish to continue press 1 otherwise
0: 1Enter coeff: 3
Enter x, y, z powers (0-indiacate NO term: 11
Enter coeff: 6
Enter x, y, z powers (0-indiacate NO term: 22
2If you wish to continue press 1 otherwise 0: 0
Polynomial is:
1st Polynomial is:
4 x^2 y^2 z^2 + 3 x^1 y^1 z^2
EXPERIMENT 10
Design, Develop and Implement a menu driven Program in C for the following operations on Binary Search
Tree (BST) of Integers
a. Create a BST of N Integers: 6, 9, 5, 2, 8, 15, 24, 14, 7, 8, 5, 2
b. Traverse the BST in Inorder, Preorder and Post Order
c. Search the BST for a given element (KEY) and report the appropriate message
d. Delete an element (ELEM) from BST
e. Exit
Thus, a binary search tree (BST) divides all its sub-trees into two segments; left sub-tree and right sub-
tree and can be defined as
Nodedefinition: Define a node having some data, references to its left and right child nodes.
struct node {
int data;
struct node *leftChild;
struct node *rightChild;
};
ALGORITHM:
Step 1: Start.
Step 2: Create a Binary Search Tree for N elements.Step
3: Traverse the tree in inorder.
Step 4: Traverse the tree in preorder Step
6: Traverse the tree in postorder.
Step 7: Search the given key element in the BST.Step
8: Delete an element from BST.
Step 9: Stop
PROGRAM CODE:
#include <stdio.h>
#include <stdlib.h>
struct BST
{
int data;
struct BST *left;
struct BST *right;
};
NODE *node;
printf("\n2.Inorder\n3.Preorder\n4.Postorder\n5.Exit");
printf("\nEnter your choice: ");
scanf("%d", &ch);
switch (ch)
{
case 1: printf("\nEnter N value: " );
scanf("%d", &n);
printf("\nEnter the values to create BST like(6,9,5,2,8,15,24,14,7,8,5,2)\n");
for(i=0; i<n; i++)
{
scanf("%d", &data);
root=createtree(root, data);
}
break;
case 2: printf("\nInorder Traversal: \n");
inorder(root);
break;
case 3: printf("\nPreorder Traversal: \n");
preorder(root);
break;
case 4: printf("\nPostorder Traversal: \n");
postorder(root);
break;
case 5: exit(0);
default:printf("\nWrong option");
break;
}
}
}
SAMPLE OUTPUT:
1. Insertion in Binary Search Tree
2. Search Element in Binary Search Tree
3. Delete Element in Binary Search Tree
4. Inorder
5. Preorder
6. Postorder
7. Exit
Enter your choice: 1
Enter N value: 12
Enter the values to create BST like(6,9,5,2,8,15,24,14,7,8,5,2)
6 9 5 2 8 15 24 14 7 8 5 2
Inorder Traversal:
2 5 6 7 8 9 14 15 24
1. Insertion in Binary Search Tree
2. Search Element in Binary Search Tree
3. Delete Element in Binary Search Tree
4. Inorder
5. Preorder
6. Postorder
7. Exit
Enter your choice: 5
Preorder Traversal:
6 5 2 9 8 7 15 14 24
Postorder Traversal:
2 5 7 8 14 24 15 9 6
Inorder Traversal:
2 5 6 7 8 9 14 24
EXPERIMENT 11
Design, Develop and Implement a Program in C for the following operations on Graph(G) of Cities
a. Create a Graph of N cities using Adjacency Matrix.
b. Print all the nodes reachable from a given starting node in a digraph using BFS method
c. Check whether a given graph is connected or not using DFS method.
Adjacency Matrix
In graph theory, computer science, an adjacency matrix is a square matrix used to represent a finite
graph. The elements of the matrix indicate whether pairs of vertices are adjacent or not in the graph. In the
special case of a finite simple graph, the adjacency matrix is a (0, 1)-matrix with zeros on its diagonal.
A graph G = (V, E) where v= {0, 1, 2, . . .n-1} can be represented using two dimensional integer array of size n
x n.
a[20][20] can be used to store a graph with 20 vertices.
a[i][j] = 1, indicates presence of edge between two vertices i and j.
a[i][j] = 0, indicates absence of edge between two vertices i and j.
• A graph is represented using square matrix.
• Adjacency matrix of an undirected graph is always a symmetric matrix, i.e. an edge (i, j) implies the
edge (j, i).
• Adjacency matrix of a directed graph is never symmetric, adj[i][j] = 1 indicates a directed edge from
vertex i to vertex j.
An example of adjacency matrix representation of an undirected and directed graph is given below:
BFS
Breadth-first search (BFS) is an algorithm for traversing or searching tree or graph data structures. It
starts at the tree root and explores the neighbor nodes first, before moving to the next level neighbors.
Breadth First Search algorithm(BFS) traverses a graph in a breadth wards motion and uses a queue to
remember to get the next vertex to start a search when a dead end occurs in any iteration.
As in example given above, BFS algorithm traverses from A to B to E to F first then to C and G lastly to D. It
employs following rules.
• Rule 1 − Visit adjacent unvisited vertex. Mark it visited. Display it. Insert it in a queue.
• Rule 2 − If no adjacent vertex found, remove the first vertex from queue.
• Rule 3 − Repeat Rule 1 and Rule 2 until queue is empty.
DFS
Depth-first search (DFS) is an algorithm for traversing or searching tree or graph data structures. One
starts at the root (selecting some arbitrary node as the root in the case of a graph) and explores as far as possible
along each branch before backtracking.
Depth-first search, or DFS, is a way to traverse the graph. Initially it allows visiting vertices of the graph
only, but there are hundreds of algorithms for graphs, which are based on DFS. Therefore, understanding the
principles of depth-first search is quite important to move ahead into the graph theory. The principle of the
algorithm is quite simple: to go forward (in depth) while there is such possibility, otherwise to backtrack.
Algorithm
In DFS, each vertex has three possible colors representing its state:
Example. Traverse a graph shown below, using DFS. Start from a vertex with number 1.
Source graph.
ALGORITHM:
Step 1: Start.
Step 2: Input the value of N nodes of the graph
Step 3: Create a graph of N nodes using adjacency matrix representation.
Step 4: Print the nodes reachable from the starting node using BFS.
Step 5: Check whether graph is connected or not using DFS.
Step 6: Stop.
PROGRAM CODE:
#include<stdio.h>
#include<conio.h>
int a[10][10], n, m, i, j, source, s[10], b[10];
int visited[10];
void create()
{
printf("\nEnter the number of vertices of the digraph: ");
scanf("%d", &n);
printf("\nEnter the adjacency matrix of the graph:\n");
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
scanf("%d", &a[i][j]);
}
void bfs()
{
int q[10], u, front=0, rear=-1;
printf("\nEnter the source vertex to find other nodes reachable or not: ");
scanf("%d", &source);
q[++rear] = source;
visited[source] = 1;
printf("\nThe reachable vertices are: ");
while(front<=rear)
{
u = q[front++];
for(i=1; i<=n; i++)
{
if(a[u][i] == 1 && visited[i] == 0)
{
q[++rear] = i;
visited[i] = 1;
printf("\n%d", i);
}
}
}
}
s[++top] = 1;
b[source] = 1;
SAMPLE OUTPUT:
Graph is Connected
Hashing: Hashing is a technique to convert a range of key values into a range of indexes of an array.We're going
to use modulo operator to get a range of key values. Consider an example of hash tableof size 20, and following
items are to be stored. Item are in (key, value) format.
1 1 1 % 20 = 1 1
2 2 2 % 20 = 2 2
3 42 42 % 20 = 2 2
4 4 4 % 20 = 4 4
5 12 12 % 20 = 12 12
6 14 14 % 20 = 14 14
8 13 13 % 20 = 13 13
9 37 37 % 20 = 17 17
LinearProbing
As we can see, it may happen that the hashing technique used create already used index of thearray. In such
case, we can search the next empty location in the array by looking into the nextcell until we found an empty cell.
This technique is called linear probing.
After Linear
S.n. Key Hash Array Index Probing,
Array Index
1 1 1 % 20 = 1 1 1
2 2 2 % 20 = 2 2 2
3 42 42 % 20 = 2 2 3
4 4 4 % 20 = 4 4 4
5 12 12 % 20 = 12 12 12
6 14 14 % 20 = 14 14 14
7 17 17 % 20 = 17 17 17
8 13 13 % 20 = 13 13 13
9 37 37 % 20 = 17 17 18
BasicOperations
Following are basic primary operations of a hash table which are following.
Search − search an element in a hash table.
Insert − insert an element in a hash table.
delete − delete an element from a hash table.
Dept. of CSE, EPCET, Bengaluru 78 2024-25
Data Structures Laboratory – BCSL305 III Semester / B.E.
DataItem
Define a data item having some data, and key based on which search is to be conducted in hashtable.
ALGORITHM:
Step 1: Start.
Step 2: Given a File of N employee records with a set K of Keys (4-digit) which uniquely determine
the records in file F.
Step 3: Assume that file F is maintained in memory by a Hash Table(HT) of m memory locations
with L as the set of memory addresses (2-digit) of locations in HT.
Step 3: Let the keys in K and addresses in L are Integers
Step 4: Hash function H: K ®L as H(K)=K mod m (remainder method)
Step 5: Hashing as to map a given key K to the address space L, Resolve the collision (if any) is
using linear probing.
Step6: Stop.
PROGRAM CODE:
#include <stdio.h>
#include <stdlib.h>
#define M 10 // Size of the hash table
typedef struct
{
int key; // 4-digit employee key
int address; // Hash table address (2-digit)
} EmployeeRecord;
EmployeeRecord hashTable[M]; // Hash table of size M
void initializeTable()
{
for (int i = 0; i < M; i++)
{
hashTable[i].key = -1; // Mark all slots as empty (-1)
hashTable[i].address = i; // Assign addresses 0 to M-1
}
}
}
else
{
return;
}
}
hashTable[index].key = key;
printf("Key %d inserted at index %d.\n", key, index);
}
int search(int key)
{
int index = hashFunction(key);
int originalIndex = index;
while (hashTable[index].key != -1)
{
if (hashTable[index].key == key)
{
return index;
}
index = (index + 1) % M;
if (index == originalIndex)
{
break;
}
}
return -1;
}
void displayTable()
{
printf("\nHash Table:\n");
for (int i = 0; i < M; i++)
{
if (hashTable[i].key != -1)
printf("Index %d: Key = %d\n", i, hashTable[i].key);
else
printf("Index %d: Empty\n", i);
}
}
int main()
{
initializeTable();
int choice, key, searchResult;
while (1)
{
printf("\nMenu:\n");
printf("1. Insert employee record\n");
printf("2. Search employee record\n");
printf("3. Display hash table\n");
printf("4. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice)
{ {
Dept. of CSE, EPCET, Bengaluru 81 2024-25
Data Structures Laboratory – BCSL305 III Semester / B.E.
case 1:
printf("Enter 4-digit employee key to insert: ");
scanf("%d", &key);
insert(key);
break;
case 2:
printf("Enter 4-digit employee key to search: ");
scanf("%d", &key);
searchResult = search(key);
if (searchResult != -1)
{
printf("Key %d found at index %d.\n", key, searchResult);
}
else
{
printf("Key %d not found.\n", key);
}
break;
case 3: displayTable();
break;
case 4: exit(0);
default: printf("Invalid choice! Please try again.\n");
}
}
return 0;
}
Sample Output
Menu:
1. Insert employee record
2. Search employee record
3. Display hash table
4. Exit
Enter your choice: 1
Enter 4-digit employee key to insert: 1234
Key 1234 inserted at index 4.
Menu:
1. Insert employee record
2. Search employee record
3. Display hash table
4. Exit
Enter your choice: 1
Enter 4-digit employee key to insert: 2345
Key 2345 inserted at index 5.
Menu:
1. Insert employee record
2. Search employee record
3. Display hash table
4. Exit
Enter your choice: 1
Enter 4-digit employee key to insert: 3456
Key 3456 inserted at index 6.
Menu:
Dept. of CSE, EPCET, Bengaluru 81 2024-25
Data Structures Laboratory – BCSL305 III Semester / B.E.
1. Insert employee record
2. Search employee record
3. Display hash table
4. Exit
Enter your choice: 1
Enter 4-digit employee key to insert: 6534
Collision detected at index 4 for key 6534. Trying next slot...
Collision detected at index 5 for key 6534. Trying next slot...
Collision detected at index 6 for key 6534. Trying next slot...
Key 6534 inserted at index 7.
Menu:
1. Insert employee record
2. Search employee record
3. Display hash table
4. Exit
Enter your choice: 3
Hash Table:
Index 0: Empty
Index 1: Empty
Index 2: Empty
Index 3: Empty
Index 4: Key = 1234
Index 5: Key = 2345
Index 6: Key = 3456
Index 7: Key = 6534
Index 8: Empty
Index 9: Empty
Menu:
1. Insert employee record
2. Search employee record
3. Display hash table
4. Exit
Enter your choice: 2
Enter 4-digit employee key to search: 1234
Key 1234 found at index 4.
Menu:
1. Insert employee record
2. Search employee record
3. Display hash table
4. Exit
Enter your choice:
6) What is LIFO?
LIFO is short for Last In First Out, and refers to how data is accessed, stored and retrieved. Using this scheme, data that was stored last
, should be the one to be extracted first. This also means that in order to gain access to the first data, all the other data that was stored
before this first data must first be retrieved and extracted.
8 ) What is a queue?
A queue is a data structures that can simulates a list or stream of data. In this structure, new elements are inserted at one end and existing
elements are removed from the other end.
10) Which data structures is applied when dealing with a recursive function?
Recursion, which is basically a function that calls itself based on a terminating condition, makes use of the stack. Using LIFO, a call to
a recursive function saves the return address so that it knows how to return to the calling function after the call terminates.
27).Where in memory are HEAP and the STACK located relative to the executing program?
(Solution: The STACK and HEAP are stored "below" the executing program. The HEAP "grows" toward the program
executable while the STACK grows away from it.)
31).Which one is faster? A binary search of an orderd set of elements in an array or a sequential search of the elements.
(Solution: binary search)
34) Which data structure is needed to convert infix notations to post fix notations?
(Solution: stack)
35) What is data structure or how would you define data structure?
(Solution: In programming the term data structure refers to a scheme for organizing related piece of information. Data
Structure = Organized Data + Allowed Operations.)