Professional Documents
Culture Documents
of
Data Structures
(CSF102)
BACHELOR OF TECHNOLOGY
In
Session 2020-21
SCHOOL OF COMPUTING
DIT UNIVERSITY, DEHRADUN
(State Private University through State Legislature Act No. 10 of 2013 of Uttarakhand and approved by UGC)
Mussoorie Diversion Road, Dehradun, Uttarakhand - 248009, India.
Recursive Method:
#include<stdio.h>
if (r >= l)
return -1;
int arr[max],n,i,key;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
scanf("%d",&key);
return 0;
Iterative Method:
#include<stdio.h>
if (array[middle] == element)
return middle;
start_index = middle + 1;
else
Memansha 1000015482 BT-CSE F
Choudhary School of
Computing
end_index = middle - 1;
return -1;
int main()
int array[100];
int n,i;
printf("Memansha Choudhary\
array\n"); scanf("%d",&n);
for(i=0;i<n;i++)
printf("enter element:\t");
scanf("%d",&array[i]);
int element;
scanf("%d",&element);
if(found_index == -1 ) {
return 0;
Output:
Program:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
void insert()
int i;
scanf("%d", &size);
void traverse()
int i;
void search()
int s, i,flag;
scanf("%d", &s);
if (array[i] == s)
void delete ()
int pos, i;
scanf("%d", &pos);
else
printf("\nAfter deletion\n");
int main()
int ch;
1000015482\n"); while(1)
printf("\n1.Insert\t2.Display\t3.Search\t4.Delete\n");
scanf("%d",&ch);
switch(ch)
case 1:
insert();
break;
case 2:
traverse();
break;
case 3:
search();
break;
case 4:
delete();
break;
return 0;
Output:
Program:
#include<stdio.h>
int stack[100],choice,n,top,x,i;
void push();
void pop();
void traversing();
void peek();
int main()
top=-1;
STACK[MAX=100]:"); scanf("%d",&n);
printf("\n\t ");
scanf("%d",&choice);
switch(choice)
case 1:
push();
break;
case 2:
pop();
break;
case 3:
traversing();
break;
case 5:
break;
case 4:
peek();
break;
default:
while(choice!=4);
return 0;
void push()
if(top>=n-1)
else
scanf("%d",&x);
top++;
stack[top]=x;
void pop()
if(top<=-1)
else
top--;
void traversing()
if(top>=0)
printf("\n%d",stack[i]);
else
void peek()
if (top==-1)
printf("\nStack is empty\n");
return;
Output:
Program :
#include <stdio.h>
#include<stdlib.h>
#define MAX 50
void insert();
void delete();
void display();
int queue_array[MAX];
int rear = - 1;
int front = - 1;
int main()
int choice;
printf("Memansha Choudhary\n
printf("4.Quit \n");
while (1)
scanf("%d", &choice);
switch (choice)
case 1:
insert();
break;
case 2:
delete();
break;
case 3:
display();
break;
case 4:
exit(1);
default:
void insert()
int add_item;
if (rear == MAX - 1)
else
if (front == - 1)
front = 0;
scanf("%d", &add_item);
rear = rear + 1;
queue_array[rear] = add_item;
void delete()
else
front = front + 1;
void display()
int i;
if (front == - 1)
else
printf("Queue is : \n");
printf("\n");
Program :
#include <stdio.h>
# define max 6
int queue[max];
int front=-1;
int rear=-1;
front=0;
rear=0;
queue[rear]=element;
else if((rear+1)%max==front)
printf("Queue is overflow..\n");
else
rear=(rear+1)%max;
queue[rear]=element;
int dequeue()
printf("\nQueue is underflow..");
else if(front==rear)
front=-1;
rear=-1;
front=(front+1)%max;
void display()
int i=front;
else
while(i<=rear)
printf("%d,", queue[i]);
i=(i+1)%max;
int main()
int choice=1,x;
printf("\nMemansha Choudhary\
scanf("%d", &choice);
switch(choice)
case 1:
scanf("%d", &x);
enqueue(x);
break;
case 2:
dequeue();
case 3:
display();
return 0;
Output:
Program:
#include<stdio.h>
#define MAX 10
int deque[MAX];
int left=-1, right=-1;
void insert_right(void);
void insert_left(void);
void delete_right(void);
void delete_left(void);
void display(void);
int main()
{
int choice;
printf("\nMemansha Choudhary\
n1000015482\n"); printf("\n1.Insert at
right "); printf("\n2.Insert at left ");
printf("\n3.Delete from right "); printf("\
n4.Delete from left "); printf("\n5.Display
");
printf("\n6.Exit");
do
{
void insert_right()
{
int val;
printf("\nEnter the value to be added ");
scanf("%d",&val);
if( (left==0 && right==MAX-1) || (left==right+1) )
{
printf("\nOVERFLOW");
}
if(left==-1)
{
left=0;
right=0;
}
void insert_left()
{
int val;
printf("\nEnter the value to be added ");
scanf("%d",&val);
if( (left==0 && right==MAX-1) || (left==right+1) )
{
printf("\nOVERFLOW");
}
if(left==-1)
{
left=0;
right=0;
}
else
{
if(left==0)
left=MAX-1;
else
left=left-1;
}
deque[left]=val;
}
void delete_right()
{
if(left==-1)
{
void delete_left()
{
if(left==-1)
{
printf("\nUNDERFLOW");
return;
}
printf("\nThe deleted element is %d\n", deque[left]);
if(left==right)
{
left=-1;
right=-1;
}
else
{
if(left==MAX-1)
left=0;
else
left=left+1;
}
}
Program:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
struct node
int data;
void create()
int choice;
head = 0;
while (choice)
scanf("%d", &newnode->data);
newnode->next = 0;
if (head == 0)
else
temp->next = newnode;
temp = newnode;
scanf("%d", &choice);
void insertbeg()
printf("enter data\n");
newnode->next = head;
head = newnode;
void insertend()
printf("enter data\n");
scanf("%d", &newnode->data);
newnode->next = 0;
temp = head;
while (temp->next != 0)
temp = temp->next;
temp->next = newnode;
void insertpos()
int pos, i = 1;
temp = head;
temp = temp->next;
i++;
printf("enter data\n");
scanf("%d", &newnode->data);
newnode->next = temp->next;
temp->next = newnode;
void deletebeg()
temp = head;
head = head->next;
free(temp);
void deleteend()
temp = head;
while (temp->next != 0)
prevnode = temp;
temp = temp->next;
if (temp == head)
head = 0;
else
prevnode->next = 0;
free(temp);
void deletepos()
temp = head;
printf("enter pos\n");
scanf("%d", &pos);
temp = temp->next;
i++;
nextnode = temp->next;
temp->next = nextnode->next;
free(nextnode);
void print()
temp = head;
while (temp != 0)
printf("%d->", temp->data);
temp = temp->next;
int main()
int i;
while (1)
printf("\nEnter Choice:\t");
scanf("%d", &i);
switch (i)
case 1:
create();
break;
case 2:
print();
break;
case 3:
insertbeg();
break;
case 4:
insertend();
case 5:
insertpos();
break;
case 6:
deletebeg();
break;
case 7:
deleteend();
break;
case 8:
deletepos();
break;
default:
printf("wrong choice");
break;
return 0;
Program :
#include <stdio.h>
#include<stdlib.h>
struct node
int data;
};
void beginsert();
void lastinsert();
void randominsert();
void begin_delete();
void last_delete();
void random_delete();
void display();
void search();
int choice = 0;
printf("Memansha Choudhary\n1000015482\n");
while (choice != 7)
scanf("%d",&choice);
switch(choice)
case 1:
beginsert();
break;
case 2:
lastinsert();
break;
case 3:
begin_delete();
break;
case 4:
last_delete();
case 5:
search();
break;
case 6:
display();
break;
case 7:
exit(0);
break;
default:
void beginsert()
int item;
if (ptr == NULL)
printf("\nOVERFLOW");
else
scanf("%d", &item);
ptr->data = item;
if (head == NULL)
head = ptr;
ptr->next = head;
else
temp = head;
temp = temp->next;
ptr->next = head;
temp->next = ptr;
head = ptr;
printf("\nnode inserted");
int item;
if (ptr == NULL)
printf("\nOVERFLOW\n");
else
printf("\nEnter Data?\t");
scanf("%d", &item);
ptr->data = item;
if (head == NULL)
head = ptr;
ptr->next = head;
else
temp = head;
temp = temp->next;
temp->next = ptr;
ptr->next = head;
printf("\nnode inserted");
void begin_delete()
if (head == NULL)
printf("\nUNDERFLOW");
head = NULL;
free(head); printf("\
nnode deleted");
ptr = head;
ptr = ptr->next;
ptr->next = head->next;
free(head);
head = ptr->next;
printf("\nnode deleted");
void last_delete()
if (head == NULL)
printf("\nUNDERFLOW");
head = NULL;
free(head); printf("\
nnode deleted");
else
ptr = head;
preptr = ptr;
ptr = ptr->next;
preptr->next = ptr->next;
free(ptr);
printf("\nnode deleted");
void search()
ptr = head;
if (ptr == NULL)
printf("\nEmpty List\n");
else
scanf("%d", &item);
if (head->data == item)
flag = 0;
else
if (ptr->data == item)
flag = 0;
break;
else
flag = 1;
+;
ptr = ptr->next;
if (flag != 0)
void display()
ptr = head;
if (head == NULL)
printf("\nnothing to print");
else
printf("%d->", ptr->data);
ptr = ptr->next;
printf("%d\n", ptr->data);
OUTPUT :
Objective-9 : Write a C program to implement linear doubly linked list and its
various operations such insertion, deletion, searching and traversing.
Program :
#include <stdio.h>
#include <stdlib.h>
struct node
int n;
}*h,*temp,*temp1,*temp2,*temp4;
void insert1();
void insert2();
void insert3();
void traversebeg();
void traverseend(int);
void search();
void delete();
void main()
printf("Memansha Choudhary\
end");
printf("\n 8 - Exit");
while (1)
scanf("%d", &ch);
switch (ch)
case 1:
Memansha 1000015482 BT-CSE F
Choudhary School of
Computing
insert1();
break;
case 2:
insert2();
break;
case 3:
insert3();
break;
case 4:
delete();
break;
case 5:
traversebeg();
break;
case 6:
temp2 = h;
if (temp2 == NULL)
else
traverseend(temp2->n);
case 7:
search();
break;
case 8:
exit(0);
default:
void create()
int data;
temp->prev = NULL;
temp->next = NULL;
scanf("%d", &data);
temp->n = data;
count++;
if (h == NULL)
create();
h = temp;
temp1 = h;
else
create();
temp->next = h;
h->prev = temp;
h = temp;
void insert2()
if (h == NULL)
create();
h = temp;
temp1 = h;
else
create();
temp1->next = temp;
temp->prev = temp1;
temp1 = temp;
void insert3()
int pos, i = 2;
scanf("%d", &pos);
temp2 = h;
return;
return;
create();
h = temp;
temp1 = h;
return;
else
temp2 = temp2->next;
i++;
create();
temp->prev = temp2;
temp->next = temp2->next;
temp2->next->prev = temp;
temp2->next = temp;
void delete()
int i = 1, pos;
scanf("%d", &pos);
temp2 = h;
return;
if (h == NULL)
return;
else
i++;
if (i == 1)
if (temp2->next == NULL)
free(temp2);
temp2 = h = NULL;
return;
if (temp2->next == NULL)
temp2->prev->next = NULL;
free(temp2);
return;
temp2->next->prev = temp2->prev;
if (i != 1)
if (i == 1)
h = temp2->next;
free(temp2);
count--;
void traversebeg()
temp2 = h;
if (temp2 == NULL)
return;
void traverseend(int i)
if (temp2 != NULL)
i = temp2->n;
temp2 = temp2->next;
traverseend(i);
void search()
temp2 = h;
if (temp2 == NULL)
return;
scanf("%d", &data);
if (temp2->n == data)
return;
else
temp2 = temp2->next;
count++;
Program:
#include <stdio.h>
#include <stdlib.h>
struct node
int info;
}*front,*rear,*temp,*front1;
int frontelement();
void deq();
void empty();
void display();
void create();
void queuesize();
int count = 0;
void main()
printf("Memansha Choudhary\n1000015482\n");
printf("\n 1 - Enque");
printf("\n 2 - Deque");
printf("\n 4 - Empty");
n 6 - Display"); printf("\n 7 -
while (1)
scanf("%d", &ch);
switch (ch)
case 1:
scanf("%d", &no);
enq(no);
case 2:
deq();
break;
case 3:
e = frontelement();
if (e != 0)
else
break;
case 4:
empty();
break;
case 5:
exit(0);
case 6:
display();
break;
case 7:
queuesize();
break;
default:
break;
void create()
void queuesize()
if (rear == NULL)
rear->ptr = NULL;
rear->info = data;
front = rear;
else {
rear->ptr = temp;
temp->info = data;
temp->ptr = NULL;
rear = temp;
count++;
void display()
front1 = front;
printf("Queue is empty");
return;
front1 = front1->ptr;
if (front1 == rear)
printf("%d", front1->info);
void deq()
front1 = front;
if (front1 == NULL)
return;
else
if (front1->ptr != NULL)
front1 = front1->ptr;
free(front);
front = front1;
else
free(front);
front = NULL;
rear = NULL;
count--;
int frontelement()
return(front->info);
else
return 0;
void empty()
else
Program :
#include<stdio.h>
#include<stdlib.h>
struct node
{ int data;
}*head,*top,*New,*temp;
int item;
void pop();
void traverse();
int main()
int choice;
printf("Memansha Choudhary\
n1000015482\n"); printf("\n1.Push\
n2.Pop\n3.Traverse\n"); printf("\nEnter
case 1:
scanf("%d",&item);
printf("\n%d is pushed.\n",item);
push(item);
break;
case 2:
pop();
break;
case 3:
traverse();
break;
default:
printf("\nInvalid Input\n");
break;
return main();
if(New==NULL)
else
New->data=item;
New->next=NULL;
if(top==NULL)
top=New;
else
New->next=top;
top=New;
void pop()
printf("\nStack underflow.\n");
else
temp=top;
top=top->next;
printf("\n%d is popped.\n",temp->data);
free(temp);
void traverse()
if(top==NULL)
printf("\nStack underflow.\n");
else
temp=top;
printf(" %d->",temp->data);
temp=temp->next;
Program:
#include <stdio.h>
#include <stdlib.h>
struct node
int data;
};
t->data = val;
if (opt == 1)
n->left = t;
n->right = t;
if (opt == 1)
else
if (t->data > x)
if (t->left == NULL)
ins(t, x, 1);
else
inser(t->left, x);
if (t->right == NULL)
ins(t, x, 2);
else
inser(t->right, x);
else
if (p != NULL)
inorder(p->left); printf("\
n %5d", p->data);
inorder(p->right);
if (p != NULL)
preorder(p->left);
preorder(p->right);
if (p != NULL)
preorder(p->left);
preorder(p->right);
int main()
int op, n;
scanf("%d",&root->data);
printf("Memansha Choudhary\
n1000015482\n"); printf("\n
1.Insertion");
printf("\n 2.Preorder");
printf("\n 3.Inorder");
printf("\n 4.Postorder");
printf("\n 5.Quit");
do
scanf("%d", &op);
switch (op)
case 1:
scanf("%d", &n);
inser(root, n);
break;
case 2:
preorder(root);
break;
case 3:
Memansha 1000015482 BT-CSE F
Choudhary School of
Computing
printf("\n The inorder elements are\t");
inorder(root);
break;
case 4:
postorder(root);
break;
default:
exit(0);
return 0;
Program:
BUBBLE SORT
#include<stdio.h>
int main()
printf("Memansha Choudhary\
for(i=0;i<count;i++)
scanf("%d",&number[i]);
for(i=count-2;i>=0;i--)
for(j=0;j<=i;j++)
if(number[j]>number[j+1])
number[j]=number[j+1];
number[j+1]=temp;
for(i=0;i<count;i++)
printf(" %d",number[i]);
return 0;
OUTPUT
#include <stdio.h>
#include <stdlib.h>
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
i = 0;
j = 0;
k = l;
arr[k] = L[i];
i++;
else {
arr[k] = R[j];
j++;
} k+
+;
arr[k] = L[i];
i++;
k++;
arr[k] = R[j];
j++;
k++;
if (l < r) {
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
int i;
printf("\n");
int main()
scanf("%d",&n);
for(i=0;i<n;i++)
printf("enter element\t");
scanf("%d",&arr[i]);
int arr_size = n;
printArray(arr, arr_size);
printArray(arr, arr_size);
return 0;
Quick Sort:
#include<stdio.h>
if(first<last){
pivot=first;
i=first;
j=last;
while(i<j)
{ while(number[i]<=number[pivot]&&i<las
t)
i++;
Memansha 1000015482 BT-CSE F
Choudhary School of
Computing
while(number[j]>number[pivot])
j--;
if(i<j)
{ temp=number[i];
number[i]=number[j];
number[j]=temp;
temp=number[pivot];
number[pivot]=number[j];
number[j]=temp;
quicksort(number,first,j-1);
quicksort(number,j+1,last);
int main(){
printf("Memansha Choudhary\
elements\t"); scanf("%d",&count);
for(i=0;i<count;i++)
scanf("%d",&number[i]);
quicksort(number,0,count-1);
for(i=0;i<count;i++)
printf(" %d",number[i]);
return 0;
OUTPUT: