DSA_smol
DSA_smol
DSA_smol
CALENDAR (48)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Day {
char* name;
int date;
char* activity;
};
void create() {
void read() {
scanf("%s", calendar[i]->name);
scanf("%d", &calendar[i]->date);
scanf("%s", calendar[i]->activity);
void display() {
printf("-----------------------------------------------------\n");
printf("-----------------------------------------------------\n");
int main() {
create();
printf("Reading Calendar:\n");
read();
printf("Displaying Calendar:\n");
display();
// Free memory
free(calendar[i]->name);
free(calendar[i]->activity);
free(calendar[i]);
return 0;
void main()
{
char s[200],pat[100],rep[100],ans[200];
int i,j,k,l,flag;
printf("\nEnter string:");
scanf("%s",s);
printf("\nEnter pattern:");
scanf("%s",pat);
printf("\nEnter replacement:");
scanf("%s",rep);
for(i=0,k=0;s[i]!='\0';i++)
{
flag=1;
for(j=0;pat[j]!='\0';j++)
if(s[i+j]!=pat[j])
flag=0;
l=j;
if(flag)
{
for(j=0;rep[j]!='\0';j++,k++)
ans[k]=rep[j];
i+=l-1;
}
else
ans[k++]=s[i];
}
ans[k]='\0';
printf("%s",ans);
#include <stdio.h>
#include <stdlib.h>
int s[5],top=-1;
void push()
{
if(top==4)
printf("\nStack overflow!!!!");
else
{
printf("\nEnter element to insert:");
scanf("%d",&s[++top]);
}
}
void pop()
{
if(top==-1)
printf("\nStack underflow!!!");
else
printf("\nElement popped is: %d",s[top--]);
}
void disp()
{
int t=top;
if(t==-1)
printf("\nStack empty!!");
else
printf("\nStack elements are:\n");
while(t>=0)
printf("%d ",s[t--]);
}
void pali()
{
int num[5],rev[5],i,t;
for(i=0,t=top;t>=0;i++,t--)
num[i]=rev[t]=s[t];
for(i=0;i<=top;i++)
if(num[i]!=rev[i])
break;
/*printf(" num rev\n");
for(t=0;t<=top;t++)
printf("%4d %4d\n",num[t],rev[t]);*///remove /* */ to display num and rev
if(i==top+1)
printf("\nIt is a palindrome");
else
printf("\nIt is not a palindrome");
}
int main()
{
int ch;
do
{
printf("\n...Stack operations.....\n");
printf("1.PUSH\n");
printf("2.POP\n");
printf("3.Palindrome\n");
printf("4.Display\n");
printf("5.Exit\n________________\n");
printf("Enter choice:");
scanf("%d",&ch);
switch(ch)
{
case 1:push();break;
case 2:pop();break;
case 3:pali();break;
case 4:disp();break;
case 5:exit(0);
default:printf("\nInvalid choice");
}
}
while(1);
return 0;
#include<stdio.h>
#include<string.h>
int F(char symbol)
{
switch (symbol)
{
case '+':
case '-':return 2;
case '*':
case '/':
case '%':return 4;
case '^':
case '$':retrurn 5;
case '(':return 0;
case '#':return -1;
default :return 8;
}
}
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) ;
5a.EVALUATION (41)
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<ctype.h>
switch (symbol)
case '$':
default : return 0;
}
void main()
int top, i;
top=-1;
symbol = postfix[i];
if(isdigit(symbol))
s[++top]=symbol - '0';
else
op2 = s[top--];
op1 = s[top--];
s[++top] = res;
res = s[top--];
void main ()
{
int n;
printf("\nEnter the number of discs: \n\n");
scanf("%d", &n);
printf("\nThe sequence of moves involved in the Tower of Hanoi are\n");
tower(n, 'A', 'B', 'C');
printf("\n\nTotal Number of moves are: %d\n", (int)pow(2,n)-1);
#include <stdio.h>
#include <stdlib.h>
#define max 5
int q[max],f=-1,r=-1;
void ins()
{
if(f==(r+1)%max)
printf("\nQueue overflow");
else
{
if(f==-1)
f++;
r=(r+1)%max;
printf("\nEnter element to be inserted:");
scanf("%d",&q[r]);
}
}
void del()
{
if(r==-1)
printf("\nQueue underflow");
else
{
printf("\nElemnt deleted is:%d",q[f]);
if(f==r)
f=r=-1;
else
f=(f+1)%max;
}
}
void disp()
{
if(f==-1)
printf("\nQueue empty");
else
{
int i;
printf("\nQueue elements are:\n");
for(i=f;i!=r;i=(i+1)%max)
printf("%d\t",q[i]);
printf("%d",q[i]);
printf("\nFront is at:%d\nRear is at:%d",q[f],q[r]);
}
}
int main()
{
printf("\nCircular Queue operations");
printf("\n1.Insert");
printf("\n2.Delete");
printf("\n3.Display");
printf("\n4.Exit");
int ch;
do{
printf("\nEnter choice:");
scanf("%d",&ch);
switch(ch)
{
case 1:ins();break;
case 2:del();break;
case 3:disp();break;
case 4:exit(0);
default:printf("\nInvalid choice...!");
}
}while(1);
return 0;
7.SLL (109)
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
struct stud
{
char usn[11],name[15],branch[4],phno[11];
int sem;
struct stud *next;
}*f=NULL,*r=NULL,*t=NULL;
void ins(int ch)
{
t=(struct stud*)malloc(sizeof(struct stud));
printf("\nEnter USN:");
scanf("%s",t->usn);
printf("Enter Name:");
scanf("%s",t->name);
printf("Enter Branch:");
scanf("%s",t->branch);
printf("Enter Sem:");
scanf("%d",&t->sem);
printf("Enter Phno:");
scanf("%s",t->phno);
t->next=NULL;
if(!r)
f=r=t;
else
{
if(ch)
{
r->next=t;
r=t;
}
else
{
t->next=f;
f=t;
}
}
}
void del(int ch)
{
if(!f)
printf("\nList Empty");
else
{
struct stud *t1;
if(f==r)
{
t1=f;
f=r=NULL;
}
else if(ch)
{
t1=r;
for(t=f;t->next!=r;t=t->next)
r=t;
r->next=NULL;
}
else
{
t1=f;
f=f->next;
}
printf("\nElement deleted is:\n");
printf("USN:%s\nName:%s\nBranch:%s\nSem:%d\nPhno:%s\n",t1->usn,t1-
>name,t1->branch,t1->sem,t1->phno);
free(t1);
}
}
void disp()
{
if(!f)
printf("\nList Empty!!!");
else
printf("\nList elements are:\n");
for(t=f;t;t=t->next)
printf("\nUSN:%s\nName:%s\nBranch:%s\nSem:%d\nPhno:%s\n",t->usn,t->name,t-
>branch,t->sem,t->phno);
}
void main()
{
int ch,n,i;
printf("\n........Menu..........,\n");
printf("1.Create\n");
printf("2.Display\n");
printf("3.Insert at end\n");
printf("4.Delete at end\n");
printf("5.Insert at beg\n");
printf("6.Delete at beg\n");
printf("7.Exit\n");
while(1)
{
printf("\nEnter choice:");
scanf("%d",&ch);
switch(ch)
{
case 1: printf("\nEnter no. of nodes:");
scanf("%d",&n);
for(i=0;i<n;i++)
ins(0);
break;
case 2:disp();break;
case 3:ins(1);break;
case 4:del(1);break;
case 5:ins(0);break;
case 6:del(0);break;
case 7:exit(0);
default:printf("\nInvalid choice!!!!");
}
}
8.DLL
#include <stdio.h>
#include <stdlib.h>
struct Employee {
char ssn[25], name[25], dept[10], designation[25];
int sal;
};
NODE createNode() {
if (newNode == NULL) {
exit(1);
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
if (head == NULL) {
return newNode;
temp = temp->next;
temp->next = newNode;
newNode->prev = temp;
return head;
}
if (head == NULL) {
printf("\nDLL is empty.");
return;
int count = 0;
temp = temp->next;
count++;
if (head == NULL) {
printf("\nDLL is empty.");
return NULL;
if (head->next == NULL) {
free(head);
return NULL;
temp = temp->next;
temp->prev->next = NULL;
free(temp);
return head;
if (head == NULL) {
return newNode;
newNode->next = head;
head->prev = newNode;
return newNode;
if (head == NULL) {
printf("\nDLL is empty.");
return NULL;
if (head->next == NULL) {
free(head);
return NULL;
head = head->next;
head->prev = NULL;
free(temp);
return head;
int main() {
int choice;
while (1) {
printf("\nMenu:");
printf("\n1. Create DLL of N Employees (End Insertion)");
printf("\n7. Exit");
scanf("%d", &choice);
switch (choice) {
case 1:
head = insertEnd(head);
break;
case 2:
display(head);
break;
case 3:
head = insertEnd(head);
break;
case 4:
head = deleteEnd(head);
break;
case 5:
head = insertFront(head);
break;
case 6:
head = deleteFront(head);
break;
case 7:
exit(0);
default:
}
return 0;
9.SCLL (134)
10.BST
#include<stdio.h>
#include<stdlib.h>
struct BST {
int data;
};
if (temp == NULL) {
exit(1);
temp->data = val;
temp->lchild = NULL;
temp->rchild = NULL;
return temp;
if (root == NULL)
return create(val);
if (root != NULL) {
inorder(root->lchild);
inorder(root->rchild);
if (root != NULL) {
preorder(root->lchild);
preorder(root->rchild);
if (root != NULL) {
postorder(root->lchild);
postorder(root->rchild);
if (key == root->data)
return 1;
root = root->lchild;
else
root = root->rchild;
}
return 0;
int main() {
while(1) {
printf("\n~~~~BST MENU~~~~");
printf("\n1. Insert");
printf("\n2. Traversals");
printf("\n3. Search");
printf("\n4. Exit");
scanf("%d", &choice);
switch(choice) {
case 1:
scanf("%d", &val);
break;
case 2:
if (root == NULL)
printf("\nTree is empty");
else {
preorder(root);
inorder(root);
postorder(root);
}
break;
case 3:
scanf("%d", &key);
if (search(root, key))
else
break;
case 4:
exit(0);
return 0;
11.GRAPH
#include<stdio.h>
#include<stdlib.h>
void bfs(int v) {
int i, cur;
visited[v] = 1;
q[++rear] = v;
q[++rear] = i;
visited[i] = 1;
void dfs(int v) {
int i;
visited[v] = 1;
s[++top] = v;
dfs(i);
int main() {
scanf("%d", &n);
scanf("%d", &adjMatrix[i][j]);
}
}
visited[i] = 0;
scanf("%d", &start);
printf("\n==>1. BFS: Print all nodes reachable from a given starting node");
printf("\n==>2. DFS: Print all nodes reachable from a given starting node");
printf("\n==>3: Exit");
scanf("%d", &ch);
switch (ch) {
case 1:
bfs(start);
if (visited[i] == 0)
break;
case 2:
dfs(start);
break;
case 3:
exit(0);
default:
return 0;