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;
#include<stdio.h>
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;
}
4.INFIX TO POSTFIX (67)
#include<stdio.h>
#include<string.h>
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 '+': return op1 + op2;
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--];
#include<stdio.h>
#include<math.h>
void tower(int n, int source, int temp, int destination);
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 {
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;
}
void display(NODE 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() {
NODE head = NULL;
int choice;
while (1) {
printf("\nMenu:");
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)
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
typedef struct polynomial
{
float coeff;
int x,y,z;
struct polynomial *next;
}poly;
poly *p1,*p2,*p3;
poly* readpoly()
{
poly *temp=(poly*)malloc(sizeof(poly));
printf("\nEnter coeff:");
scanf("%f",&temp->coeff);
printf("Enter x expon:");
scanf("%d",&temp->x);
printf("Enter y expon:");
scanf("%d",&temp->y);
printf("Enter z expon:");
scanf("%d",&temp->z);
return temp;
}
poly* create()
{
int n,i;
printf("\nEnter no. of terms:");
scanf("%d",&n);
poly *temp=(poly*)malloc(sizeof(poly)),*t1=temp;
for(i=0;i<n;i++,t1=t1->next)
t1->next=readpoly();
t1->next=temp;
return temp;
}
void evaluate()
{
float sum=0;
int x,y,z;
poly *t=p1->next;
printf("\nEnter x,y&z:\n");
scanf("%d",&x);
scanf("%d",&y);
scanf("%d",&z);
while(t!=p1)
{
sum+=t->coeff*pow(x,t->x)*pow(y,t->y)*pow(z,t->z);
t=t->next;
}
printf("\nSum=%f",sum);
}
void display(poly *p)
{
poly *t=p->next;
while(t!=p)
{
if(t!=p->next&&t->coeff>0)
putchar('+');
printf("%.1fx^%dy^%dz^%d",t->coeff,t->x,t->y,t->z);
t=t->next;
}
}
poly* attach(float coeff,int x,int y,int z,poly *p)
{
poly *t=(poly*)malloc(sizeof(poly));
t->coeff=coeff;
t->x=x;
t->y=y;
t->z=z;
p->next=t;
return t;
}
poly* add()
{
printf("\nPolynomial1:\n");
p1=create();
printf("\nPolynomial2:\n");
p2=create();
int flag;
poly *t1=p1->next,*t2=p2->next,*t3;
p3=(poly*)malloc(sizeof(poly));
t3=p3;
while(t1!=p1&&t2!=p2)
{
if(t1->x>t2->x)
flag=1;
else if(t1->y<t2->y)
flag=-1;
else if(t1->z==t2->z)
flag=0;
switch(flag)
{
case 0:t3=attach(t1->coeff+t2->coeff,t1->x,t1->y,t1->z,t3);
t1=t1->next;
t2=t2->next;
break;
case 1:t3=attach(t1->coeff,t1->x,t1->y,t1->z,t3);
t1=t1->next;
break;
case -1:t3=attach(t2->coeff,t2->x,t2->y,t2->z,t3);
t2=t2->next;
break;
}
}
for(;t1!=p1;t1=t1->next)
t3=attach(t1->coeff,t1->x,t1->y,t1->z,t3);
for(;t2!=p2;t2=t2->next)
t3=attach(t2->coeff,t2->x,t2->y,t2->z,t3);
t3->next=p3;
return p3;
}
int main()
{
int ch;
printf("\n1.Represent and evaluate polynomial\n2.Add 2 polynomials\n3.Exit\nEnter choice:");
scanf("%d",&ch);
switch(ch)
{
case 1:p1=create();
display(p1);
evaluate();
break;
case 2:p3=add();
printf("\nPolynomial1:\n");
display(p1);
printf("\nPolynomial2:\n");
display(p2);
printf("\nP1+P2:\n");
display(p3);
break;
case 3:exit(0);
default:printf("\nInvalid choice...!");
}
return 0;
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);
return root;
if (root != NULL) {
inorder(root->lchild);
inorder(root->rchild);
if (root != NULL) {
printf("%d ", root->data);
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;
cur = q[++front];
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;