DS
DS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Day {
};
calendar[i].name = (char *)malloc(50 * sizeof(char)); // Assuming max length of day name is 50 characters
scanf("%s", calendar[i].name);
printf("Enter date for Day %d: ", i + 1);
scanf("%d", &calendar[i].date);
scanf("%s", calendar[i].description);
printf("\n");
int main() {
create(calendar);
read(calendar);
display(calendar);
free(calendar[i].name);
free(calendar[i].description);
}
return 0;
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.
#include<stdio.h>
void read_string();
void pattern_match();
char STR[100],PAT[100],REP[100],ans[100];
int i,j,c,m,k,flag=0;
int main()
read_string();
pattern_match();
return 0;
void read_string()
gets(STR);
gets(PAT);
printf("\nEnter a REPLACE string: \n");
gets(REP);
void pattern_match()
i= m=c=j=0;
if ( STR[m] == PAT[i] )
i++;
m++;
flag=1;
if ( PAT[i] == '\0')
ans[j] = REP[k];
i=0;
c=m;
else //mismatch
ans[j] = STR[c];
j++;
c++;
m = c;
i=0;
if(flag==0)
else
{ ans[j] ='\0';
3. Develop a menu driven Program in C for the following operations on STACK of Integers
f. Exit
Support the program with appropriate functions for each of the above operations
#include <stdio.h>
#include <stdlib.h>
int stack[6],rev[6];
int top=-1,k=0;
int size;
void push();
void pop();
void display();
int pali();
void main()
int choice,f;
scanf("%d",&size);
while(1)
scanf("%d",&choice);
switch(choice)
case 1:push();
break;
case 2:pop();
break;
case 3:display();
break;
case 4:f=pali();
if(f==1)
printf("It's Palindrome\n");
else
break;
case 5:exit(0);
default:printf("Wrong choice...\n");
void push()
int num;
if(top==(size-1))
printf("Stack Overflow\n");
else
scanf("%d",&num);
top++;
stack[top]=num;
}
void pop()
int num;
if(top==-1)
printf("Stack Underflow\n");
else
num=stack[top];
top--;
void display()
int i;
if(top==-1)
printf("Stack Underflow\n");
else
{
printf("Stack Contents....\n");
for(i=top;i>=0;i--)
printf("%d\n",stack[i]);
rev[k++]=stack[i];
int pali()
int i,flag=1;
for(i=top;i>=0;i--)
if(stack[i]!=rev[--k])
flag=0;
return flag;
expressions
#define size 50 /* size of stack */
#include <ctype.h>
#include <stdio.h>
char s[size];
s[++top] = elem;
return (s[top--]);
switch (elem)
case '#':
return 0;
case '(':
return 1;
case '+':
case '-':
return 2;
case '*':
case '/':
case '%':
return 3;
case '^':
return 4;
}}
int i = 0, k = 0;
scanf("%s", infx);
push('#');
if (ch == '(')
push(ch);
else if (isalnum(ch))
pofx[k++] = ch;
pofx[k++] = pop();
else /* operator */
{
pofx[k++] = pop();
push(ch);
pofx[k++] = pop();
printf("\n\n Given infix expression: %s\n postfix expression is: %s\n", infx, pofx);
Program (5-A)
#include<ctype.h>
#include <stdio.h>
float stack[20];
int top=-1;
main()
char postfix[20];
float result;
scanf("%s", postfix);
result=eval_postfix(postfix);
int i=0,k;
char ch,op1,op2;
float res;
ch=postfix[i];
k=ch-'0';
push(k);
else
op2=pop();
op1=pop();
switch(ch)
case '+':push(op1+op2);
break;
case '-':push(op1-op2);
break;
case '*':push(op1*op2);
break;
case '/':push(op1/op2);
break;
case '^':push(pow(op1,op2));
break;
default :printf("illegal\n");
exit(0);
i++;
res=pop();
if(top!=-1)
exit(1);
return(res);
top++;
stack[top]=num;
return;
float pop()
{
float num;
if(top == -1)
printf("not a valid");
exit(0);
else
num=stack[top];
top--;
return(num);
Program (5-B)
Towers of Hanoi
#include <stdio.h>
int main()
int num;
scanf("%d", &num);
return 0;
}
if (num == 1)
return;
printf("\n Move disk %d from peg %c to peg %c", num, frompeg, topeg);
6. Develop a menu driven Program in C for the following operations on Circular QUEUE of
e. Exit
Support the program with appropriate functions for each of the above operations
#include <string.h>
#include <stdio.h>
#define SIZE 3
char CQ[SIZE];
int ch;
void CQ_Insert();
void CQ_Delet();
void CQ_Display();
void main()
printf("1.Insert\n2.Delete\n3.Display\n4.Exit\n");
while(1)
scanf("%d",&ch);
switch(ch)
case 1: CQ_Insert();
break;
case 2:CQ_Delet();
break;
case 3:CQ_Display();
break;
case 4: exit(0);
void CQ_Insert()
char ele;
if(front==(rear+1)%SIZE)
if(front==-1)
front++;
scanf("\n%c",&ele);
rear = (rear+1)%SIZE;
CQ[rear] =ele;
void CQ_Delet()
char item;
if(front == -1)
return;
item=CQ[front];
front=-1;
rear=-1;
else
item =CQ[front];
void CQ_Display()
int i;
if(front==-1)
else
for(i=front;i!=rear;i=(i+1)%SIZE)
printf("%c\t",CQ[i]);
printf("%c\n",CQ[i]);
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
e. Exit
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
int count=0;
struct stud
int sem;
char name[15],usn[15],brnch[8];
}*head=NULL,*tail=NULL,*temp=NULL,*temp1;
if(head==NULL)
head->ph=n;
head->sem=s;
strcpy(head->name,na);
strcpy(head->usn,u);
strcpy(head->brnch,b);
head->next=NULL;
tail=head;
count++;
else
temp->ph=n;
temp->sem=s;
strcpy(temp->name,na);
strcpy(temp->usn,u);
strcpy(temp->brnch,b);
temp->next=NULL;
tail->next=temp;
tail=temp;
count++;
void display()
temp1=head;
if(temp1==NULL)
printf("\nlist is empty\n");
else
while(temp1!=NULL)
printf("-----------------------\n");
printf("NAME:%s\nUSN:%s\nBRANCH:%s\nSEM:%d\nPHONE NO.:%lld\n",temp1->name,temp1-
>usn,temp1->brnch,temp1->sem,temp1->ph);
printf("-----------------------\n");
temp1=temp1->next;
}
printf("no. of nodes=%d\n",count);
temp->ph=n;
temp->sem=s;
strcpy(temp->name,na);
strcpy(temp->usn,u);
strcpy(temp->brnch,b);
temp->next=head;
head=temp;
count++;
temp->ph=n;
temp->sem=s;
strcpy(temp->name,na);
strcpy(temp->usn,u);
strcpy(temp->brnch,b);
tail->next=temp;
temp->next=NULL;
tail=temp;
count++;
}
void delete_head()
temp1=head;
if(temp1==NULL)
printf("list is empty\n");
else
head=head->next;
printf("-----------------------\n");
printf("NAME:%s\nUSN:%s\nBRANCH:%s\nSEM:%d\nPHONE NO.:%lld\n",temp1->name,temp1-
>usn,temp1->brnch,temp1->sem,temp1->ph);
printf("-----------------------\n");
free(temp1);
count--;
void delete_tail()
temp1=head;
if(temp1==NULL)
printf("list is empty\n");
while(temp1->next!=tail)
{
temp1=temp1->next;
printf("-----------------------\n");
printf("NAME:%s\nUSN:%s\nBRANCH:%s\nSEM:%d\nPHONE NO.:%lld\n",tail->name,tail->usn,tail-
>brnch,tail->sem,tail->ph);
printf("-----------------------\n");
free(tail);
tail=temp1;
tail->next=NULL;
count--;
void main()
int choice;
int sem;
char name[20],usn[15],brnch[5];
printf("--------MENU----------\n");
printf("----------------------\n");
while(1)
scanf("%d",&choice);
switch(choice)
{
case 1:printf("enter the name usn branch sem phno. of the student respectively\n");
scanf("%s%s%s%d%lld",name,usn,brnch,&sem,&ph);
create(ph,sem,name,usn,brnch);
break;
case 2: printf("enter the name usn branch sem phno. of the student respectively\n");
scanf("%s%s%s%d%lld",name,usn,brnch,&sem,&ph);
insert_head(ph,sem,name,usn,brnch);
break;
case 3: printf("enter the name usn branch sem phno. of the student respectively\n");
scanf("%s%s%s%d%lld",name,usn,brnch,&sem,&ph);
insert_tail(ph,sem,name,usn,brnch);
break;
case 4:delete_head();
break;
case 5:delete_tail();
break;
case 6:display();
break;
case 7: exit(0);
default:printf("invalid option\n");
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
f. Exit
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Enode
char ssn[15];
char name[20];
char dept[5];
char designation[10];
int salary;
}*head=NULL;
void del_beg();
void del_end();
void display();
int count=0;
void main()
int choice;
char s[15],n[20],dpt[5],des[10];
int sal;
while(1)
scanf("%d",&choice);
switch(choice)
scanf("%s%s%s%s%d%lld",s,n,dpt,des,&sal,&p);
create(s,n,dpt,des,sal,p);
break;
case 2: display();
break;
scanf("%s%s%s%s%d%lld",s,n,dpt,des,&sal,&p);
ins_beg(s,n,dpt,des,sal,p);
break;
scanf("%s%s%s%s%d%lld",s,n,dpt,des,&sal,&p);
ins_end(s,n,dpt,des,sal,p);
break;
case 5: del_beg();
break;
case 6: del_end();
break;
case 7: exit(0);
if(head==NULL)
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
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;
while(temp1!=NULL)
printf("------------------\n");
printf("%s\n%s\n%s\n%s\n%d\n%lld\n",temp1->ssn,temp1->name,temp1->dept,temp1->designation,temp1-
>salary,temp1->phno);
printf("------------------");
temp1=temp1->right;
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;
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->left=tail;
temp1->right=NULL;
tail=temp1;
void del_beg()
temp1=head->right;
free(head);
head=temp1;
head->left=NULL;
void del_end()
temp1=tail->left;
free(tail);
tail=temp1;
tail->right=NULL;
9. Develop a Program in C for the following operationson Singly Circular Linked List (SCLL)
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct node{
int coeff;
int expo;
};
void add_poly();
void eval_poly(int );
int n,ch;
int c,e,i;
void main()
int x;
list1=list2=list3=NULL;
while(1)
printf("Enter choice\n");
scanf("%d",&ch);
switch(ch)
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d%d",&c,&e);
list1=create_poly(c,e,list1);
break;
case 2: printf("Enter the number of terms\n");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d%d",&c,&e);
list2=create_poly(c,e,list2);
break;
case 3: display(list1);
display(list2);
break;
case 4: add_poly();
display(list3);
break;
scanf("%d",&x);
eval_poly(x);
break;
case 6:exit(0);
if(list==NULL)
dummy1->expo=0;
dummy1->ptr=list1;
list->coeff=c;
list->expo=e;
//list1->ptr=list1;
head1=list;
head1->ptr=dummy1;
else
temp->coeff=c;
temp->expo=e;
head1->ptr=temp;
temp->ptr=dummy1;
head1=temp;
return list;
void add_poly()
if(list3==NULL)
dummy3->coeff=0;
dummy3->expo=0;
dummy3->ptr=list3;
temp1=list1;
temp2=list2;
while((temp1->coeff!=0)&&(temp2->coeff!=0))
if(list3==NULL)
list3=temp;
head3=list3;
if(temp1->expo==temp2->expo)
temp->coeff=temp1->coeff+temp2->coeff;
temp->expo=temp1->expo;
head3->ptr=temp;
head3=temp;
head3->ptr=dummy3;
temp1=temp1->ptr;
temp2=temp2->ptr;
else if(temp1->expo>temp2->expo)
temp->coeff=temp1->coeff;
temp->expo=temp1->expo;
head3->ptr=temp;
head3=temp;
head3->ptr=dummy3;
temp1=temp1->ptr;
else
temp->coeff=temp2->coeff;
temp->expo=temp2->expo;
//temp->ptr=list3;
head3->ptr=temp;
head3=temp;
head3->ptr=dummy3;
//head3=temp;
temp2=temp2->ptr;
if(temp1->coeff==0)
while(temp2->coeff!=0)
temp->coeff=temp2->coeff;
temp->expo=temp2->expo;
head3->ptr=temp;
head3=temp;
head3->ptr=dummy3;
//head3=temp;
temp2=temp2->ptr;
}
}
if(temp2->coeff==0)
while(temp1->coeff!=0)
temp->coeff=temp1->coeff;
temp->expo=temp1->expo;
head3->ptr=temp;
head3=temp;
head3->ptr=dummy3;
//head3=temp;
temp1=temp1->ptr;
temp=list;
printf("\nPOLYNOMIAL: ");
while(temp->coeff!=0)
printf("%dX^%d+",temp->coeff,temp->expo);
temp=temp->ptr;
printf("\n");
void eval_poly(int x)
{
int result=0;
temp1=list1;
temp2=list2;
while(temp1->coeff!=0)
result+=(temp1->coeff)*pow(x,temp1->expo);
temp1=temp1->ptr;
printf("Polynomial 1 Evaluation:%d\n",result);
result=0;
while(temp2->coeff!=0)
result+=(temp2->coeff)*pow(x,temp2->expo);
temp2=temp2->ptr;
printf("Polynomial 2 Evaluation:%d\n",result);
10. Develop a menu driven Program in C for the following operations on Binary Search Tree
(BST) of Integers .
c. Search the BST for a given element (KEY) and report the appropriate message
d. Exit
#include <stdio.h>
#include <stdlib.h>
struct BST
int data;
};
NODE *node;
if (node == NULL)
NODE *temp;
temp= (NODE*)malloc(sizeof(NODE));
temp->data = data;
return temp;
return node;
}
NODE* search(NODE *node, int data)
if(node == NULL)
node->left=search(node->left, data);
node->right=search(node->right, data);
else
return node;
if(node != NULL)
inorder(node->left);
printf("%d\t", node->data);
inorder(node->right);
if(node != NULL)
{
printf("%d\t", node->data);
preorder(node->left);
preorder(node->right);
if(node != NULL)
postorder(node->left);
postorder(node->right);
printf("%d\t", node->data);
if(node==NULL)
return NULL;
if(node->left)
return findMin(node->left);
else
return node;
{
NODE *temp;
if(node == NULL)
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 */
/* Here we will replace with minimum element in the right sub tree */
temp = findMin(node->right);
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;
node = node->left;
return node;
void main()
NODE *root=NULL;
clrscr();
while (1)
printf("\n4.Inorder\n5.Preorder\n6.Postorder\n7.Exit");
scanf("%d", &ch);
switch (ch)
scanf("%d", &n);
scanf("%d", &data);
root=createtree(root, data);
break;
scanf("%d", &data);
root=search(root, data);
break;
scanf("%d", &data);
root=del(root, data);
break;
inorder(root);
break;
preorder(root);
break;
postorder(root);
break;
case 7: exit(0);
default:printf("\nWrong option");
break;
}
}
b. Print all the nodes reachable from a given starting node in a digraph using DFS/BFS
method
#include <stdio.h>
#include <stdlib.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++)
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++)
printf("\n %d->%d",v,i);
count++;
dfs(i);
void main()
int v, choice;
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;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
while(1)
printf("\n1.BFS\n2.DFS\n3.Exit\n");
scanf("%d",&choice);
switch(choice)
scanf("%d",&v);
bfs(v);
if((v<1)||(v>n))
else
for(i=1;i<=n;i++)
if(visited[i])
printf("%d\t",i);
break;
case 2:dfs(1);
if(count==n-1)
else
break;
case 3: exit(0);
}
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:
technique to map a given key K to the address space L. Resolve the collision (if any) using
linear probing.
#include <stdlib.h>
int create(int);
void main()
int a[MAX],num,key,i;
int ans=1;
for (i=0;i<MAX;i++)
a[i] = -1;
do
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);
int key;
key=num%100;
return key;
flag=0;
if(a[key]== -1)
a[key] = num;
else
printf("\nCollision Detected...!!!\n");
i=0;
while(i<MAX)
if (a[i]!=-1)
count++;
i++;
if(count == MAX)
display(a);
exit(1);
if(a[i] == -1)
a[i] = num;
flag =1;
break;
//for(i=0;i<key;i++)
i=0;
if(a[i] == -1)
a[i] = num;
flag=1;
break;
i++;
}
}
int i,choice;
scanf("%d",&choice);
if(choice==1)
else
if(a[i]!=-1)
continue;