DS Progam
DS Progam
//pop function
void pop()
{
int item;
if(top==-1)
printf("\nStack is empty:");
else
{
item=s[top];
top--;
printf("\nDeleted Element is %d",item);
}
}
//Display function
void disp()
{
int i;
printf("\n");
for(i=0;i<=top;i++)
printf("%d\t",s[i]);
}
Output:
2. //Multiple stack implementation using a single Array
#include<stdio.h>
#include<conio.h>
#define MAX 10
int s[MAX];
int top1=-1,top2=MAX;
void push1(int); //to push in the first stack
void push2(int); //to push in the second stack
void pop1(); //pop from stack1
void pop2(); //pop from stack2
void disp1(); //display for stack1
void disp2(); //display for stack2
void main()
{
int i=1,choice,item;
clrscr();
while(i==1)
{
printf("\n1.Push s1 2. Push s2 3. Pop1 4. Pop2 5.Display1 6. Display2");
printf("\nEnter your choice:");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("\nEnter item to push in stack1:");
scanf("%d",&item);
push1(item);
break;
case 2:
printf("\nEnter item to push in stack2:");
scanf("%d",&item);
push2(item);
break;
case 3:
pop1();
break;
case 4:
pop2();
break;
case 5:
disp1();
break;
case 6:
disp2();
break;
default:
printf("\nWrong choice");
}
printf("\nContinue 1 for Yes:");
scanf("%d",&i);
}
getch();
}
Output;
3. //program for Tower of Hanoi
#include<stdio.h>
#include<conio.h>
void tower(int,char,char,char);
void main()
{
int n;
char a='A',b='B',c='C';
clrscr();
printf("\nHow many disc:");
scanf("%d",&n);
tower(n,a,b,c);
getch();
}
//function
void tower(int n,char a,char b,char c)
{
if(n!=0)
{
tower(n-1,a,c,b);
printf("\nMove disc from %c to %c",a,c);
tower(n-1,b,a,c);
}
}
4. //program in c to convert infix to postfix
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
#define SIZE 50
char s[SIZE],infix[SIZE],post[SIZE];
int top=-1;
void push(char);
char pop();
int pre(char);
void main()
{
char ch;
int i,k,p=0;
clrscr();
printf("\nEnter an infix expression:");
gets(infix);
for(i=0;infix[i]!='\0';i++)
{
ch=infix[i];
if(isalnum(ch))
{
post[p++]=ch;
}
else
if(ch=='(')
push(ch);
else
if(ch==')')
{
while(s[top]!='(')
{
post[p++]=pop();
}
pop();
}
else
if(ch=='/'||ch=='*'||ch=='+'||ch=='-')
{
if(pre(ch)>pre(s[top]))
push(ch);
else
{
while(pre(ch)<=pre(s[top]))
post[p++]=pop();
push(ch);
}
}
}
while(top>-1)
post[p++]=pop();
post[p]='\0';
printf("\nPostfix expression is :%s",post);
} //end main
//push function
void push(char item)
{
if(top>=SIZE-1)
printf("\nStack overflow:");
else
{
top++;
s[top]=item;
}
}
//pop function
char pop()
{
char item;
if(top==-1)
printf("\nStack underflow");
else
{
item=s[top];
top--;
return item;
}
}
5. //program in c to evaluate postfix expression
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
#define SIZE 50
char s[SIZE],post[SIZE];
int top=-1;
void push(int);
int pop();
void main()
{
char ch;
int i,v,a,b;
clrscr();
printf("\nEnter an postfix expression:");
gets(post);
for(i=0;post[i]!='\0';i++)
{
ch=post[i];
if(isdigit(ch))
{
push(ch-'0');
}
else
if(ch=='+'||ch=='*'||ch=='-'||ch=='/')
{
a=pop();
b=pop();
switch(ch)
{
case '*':
v=b*a;
break;
case '/':
v=b/a;
break;
case '+':
v=b+a;
break;
case '-':
v=b-a;
break;
}
push(v);
}
}
printf("\nResult is:%d",pop());
}
//push function
void push(int item)
{
if(top>=SIZE-1)
printf("\nStack overflow:");
else
{
top++;
s[top]=item;
}
}
//pop function
int pop()
{
int item;
if(top==-1)
printf("\nStack underflow");
else
{
item=s[top];
top--;
return item;
}
}
6. //program for array implementation of queue
#include<stdio.h>
#include<conio.h>
#define MAX 5
int q[MAX],r=-1,f=-1;
void insert();
void del();
void disp();
void main()
{
int i=1,choice;
clrscr();
while(i==1)
{
printf("\n1. Insert \n2. Delete \n3. Display");
printf("\nEnter your choice:");
scanf("%d",&choice);
switch(choice)
{
case 1:
insert();
break;
case 2:
del();
break();
case 3:
disp();
break;
default:
printf("\nChoice is wrong:");
} //end switch
printf("\nContinue 1 for yes:");
scanf("%d",&i);
} //end while
getch();
} //end main
//insert function
void insert()
{
int item;
if(r==MAX-1)
printf("\nQueue is full");
else
{
if(f==-1)
f=0;
printf("\nEnter item to insert:");
scanf("%d",&item);
r++;
q[r]=item;
}
}
//delete function
void del()
{
int item;
if(f==-1)
printf("\nqueue empty");
else
{
if(r==f) //last element
{
item=q[f];
printf("\nDeleted element is:%d",item);
r=f=-1;
}
else
{
item=q[f];
printf("\nDeleted element is:%d",item);
f++;
}
}
}
//display function
void disp()
{
int i;
printf("\n");
if(f==-1)
printf("\nQueue empty");
else
{
for(i=f;i<=r;i++)
printf("%d\t",q[i]);
}
}
7. //program for circular queue
#include<stdio.h>
#include<conio.h>
#define MAX 5
int q[MAX],r=-1,f=-1;
void insert();
void del();
void disp();
void main()
{
int i=1,choice;
clrscr();
while(i==1)
{
printf("\n1. Insert \n2. Delete \n3. Display");
printf("\nEnter your choice:");
scanf("%d",&choice);
switch(choice)
{
case 1:
insert();
break;
case 2:
del();
break;
case 3:
disp();
break;
default:
printf("\nChoice is wrong:");
} //end switch
printf("\nContinue 1 for yes:");
scanf("%d",&i);
} //end while
getch();
} //end main
//insert function
void insert()
{
int item;
if((f==0 && r==MAX-1)||(r==f-1))
printf("\nQueue is full");
else
{
if(f==-1)
f=r=0;
else
if(f!=0 && r==MAX-1)
r=0;
else
r++;
printf("\nEnter item to insert:");
scanf("%d",&item);
q[r]=item;
}
}
//delete function
void del()
{
int item;
if(f==-1)
printf("\nqueue empty");
else
{
if(r==f) //last element
{
item=q[f];
printf("\nDeleted element is:%d",item);
r=f=-1;
}
else
if(f==MAX-1)
{
item=q[f];
printf("\nDeleted element is:%d",item);
f=0;
}
else
{
item=q[f];
printf("\nDeleted element is:%d",item);
f++;
}
}
}
//display function
void disp()
{
int i;
printf("\n");
if(f==-1)
printf("\nQueue empty");
else
if(f>r)
{
for(i=0;i<=r;i++)
printf("%d\t",q[i]);
for(i=f;i<=MAX-1;i++)
printf("%d\t",q[i]);
}
else
{
for(i=f;i<=r;i++)
printf("%d\t",q[i]);
}
}
8. //Program for singly linked list
#include<stdio.h>
#include<conio.h>
#define NULL 0
struct list
{
int info;
struct list *next;
};
typedef struct list node;
node *start,*temp,*temp1,*newnode;
void create(); //function for the creation of linked list
void insert_b(); //insert new node at the beginning
void insert_e(); //insert new node at the end
void insert_p(); //insert new node in between two nodes
void del_f(); //delete first node
void del_l(); //delete last node
void del_m(); //delete intermediate node
void disp(); //display linked list
void main()
{
int i=1,choice;
clrscr();
while(i==1)
{
printf("\n1. Create\n2. Insert at Beg\n3. Insert at Pos\n4. insert at end");
printf("\n5. Del first \n6. Del last \n7. Del intermedate \n8. Display");
printf("\nEnter your choice:");
scanf("%d",&choice);
switch(choice)
{
case 1:
create();
break;
case 2:
insert_b();
break;
case 3:
insert_p();
break;
case 4:
insert_e();
break;
case 5:
del_f();
break;
case 6:
del_l();
break;
case 7:
del_m();
break;
case 8:
disp();
break;
default:
printf("\nChoice is wrong");
}
printf("\nContinue 1 for yes");
scanf("%d",&i);
}
}
case 5:
del_f();
break;
case 6:
del_l();
break;
case 7:
del_m();
break;
case 8:
disp_b();
break;
case 9:
disp_l();
break;
default:
printf("\nChoice is wrong");
}
printf("\nContinue 1 for yes");
scanf("%d",&i);
}
}
}
//function to insert node at particular position
void insert_p()
{
int t;
//allocate space for new node
newnode=(node *)malloc(sizeof(node));
printf("Enter info for new node:");
scanf("%d",&newnode->info);
printf("\nEnter info of target node:");
scanf("%d",&t);
temp=start;
while(temp->next!=NULL)
{
if(temp->next->info==t)
break;
else
temp=temp->next;
}
if(temp->next==NULL)
printf("\nNode not fund");
else
{
newnode->next=temp->next;
newnode->prev=temp;
temp->next->prev=newnode;
temp->next=newnode;
}
}
case 6:
del_l();
break;
case 7:
del_m();
break;
case 8:
disp();
break;
default:
printf("\nChoice is wrong");
}
printf("\nContinue 1 for yes");
scanf("%d",&i);
}
}
//mergesort function
void mergesort(int a[],int f,int l)
{
int m,i;
if(f<l)
{
m=(f+l)/2;
mergesort(a,f,m);
mergesort(a,m+1,l);
merge(a,f,m,l);
}