(2023-24) Data Structures Lab (BCSL305) Lab Manual (3 CSE)
(2023-24) Data Structures Lab (BCSL305) Lab Manual (3 CSE)
NAME: …………………………………………….………………………………….
2023-24
Credits - 1
Course Learning Objectives:
This laboratory course enables students to get practical experience in design,
develop, implement, analyze and evaluation/testing of
Dynamic memory management
Linear data structures and their applications such as stacks, queues and List
Non-Linear data structures and their applications such as trees and graphs
Descriptions (if any):
Implement all the programs in “C ” Programming Language and Linux OS.
Program List:
Prog. No Details
1 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 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 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
Experiment distribution
For laboratories having only one part: Students are allowed to pick one
experiment from the lot with equal opportunity.
For laboratories having PART A and PART B: Students are allowed to pick
one experiment from PART A and one experiment from PART B, with equal
opportunity.
Change of experiment is allowed only once and marks allotted for procedure to be
made zero of the changed part only.
Marks Distribution (Need to change in accordance with university regulations)
a) For laboratories having only one part – Procedure + Execution + Viva-Voce:
15+70+15 = 100 Marks
b) For laboratories having PART A and PART B
i. Part A – Procedure + Execution + Viva = 6 + 28 + 6 = 40 Marks
ii. Part B – Procedure + Execution + Viva = 9 + 42 + 9 = 60 Marks
EXPERIMENT: 1
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).
PROGRAM CODE:
#include <stdio.h>
#include <conio.h>
#include <string.h>
// Define a structure to represent a day
struct Day
{
char name[20];
int date;
char activity[100];
};
void main()
{
int i;
// Declare an array of 7 elements to represent the calendar
struct Day calendar[7];
clrscr();
// Initialize the calendar with sample data
strcpy(calendar[0].name, "Monday");
calendar[0].date = 1;
strcpy(calendar[0].activity, "Work from 9 AM to 5 PM");
strcpy(calendar[1].name, "Tuesday");
calendar[1].date = 2;
strcpy(calendar[1].activity, "Meeting at 10 AM");
strcpy(calendar[2].name, "Wednesday");
calendar[2].date = 3;
strcpy(calendar[2].activity, "Gym at 6 PM");
strcpy(calendar[3].name, "Thursday");
calendar[3].date = 4;
strcpy(calendar[3].activity, "Dinner with friends at 7 PM");
strcpy(calendar[4].name, "Friday");
calendar[4].date = 5;
strcpy(calendar[4].activity, "Movie night at 8 PM");
strcpy(calendar[5].name, "Saturday");
calendar[5].date = 6;
strcpy(calendar[5].activity, "Weekend getaway");
strcpy(calendar[6].name, "Sunday");
calendar[6].date = 7;
strcpy(calendar[6].activity, "Relax and recharge");
SAMPLE OUTPUT 1:
Result:
Thus, the given ‘C’ program is written, executed and tested successfully
EXPERIMENT: 1
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.
PROGRAM CODE
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
struct Day calendar[7];
int choice;
clrscr();
// Initialize the names of the days
strcpy(calendar[0].name, "Monday");
strcpy(calendar[1].name, "Tuesday");
strcpy(calendar[2].name, "Wednesday");
strcpy(calendar[3].name, "Thursday");
strcpy(calendar[4].name, "Friday");
strcpy(calendar[5].name, "Saturday");
strcpy(calendar[6].name, "Sunday");
printf("1. Create Calendar \n");
printf("2. Read Calendar from File \n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice)
{
case 1:
create(calendar);
break;
case 2:
read(calendar);
break;
default:
printf("Invalid choice.\n");
return 1;
}
display(calendar);
return 0;
}
SAMPLE OUTPUT 1:
1. Create Calendar
2. Read Calendar from File
Result:
Thus, the given ‘C’ program is written, executed and tested successfully
EXPERIMENT: 2
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 PAT exists in STR. Report
suitable messages in case PAT doesnot exist in STR.
Support the program with functions for each of the above operations.Don't
use Built-in functions.
ALGORITHM:
Step 1: Start the Program
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 the Program.
PROGRAM CODE:
#include<stdio.h>
void main()
{
char STR[100], PAT[100], REP[100], ans[100];
int i, j, c, m, k, flag=0;
printf("\n Enter the MAIN string: \n");
gets(STR);
printf("\n Enter a PATTERN string: \n");
gets(PAT);
printf("\n Enter a REPLACE string: \n");
gets(REP);
i = m = c = j = 0;
while ( STR[c] != '\0')
{
// Checking for Match
if ( STR[m] == PAT[i])
{
i++; m++;
flag=1;
if ( PAT[i] == '\0')
{
//copy replace string in ans string
for(k=0; REP[k] != '\0';k++,j++)
ans[j] = REP[k];
i=0;
c=m;
}
}
else //mismatch
{
ans[j] = STR[c];
j++;
c++;
m = c; i=0;
}
}
if(flag==0)
{
printf("\n Pattern doesn't found!!!");
}
else
{
ans[j] = '\0';
printf("\n The RESULTANT string is:%s\n" ,ans);
}
}
SAMPLE OUTPUT 1:
Enter the MAIN string: good morning
Enter a PATTERN string: morning
Enter a REPLACE string: evening
The RESULTANT string is: good evening
SAMPLE OUTPUT 2:
Enter the MAIN string: hi Raja
Enter a PATTERN string: bye
Enter a REPLACE string: hello
Pattern not found!!
Result:
Thus, the given ‘C’ program is written, executed and tested successfully
EXPERIMENT: 3
Design, Develop a menu driven Program in C for the following operations
on STACK ofIntegers (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.
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;
peek() − get the top data element of the stack, without removing it.
isFull() − check if stack is full.
isEmpty() − check if stack is empty.
ALGORITHM:
Step 1: Start the Program.
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 the Program
PROGRAM CODE
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define max_size 5
int stack[max_size], top=-1, flag=1;
int i, temp, item, rev[max_size], num[max_size];
void push();
void pop();
void display();
void pali();
void main()
{
int choice;
printf("\n\n STACK OPERATIONS \n");
printf("1. Push\n");
printf("2. Pop\n");
printf("3. Palindrome\n");
printf("4. Display\n");
printf("5. Exit\n");
printf(" ");
while(1)
{
printf("\n Enter your choice:\t");
scanf("%d",&choice);
switch(choice)
{
case 1:
push();
break;
case 2:
pop();
if(flag)
printf("\n The poped element: %d\t",item);
temp=top;
break;
case 3:
pali();
top=temp;
break;
case 4:
display();
break;
case 5:
exit(0);
break;
default:
printf("\n Invalid choice:\n");
break;
}
}
}
top=top-1;
}
}
void pali()
{
i=0;
if(top==-1)
{
printf(" Push some elements into the stack first\n");
}
else
{
while(top!=-1)
{
rev[top]=stack[top];
pop();
}
top=temp;
for(i=0;i<=temp;i++)
{
if(stack[top--]==rev[i])
{
if(i==temp)
{
printf(" Numbers in Stack is Palindrome\n");
return;
}
}
}
printf("Numbers in Stack is not Palindrome\n");
}
}
void display()
{
int i;
top=temp;
if(top==-1)
{
printf("\n Stack is Empty:");
}
else
{
printf("\n The stack elements are:\n" );
for(i=top;i>=0;i--)
{
printf("%d\n",stack[i]);
}
}
}
SAMPLE OUTPUT 1:
STACK OPERATIONS
1. Push
2. Pop
3. Palindrome
4. Display
5. Exit
SAMPLE OUTPUT 2:
STACK OPERATIONS
1. Push
2. Pop
3. Palindrome
4. Display
5. Exit
Result:
Thus, the given ‘C’ program is written, executed and tested successfully
EXPERIMENT: 4
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.
ALGORITHM:
PROGRAM CODE:
#include <conio.h>
#include <ctype.h>
#include <stdio.h>
SAMPLE OUTPUT 1:
Read the Infix Expression (a+b)*c/d^5%1
Given Infix Expn: (a+b)*c/d^5%1
Postfix Expn: ab+c*d5^/1%
SAMPLE OUTPUT 2:
Read the Infix Expression (a+(b-c)*d)
Given Infix Expn: (a+(b-c)*d)
Postfix Expn: abc-d*+
Result:
Thus, the given ‘C’ program is written, executed and tested successfully
EXPERIMENT: 5
Develop a Program in C for the following Stack Applications
a. Evaluation of Suffixexpression with single digit operands and operators:
+, -, *, /, %, ^
b. Solving Tower of Hanoi problem with n disks.
Example: Postfix String: 123*+4- Initially the Stack is empty. Now, the first three
charactersscanned are 1,2 and 3, which are operands. Thus they will be pushed into the
stack in that order.
Next character scanned is "*", which is an operator. Thus, we pop the top two elements
fromthe stack and perform the "*" operation with the two operands. The second
operand will be the first element that is popped.
The value of the expression(2*3) that has been evaluated(6) is pushed into the stack.
Next character scanned is "+", which is an operator. Thus, we pop the top two elements
fromthe stack and perform the "+" operation with the two operands. The second
operand will be the first element that is popped.
The value of the expression(1+6) that has been evaluated(7) is pushed into the 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.
The value of the expression (7-4) that has been evaluated(3) is pushed into the
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 the program.
Step 2: Read the postfix/suffix expression.
Step 3: Evaluate the postfix expression based on the precedence of the operator.
Step 4: Stop the program.
PROGRAM CODE:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define MAX 20
struct stack
{
int top;
float str[MAX];
}s; //stack
void push(float);
void main()
{
int i=0;
float ans,op1,op2;
printf("\n Enter Expression: ");
scanf("%s",postfix);
while(postfix[i]!='\0')
{
if(isoperand(postfix[i]))
push(postfix[i]-48);
else
{
op1=pop();
op2=pop();
ans=operate(op1,op2,postfix[i]);
push(ans);
printf("%f %c %f = %f\n",op2,postfix[i],op1,ans);
}
i++;
}
printf("%f",s.str[s.top]);
getch();
}
int isoperand(char x)
{
if(x>='0' && x<='9') return 1;
else return 0;
}
void push(float x)
{
if(s.top==MAX-1)
printf("Stack is full\n Stack overflow\n");
else
{
s.top++;
s.str[s.top]=x;
}
}
float pop()
{
if(s.top==-1)
{
printf(" Stack is emplty\n STACK UNDERFLOW\n");
getch();
}
else
{
s.top--;
return s.str[s.top+1];
}
}
SAMPLE OUTPUT 1:
Enter Expression:123*+4-
2.000000 * 3.000000 = 6.000000
1.000000 + 6.000000 = 7.000000
7.000000 - 4.000000 = 3.000000
3.000000
SAMPLE OUTPUT 2:
Insert a postfix notation :: 22^32*+
2.000000 ^ 2.000000 = 4.000000
3.000000 * 2.000000 = 6.000000
4.000000 + 6.000000 = 10.000000
10.000000
SAMPLE OUTPUT 3:
Insert a postfix notation :: 23+
2.000000 + 3.000000 = 5.000000
5.000000
Result:
Thus, the given ‘C’ program is written, executed and tested successfully.
B) Towers of Hanoi
Solving Tower of Hanoi problem with n disks. 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 followingsimple 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 ofanother 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
solvedin seven moves. The minimum number of moves required to solve a Tower of
Hanoi puzzleis 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:
#include <stdio.h>
#include <conio.h>
#include <math.h>
void tower(int n, int source, int temp,int destination)
{
if(n == 0) return;
tower(n-1, source, destination, temp);
printf("\n Move disc %d from %c to %c", n, source, destination);
tower(n-1, temp, source, destination);
}
void main()
{
int n;
clrscr();
printf("\n Enter the number of discs: \n");
scanf("%d", &n);
tower(n, 'A', 'B', 'C');
printf("\n\n Total Number of moves are: %d", (int)(pow(2,n)-1));
getch();
}
SAMPLE OUTPUT 1:
Enter the number of discs: 3
Move disc 1 from A to C
Move disc 2 from A to B
Move disc 1 from C to B
Move disc 3 from A to C
Move disc 1 from B to A
Move disc 2 from B to C
Move disc 1 from A to C
Total Number of moves are: 7
Result:
Thus, the given ‘C’ program is written, executed and tested successfully
EXPERIMENT: 6
Develop 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>
#include <conio.h>
#define SIZE 5
int CQ[SIZE];
int front=-1;
void CQ_Insert(int );
void CQ_Delet();
void CQ_Display();
void main()
{
int ch, ele;
printf("\n 1.Insert \n 2.Delete \n 3.Display \n 4.Exit \n");
while(1)
{
printf("\n Enter your choice \n");
scanf("%d",&ch);
switch(ch)
{
case 1:
if(IsCQ_Full())
printf("\n Circular Queue Overflow \n");
else
{
printf("\n Enter the element to be inserted \n");
scanf("%d",&ele);
CQ_Insert(ele);
}
break;
case 2:
if(IsCQ_Empty())
printf("\n Circular Queue Underflow \n");
else
CQ_Delet();
break;
case 3:
if(IsCQ_Empty())
printf("\n Circular Queue Underflow \n");
else
CQ_Display();
break;
case 4:
exit(0);
}
}
}
void CQ_Delet()
{
int item;
item=CQ[front];
printf("\n Deleted element is: %d",item);
front = (front+1)%SIZE;
}
void CQ_Display()
{
int front_pos = front,rear_pos = rear;
if(front == -1)
{
printf("\n Queue is empty \n");
return;
}
printf("\n Elements of the circular queue are.. : ");
if( front_pos <= rear_pos )
while(front_pos <= rear_pos)
{
printf("%d ",CQ[front_pos]);
front_pos++;
}
else
{
while(front_pos <= SIZE-1)
{
printf("%d ",CQ[front_pos]);
front_pos++;
}
front_pos = 0;
while(front_pos <= rear_pos)
{
printf("%d ",CQ[front_pos]);
front_pos++;
}
}
printf("\n");
}
int IsCQ_Full()
{
if(front ==(rear+1)%SIZE) return 1;
return 0;
}
int IsCQ_Empty()
{
if(front == -1)
return 1;
else if(front == rear)
{
printf("Deleted element is: %d",CQ[front]);
front=-1;
return 1;
}
return 0;
}
SAMPLE OUTPUT 1:
Circular Queue operations
1. Insert
2. Delete
3. Display
4. Exit
Enter your choice:1
Enter element to be insert:10
Enter your choice:1
Enter element to be insert:20
Enter your choice:1
Enter element to be insert:30
20 30
Enter your choice:4
Exit
SAMPLE OUTPUT 2:
Circular Queue operations
1. Insert
2. Delete
3. Display
4. Exit
Enter your choice:1
Enter element to be insert:1000
Enter your choice:1
Enter element to be insert:2000
Enter your choice:1
Enter element to be insert:3000
Result:
Thus, the given ‘C’ program is written, executed and tested successfully
EXPERIMENT: 7
Develop a menu driven Program in C for the following operations on Singly
Linked List (SLL) of Student Data with the fields: USN, Name, Programme,
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 / Deletion at End of SLL
d. Perform Insertion / Deletion at Front of SLL(Demonstration of stack)
e. 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.
i.e. next, which points to the next node in sequence of nodes. The operations we can
perform on singly linked lists are insertion, deletion and traversal.
ALGORITHM:
Step 1: Start.
Step 2: Read the value of N. (N student‟s information)
Step 3: Create a singly linked list. (SLL)
PROGRAM CODE:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct
{
int usn;
char name[20];
char branch[20];
int semester;
char phone[20];
}STUDENT;
struct node
{
int usn;
char name[20];
char branch[20];
int semester;
char phone[20];
struct node *link;
};
NODE getnode()
{
NODE x;
x=(NODE)malloc(sizeof(struct node));
if(x==NULL)
{
printf("\n Out of memory\n");
exit(0);
}
return x;
}
strcpy(temp->branch,item.branch);
temp->semester=item.semester;
strcpy(temp->phone,item.phone);
temp->link=NULL;
if(first==NULL)
return temp;
cur=first;
while(cur->link!=NULL)
{
cur=cur->link;
}
cur->link=temp;
return first;
}
}
if(first->link==NULL)
{
printf("\n Delete student record: USN=%d\n",first->usn);
free(first);
return NULL;
}
prev=NULL; cur=first;
while(cur->link!=NULL)
{
prev=cur;
cur=cur->link;
}
printf("\n Delete student record: USN=%d\n",cur->usn);
free(cur);
prev->link=NULL;
return first;
}
void main()
{
NODE first;
int choice;
STUDENT item;
clrscr();
first=NULL;
for(;;)
{
printf("\n 1. Insert_front\n 2. Insert_rear\n 3. Delete_front\n 4. Delete_rear\n 5. Display \n 6. Exit\n");
printf("\n Enter the choice : \n");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("USN :\n");
scanf("%d",&item.usn);
printf("Name :\n");
scanf("%s",item.name);
printf("Branch :\n");
scanf("%s",item.branch);
printf("Semester:\n");
scanf("%d",&item.semester);
printf("Phone :\n");
scanf("%s",item.phone);
first=insert_front(item,first);
break;
case 2:
printf("USN :\n");
scanf("%d",&item.usn);
printf("Name :\n");
scanf("%s",item.name);
printf("Branch :\n");
scanf("%s",item.branch);
printf("Semester:\n");
scanf("%d",&item.semester);
printf("Phone :\n");
scanf("%s",item.phone);
first=insert_rear(item,first);
break;
case 3:
first=delete_front(first);
break;
case 4:
first=delete_rear(first);
break;
case 5:
display(first);
break;
default:
exit(0);
}
}
}
SAMPLE OUTPUT 1:
1. Insert_front
2. Insert_rear
3. Delete_front
4. Delete_rear
5. Display
6. Exit
Enter choice : 1
USN : 100
Name : Ram
Branch : CSE
Semester: 3
Phone : 29292029
Enter choice : 2
USN : 200
Name : Siva
Branch : ECE
Semester: 3
Phone : 32323232
Enter choice : 5
100 Ram CSE 3 29292029
200 Siva ECE 3 32323232
Number of students = 2
Enter choice : 1
USN : 50
Name : Ravi
Branch : CSE
Semester: 3
Phone : 12121314
Enter choice : 5
50 Ravi CSE 3 2121314
100 Ram CSE 3 29292029
200 Siva ECE 3 32323232
Number of students = 3
Enter choice : 2
USN : 300
Name : Rani
Branch : EEE
Semester: 3
Phone : 40432567
Enter choice : 5
50 Ravi CSE 3 2121314
100 Ram CSE 3 29292029
200 Siva ECE 3 32323232
300 Rani EEE 3 40432567
Number of students = 4
Enter choice : 3
Delete student record: USN= 50
Enter choice : 5
100 Ram CSE 3 29292029
200 Siva ECE 3 32323232
300 Rani EEE 3 40432567
Number of students = 3
Enter choice : 4
Delete student record: USN= 300
Enter choice : 5
100 Ram CSE 3 29292029
200 Siva ECE 3 32323232
Number of students = 2
Enter choice : 3
Delete student record: USN= 100
Enter choice : 5
200 Siva ECE 3 32323232
Number of students = 1
Enter choice : 3
Delete student record: USN= 200
Enter choice : 5
Student list is empty …
Enter choice : 3
Student list is empty …
Enter choice : 4
Student list is empty …
Enter choice : 6
Exit
Result:
Thus, the given ‘C’ program is written, executed and tested successfully
EXPERIMENT: 8
Develop 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
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.
PROGRAM CODE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Enode
{
char ssn[15];
char name[20];
char dept[5];
char designation[10];
long int salary;
long long int phno;
struct Enode *left;
struct Enode *right;
}*head=NULL;
void main()
{
int choice;
char s[15],n[20],dpt[5],des[10];
long int sal;
break;
case 7:
exit(0);
}
}
}
void create(char s[15],char n[20],char dpt[5],char des[10],long int sal,long long int p)
{
if(head==NULL)
{
head=(struct Enode *)malloc(1*sizeof(struct Enode));
strcpy(head->ssn,s);
strcpy(head->name,n);
strcpy(head->dept,dpt);
strcpy(head->designation,des);
head->salary=sal;
head->phno=p;
head->left=NULL;
head->right=NULL;
tail=head;
}
else
{
temp1=(struct Enode *)malloc(1*sizeof(struct Enode));
strcpy(temp1->ssn,s);
strcpy(temp1->name,n);
strcpy(temp1->dept,dpt);
strcpy(temp1->designation,des);
temp1->salary=sal;
temp1->phno=p;
tail->right=temp1;
temp1->right=NULL;
temp1->left=tail;
tail=temp1;
}
}
void display()
{
temp1=head;
if(temp1==NULL)
{
printf("\n No Employee Data ... ");
return;
}
printf(" Employee Details \n");
while(temp1!=NULL)
{
printf(" \n");
printf(" Emp. No: %s\n Name: %s\n Dept : %s\n Desig : %s\n Sal: %ld\n Phone: %lld\n",
temp1->ssn,temp1->name, temp1->dept,temp1->designation,temp1->salary,temp1->phno);
printf(" ");
temp1=temp1->right;
}
}
void ins_beg(char s[15],char n[20],char dpt[5],char des[10],long int sal,long long int p)
{
temp1=(struct Enode *)malloc(1*sizeof(struct Enode));
strcpy(temp1->ssn,s);
strcpy(temp1->name,n);
strcpy(temp1->dept,dpt);
strcpy(temp1->designation,des);
temp1->salary=sal;
temp1->phno=p;
temp1->right=head;
head->left=temp1;
head=temp1;
temp1->left=NULL;
}
void ins_end(char s[15],char n[20],char dpt[5],char des[10],long int sal,long long int p)
{
void del_beg()
{
temp1=head;
if(temp1==NULL)
{
printf("\n No Employee Data ... ");
return;
}
temp1=head->right;
free(head);
head=temp1;
head->left=NULL;
printf("\n One Data removed ... ");
}
void del_end()
{
temp1=head;
if(temp1==NULL)
{
printf("\n No Employee Data ... ");
return;
}
temp1=tail->left;
free(tail);
tail=temp1;
tail->right=NULL;
printf("\n One Data removed ... ");
}
SAMPLE OUTPUT 1:
1. Create
2. Display
3. Insert at Beginning
4. Insert at End
5. Delete at Beginning
6. Delete at End
7. Exit
AP
40000
34252672
Result:
Thus, the given ‘C’ program is written, executed and tested successfully
EXPERIMENT: 9
Develop 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) = 6x 2 y 2 z-4yz 5 +3x 3 yz+2xy 5 z-2xyz 3 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.
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. Here are the steps
required for Evaluating Polynomial Functions:
Example 1
Step 1: Replace each x in the expression with the given value. In this case, we replace
each x with 3.
Step 1
Arrange the Polynomial in standard form
Standard form of a polynomial and each of the following terms just means
that the term with highest degree is first
Step 2
Arrange the like terms in columns and add the like terms
Example 1:
3x5 + x4 + 2x3 + 2x + 5
2x5 + 3x3 + 7x + 2
---------------------------------
5x5 + x4 + 5x3 + 9x + 7
ALGORITHM:
Step 1: Start the program.
Step 2: Read a polynomial.
Step 3: Represent the polynomial using singly circular linked list.
Step 4: Evaluate the given polynomial
Step 5: Read two polynomials and find the sum of the polynomials.
Step 6: Stop the program
PROGRAM CODE:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
struct node
{
int coeff;
int expo;
struct node *ptr;
};
scanf("%d",&n);
printf("\n Enter coefficient & power of each term : ");
for(i=0;i<n;i++)
{
scanf("%d %d",&c,&e);
create_poly1(c,e);
}
break;
case 2:
printf("\n Enter the number of terms: ");
scanf("%d",&n);
printf("\n Enter coefficient & power of each term: ");
for(i=0;i<n;i++)
{
scanf("%d %d",&c,&e);
create_poly2(c,e);
}
break;
case 3:
display();
break;
case 4:
add_poly();
break;
case 5:
printf("\n Enter the value for x : ");
scanf("%d",&x);
eval_poly(x);
break;
case 6:
exit(0);
}
}
}
{
list1=(struct node*)malloc(1*sizeof(struct node));
list1->coeff=c;
list1->expo=e;
list1->ptr=list1;
head1=list1;
head1->ptr=dummy1;
}
else
{
temp=(struct node*)malloc(1*sizeof(struct node));
temp->coeff=c;
temp->expo=e;
head1->ptr=temp;
temp->ptr=dummy1;
head1=temp;
}
}
}
}
void add_poly()
{
temp1=list1;
temp2=list2;
while((temp1!=dummy1)&&(temp2!=dummy2))
{
temp=(struct node*)malloc(1*sizeof(struct node));
if(list3==NULL)
{
list3=temp;
head3=list3;
}
if(temp1->expo==temp2->expo)
{
temp->coeff=temp1->coeff+temp2->coeff;
temp->expo=temp1->expo;
temp->ptr=list3;
head3->ptr=temp;
head3=temp;
temp1=temp1->ptr;
temp2=temp2->ptr;
}
else if(temp1->expo>temp2->expo)
{
temp->coeff=temp1->coeff;
temp->expo=temp1->expo;
temp->ptr=list3;
head3->ptr=temp;
head3=temp;
temp1=temp1->ptr;
}
else
{
temp->coeff=temp2->coeff;
temp->expo=temp2->expo;
temp->ptr=list3;
head3->ptr=temp;
head3=temp;
temp2=temp2->ptr;
}
}
if(temp1==dummy1)
{
while(temp2!=dummy2)
{
temp=(struct node*)malloc(1*sizeof(struct node));
temp->coeff=temp2->coeff;
temp->expo=temp2->expo;
temp->ptr=list3;
head3->ptr=temp;
head3=temp;
temp2=temp2->ptr;
}
}
if(temp2==dummy2)
{
while(temp1!=dummy1)
{
temp=(struct node*)malloc(1*sizeof(struct node));
temp->coeff=temp1->coeff;
temp->expo=temp1->expo;
temp->ptr=list3;
head3->ptr=temp;
head3=temp;
temp1=temp1->ptr;
}
}
temp3=list3;
printf("\n\n Sum of Polynomials 1 and 2 : ");
while(temp3->ptr!=list3)
{
printf(" %dX^%d+",temp3->coeff,temp3->expo);
temp3=temp3->ptr;
}
printf(" %dX^%d\n",temp3->coeff,temp3->expo);
list3=NULL;
}
void display()
{
temp1=list1;
temp2=list2;
printf("\n \n Polynomial - 1: ");
while(temp1!=dummy1)
{
printf(" %dX^%d+",temp1->coeff,temp1->expo);
temp1=temp1->ptr;
}
printf("\n \n Polynomial - 2: ");
while(temp2!=dummy2)
{
printf(" %dX^%d+",temp2->coeff,temp2->expo);
temp2=temp2->ptr;
}
}
void eval_poly(int x)
{
int result=0;
temp1=list1;
temp2=list2;
while(temp1!=dummy1)
{
result+=(temp1->coeff)*pow(x,temp1->expo);
temp1=temp1->ptr;
}
printf("\n Polynomial - 1 Evaluation: %d\n",result);
result=0;
while(temp2!=dummy2)
{
result+=(temp2->coeff)*pow(x,temp2->expo);
temp2=temp2->ptr;
}
printf("\n Polynomial - 2 Evaluation: %d\n",result);
}
SAMPLE OUTPUT:
Sample:
3x5 + x4 + 2x3 + 2x + 5
2x5 + 3x3 + 7x + 2
Enter choice: 1
Enter the number of terms: 5
Enter coefficient & power of each term :
35
14
23
21
50
Enter choice: 2
Enter the number of terms: 4
Enter coefficient & power of each term :
25
33
71
20
Enter choice: 3
Polynomial - 1: 3x^5 + 1x^4 + 2x^3 + 2x^1 + 5x^0
Polynomial - 1: 2x^5 + 3x^3 + 7x^1 + 2x^0
Enter choice: 4
Sum of Polynomials 1 and 2 : 5x^5 + 1x^4 + 5x^3 + 9x^1 + 7x^0
Enter choice: 5
Enter the value for x : 2
Polynomial - 1 Evaluation: 137
Polynomial - 2 Evaluation: 104
Enter choice: 6
<Exit>
Result:
Thus, the given ‘C’ program is written, executed and tested successfully
EXPERIMENT: 10
Develop a menu driven Program in C for the following operations on
Binary SearchTree (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 In-order, Pre-order and Post-order
c. Search the BST for a given element (KEY) and report the
appropriate message
d. Exit
Node definition:
Define a node having some data, references to its left and right child nodes.
struct node
{
int data;
ALGORITHM:
Step 1: Start the program.
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 5: Traverse the tree in postorder.
Step 6: Search the given key element in the BST.
Step 7: Delete an element from BST.
Step 8: Stop the program
PROGRAM CODE
#include <stdio.h>
#include <stdlib.h>
struct BST
{
int data;
struct BST *left;
struct BST *right;
};
}
else if (data > node->data)
{
node -> right = createtree(node->right, data);
}
return node;
}
inorder(node->left);
printf("%d\t", node->data);
inorder(node->right);
}
}
{
node->left = del(node->left, data);
}
else if(data > node->data)
{
node->right = del(node->right, data);
}
else
{
/* Now We can delete this node and replace with either minimum element
in the right sub tree or maximum element in the left subtree */
if(node->right && node->left)
{
/* Here we will replace with minimum element in the
right sub tree */
temp = findMin(node->right);
node -> data = temp->data;
/* As we replaced it with some other node, we have to
delete that node */
node -> right = del(node->right, temp->data);
}
else
{
/* If there is only one or zero children then we can
directly remove it from the tree and connect its
parent to its child */
temp = node;
if(node->left == NULL)
node = node->right;
else if(node->right == NULL)
node = node->left;
free(temp); /* temp is longer required */
printf("\n Element is removed ... ");
}
}
return node;
}
void main()
{
int data, ch, i, n;
NODE *root=NULL;
while (1)
{
printf("\n 1. Insertion in Binary Search Tree");
printf("\n 2. Search Element in Binary Search Tree");
printf("\n 3. Delete Element in Binary Search Tree");
printf("\n 4. Inorder");
printf("\n 5. Preorder");
printf("\n 6. Postorder");
printf("\n 7. Exit");
printf("\n Enter your choice: ");
scanf("%d", &ch);
switch (ch)
{
case 1:
printf("\n Enter n value: " );
scanf("%d", &n);
printf("\n Enter the values to create BST like(6,9,5,2,8,15,24,14)\n");
for(i=0; i<n; i++)
{
scanf("%d", &data);
root=createtree(root, data);
}
break;
case 2:
printf("\n Enter the element to search: ");
scanf("%d", &data);
if(root == NULL)
printf("\n No Data .... \n");
else
search(root, data);
break;
case 3:
printf("\n Enter the element to delete: ");
scanf("%d", &data);
if(root == NULL)
printf("\n No Data .... \n");
else
root=del(root, data);
break;
case 4:
printf("\n Inorder Traversal: \n");
if(root == NULL)
printf("\n No Data .... \n");
else
inorder(root);
break;
case 5:
SAMPLE OUTPUT:
40 10 30 20 50
Result:
Thus, the given ‘C’ program is written, executed and tested successfully
EXPERIMENT: 11
Develop 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 DFS/BFS method
In DFS, each vertex has three possible colors representing its state:
white: vertex is unvisited;
gray: vertex is in progress;
black: DFS has finished processing the vertex.
Sample Colour:
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 <stdlib.h>
#include <conio.h>
int a[20][20], q[20], visited[20], reach[10], n, i, j, f=0, r=-1, count=0;
void bfs(int v)
{
for(i=1;i<=n;i++)
if(a[v][i] && !visited[i])
q[++r]=i;
if(f<=r)
{
visited[q[f]]=1;
bfs(q[f++]);
}
}
void dfs(int v)
{
int i;
reach[v]=1;
for(i=1;i<=n;i++)
{
if(a[v][i] && !reach[i])
{
printf("\n %d->%d",v,i);
count++;
dfs(i);
}
}
}
void main()
{
int v, choice;
printf("\n Enter the number of vertices:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
q[i]=0;
visited[i]=0;
}
for(i=1;i<=n-1;i++)
reach[i]=0;
printf("\n Enter graph data in matrix form:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
1. BFS
2. DFS
3. Exit
Enter Choice : 1
Enter the starting vertex : 1
The nodes which are reachable from 1:
1 2 3 4
1. BFS
2. DFS
3. Exit
Enter Choice : 2
1-> 2
2-> 3
2-> 4
Graph is connected
Result:
Thus, the given ‘C’ program is written, executed and tested successfully
EXPERIMENT: 12
Given a File of N employee records with a set K of Keys (4-digit) which
uniquely determine the records in file F. 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. Let the keys in K and
addresses in L are Integers. Develop a Program in C that uses Hash function
H: K →L as H(K)=K mod m (remainder method), and implement hashing
technique to map a given key K to the address space L. Resolve the collision
(if any) using linear probing.
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 6: Hashing as to map a given key K to the address space L, Resolve the collision (if
any) is using linear probing.
Step 7: Stop.
Program Code:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 10
int create(int);
void display (int[]);
void linear_prob(int [], int, int);
void main()
{
int a[MAX],num,key,i;
int ans=1;
clrscr();
printf(" \n Collision handling by linear probing : \n");
for (i=0;i<MAX;i++)
{
a[i] = -1;
}
do
{
printf("\n Enter the data : ");
scanf("%4d", &num);
key=create(num);
linear_prob(a,key,num);
printf("\n Do you wish to continue ? (1/0) ");
scanf("%d",&ans);
}while(ans);
display(a);
getch();
}
} i++;
}
}
}
if(choice==1)
{
printf("\n The hash table is: \n");
for(i=0; i<MAX; i++)
printf("\n %d %d ", i, a[i]);
}
else
{
printf("\n The hash table is: \n");
for(i=0; i<MAX; i++)
if(a[i]!=-1)
{
printf("\n %d %d ", i, a[i]);
continue;
}
}
}
1. Display ALL
2. Filtered Display
Enter Choice : 1
1. Display ALL
2. Filtered Display
Enter Choice : 1
Result:
Thus, the given ‘C’ program is written, executed and tested successfully