DSC Programs
DSC Programs
DSC Programs
PRACTICAL FILE
Data Structure using C
CSE – 102 P
#include<stdio.h>
void main()
int arr[30],n,i,j,temp;
scanf("%d",&n);
for(i=0;i<n;i++) {
scanf("%d",&arr[i]);
for(i=0;i<n;i++) {
printf("%d\n",arr[i]);
temp=0;
for(i=0;i<n;i++) {
for(j=0;j<n-i;j++) {
if(arr[j]>arr[j+1]) {
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
for(i=0;i<n;i++) {
printf("%d\n",arr[i]);
}
Output :-
Program-2: Program in C to implement insertion sort.
#include<stdio.h>
void main()
int arr[30],i,j,temp,n;
temp=0;
scanf("%d",&n);
for(i=0;i<n;i++) {
scanf("%d",&arr[i]);
for(i=0;i<n;i++) {
printf("%d\n",arr[i]);
for(i=1;i<n;i++) {
temp=arr[i];
j=i-1;
while(temp<=arr[j]) {
arr[j+1]=arr[j];
j=j-1;
arr[j+1]=temp;
for(i=0;i<n;i++) {
printf("%d\n",arr[i]);
}
Output :-
Program-3: Program in C to implement selection sort.
#include<stdio.h>
int i,j,min_index;
for(i=0;i<n-1;i++) {
min_index=i;
for(j=i+1;j<n;j++) {
if(arr[j]<arr[min_index]) {
min_index=j; }
int temp=arr[i];
arr[i]=arr[min_index];
arr[min_index]=temp; }
void main() {
int i;
int my_array[]={37,21,49,11,52,5};
int n=6;
for(i=0;i<n;i++) {
printf("%d\n",my_array[i]);
selection_sort(my_array,n);
printf("sorted array:\n");
for(i=0;i<n;i++) {
printf("%d\n",my_array[i]);
printf("\n");
}
Output :-
Program-4: Program in C to implement quick sort.
#include <stdio.h>
int main() {
int arr[size], i, n;
scanf("%d", &n);
for(i=0;i<n;i++) {
scanf("%d", &arr[i]);
quick_sort(arr, 0, n-1);
for(i=0;i<n;i++) {
right = end;
flag = 0;
while(flag != 1) {
right--;
if(loc==right) {
flag =1;
}
else if(a[loc]>a[right]) {
temp = a[loc];
a[loc] = a[right];
a[right] = temp;
loc = right;
if(flag!=1) {
left++;
if(loc==left) {
flag =1; }
temp = a[loc];
a[loc] = a[left];
a[left] = temp;
loc = left; }
} }
return loc;
int loc;
if(beg<end) {
}
Output :-
Program-5: Program in C to implement merge sort.
#include <stdio.h>
int main() {
int arr[size], i, n;
scanf("%d", &n);
for(i=0;i<n;i++) {
scanf("%d", &arr[i]); }
merge_sort(arr, 0, n-1);
for(i=0;i<n;i++) {
temp[index] = arr[i];
i++; }
else {
temp[index] = arr[j];
j++; }
index++;
if(i>mid) {
while(j<=end) {
int MERGE_SORT ;
MERGE_SORT;
MERGE_SORT;
temp[index] = arr[j];
j++; }
index++;
else {
while(i<=mid) {
temp[index] = arr[i];
i++; }
index++;
for(k=beg;k<index;k++) {
arr[k] = temp[k];
int mid;
if(beg<end) {
mid = (beg+end)/2;
}
Output :-
Program-1: To demonstrate the concept of one dimensional array finding the sum of array
elements .
#include <stdio.h>
int main()
int arr[MAX_SIZE];
int i, n, sum=0;
scanf("%d", &n);
scanf("%d", &arr[i]);
return 0;
}
Output :-
Program-2: To insert an element in an array .
#include <stdio.h>
int main()
scanf("%d", &n);
for(i=0;i<n;i++)
scanf("%d", &arr[i]);
scanf("%d", &num);
printf("\n Enter the position at which the number has to be added :");
scanf("%d", &pos);
for(i=n -1;i>=pos;i--)
arr[i+1] = arr[i];
arr[pos] = num;
n = n+1;
for(i=0;i<n;i++)
return 0;
}
Output :-
Program-3: To perform addition and multiplication of two matrices.
#include <stdio.h>
void add_matrices (int rows, int cols, int matrix1[][cols], int matrix2[][cols], int result[][cols]) {
void multiply_matrices(int rows1, int cols1, int cols2, int matrix1[][cols1], int matrix2[][cols2], int
result[][cols2]) {
int sum;
sum = 0;
result[i][j] = sum; }
printf("%d\t", matrix[i][j]); }
printf("\n");
int main() {
if (cols_a != rows_b) {
printf("Number of columns in matrix A must be equal to the number of rows in matrix B for
multiplication.");
return 1;
scanf("%d", &matrix_a[i][j]);
scanf("%d", &matrix_b[i][j]); }
// Addition
printf("Matrix Addition:\n");
// Multiplication
printf("\nMatrix Multiplication:\n");
return 0;
}
Output :-
Program-4: To perform transpose of a matrices.
#include <stdio.h>
result[j][i] = matrix[i][j]; }
printf("%d\t", matrix[i][j]); }
printf("\n"); }
int main() {
scanf("%d", &matrix[i][j]); } }
printf("Original Matrix:\n");
printf("\nTranspose Matrix:\n");
return 0;
}
Output :-
Program-1: Program to implement stack operations using array.
#include <stdio.h>
#include <stdbool.h>
struct Stack {
int items[MAX_SIZE];
int top; };
s->top = -1; }
if (isFull(s)) {
return; }
s->items[++s->top] = value;
if (isEmpty(s)) {
return -1; }
return s->items[s->top--];
int main() {
initialize(&stack);
while (1) {
printf("\nStack Operations:\n");
printf("1. Push\n");
printf("2. Pop\n");
printf("3. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &value);
push(&stack, value);
break;
case 2:
break;
case 3:
printf("Exiting program.\n");
return 0;
default:
return 0;
}
Output :-
Program-2: Program to evaluate postfix expression using stack.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
struct Stack {
int items[MAX_SIZE];
int top; };
s->top = -1; }
if (isFull(s)) {
exit(EXIT_FAILURE); }
s->items[++s->top] = value; }
if (isEmpty(s)) {
exit(EXIT_FAILURE); }
return s->items[s->top--]; }
initialize(&stack);
else {
switch (exp[i]) {
case '+':
break;
case '-':
break;
case '*':
break;
case '/':
break; }
return pop(&stack);
int main() {
char exp[MAX_SIZE];
return 0;
}
Output :-
Program-3: Program to perform infix to postfix conversion using stack.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
char stack[MAX_SIZE];
if (top == MAX_SIZE - 1) {
printf("Stack Overflow\n");
return; }
stack[++top] = item; }
char pop() {
if (top == -1) {
printf("Stack Underflow\n");
exit(1); }
return stack[top--]; }
if (symbol == '^' || symbol == '*' || symbol == '/' || symbol == '+' || symbol == '-') {
return 1; }
return 0; }
if (symbol == '^') {
return 3; }
return 2; }
return 1; }
else {
return 0; } }
symbol = infix[i];
if (isalnum(symbol)) {
postfix[j++] = symbol;}
push(symbol); }
postfix[j++] = pop(); }
if (top == -1) {
printf("Invalid expression\n");
exit(1); }
pop(); }
else if (isOperator(symbol)) {
postfix[j++] = pop(); }
push(symbol); } }
if (stack[top] == '(') {
printf("Invalid expression\n");
exit(1); }
postfix[j++] = pop(); }
postfix[j] = '\0'; }
int main() {
infixToPostfix(infix, postfix);
return 0; }
Output :-
Program-1: Program to implement queue operations using array.
#include <stdio.h>
struct Queue {
int items[MAX_SIZE];
int front;
int rear;};
queue->front = -1;
queue->rear = -1;}
if (isFull(queue)) {
printf("Queue is full!\n");
return; }
if (isEmpty(queue)) {
queue->front = 0;}
queue->rear++;
queue->items[queue->rear] = value;}
if (isEmpty(queue)) {
printf("Queue is empty!\n");
return -1;}
queue->front = -1;
queue->rear = -1; }
else {
queue->front++;}
return removedItem;}
if (isEmpty(queue)) {
printf("Queue is empty!\n");
return;}
printf("\n");}
int main() {
createQueue(&queue);
do {printf("1. Enqueue\n");
printf("2. Dequeue\n");
printf("3. Display\n");
printf("4. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &element);
enqueue(&queue, element);
break;
case 2:
break;
case 3:
display(&queue);
break;
case 4:
printf("Exiting...\n");
break;
default:
printf("Invalid choice!\n");}
return 0;
}
Output :-
Program-2: Program to implement circular queue using array.
#include <stdio.h>
#define MAX_SIZE 5
struct CircularQueue {
int items[MAX_SIZE];
int front;
int rear;};
queue->front = -1;
queue->rear = -1;}
if (isFull(queue)) {
printf("Queue is full!\n");
return;}
if (queue->front == -1) {
queue->front = 0;}
queue->items[queue->rear] = value;
if (isEmpty(queue)) {
printf("Queue is empty!\n");
return -1;}
if (queue->front == queue->rear) {
queue->front = -1;
queue->rear = -1;}
else {
return removedItem;}
if (isEmpty(queue)) {
printf("Queue is empty!\n");
return; }
else {
printf("\n");}
int main() {
createCircularQueue(&queue);
do {printf("\n1. Enqueue\n");
printf("2. Dequeue\n");
printf("3. Display\n");
printf("4. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &element);
enqueue(&queue, element);
break;
case 2:
break;
case 3:
display(&queue);
break;
case 4:
printf("Exiting...\n");
break;
default:
printf("Invalid choice!\n");}
return 0;}
Output :-
Program-1: Program to perform following operations on singly linked list :
(e) Search the 3rd node of the linked list and print the value of that node.
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
if (newNode == NULL) {
exit(1);}
newNode->data = data;
newNode->next = NULL;
return newNode;}
if (*headRef == NULL) {
*headRef = newNode;
return;}
last = last->next;}
last->next = newNode;}
newNode->next = *headRef;
*headRef = newNode;}
if (*headRef == NULL) {
printf("List is empty\n");
return;}
if ((*headRef)->next == NULL) {
free(*headRef);
*headRef = NULL;
return;}
secondLast = secondLast->next;}
free(secondLast->next);
secondLast->next = NULL;}
int count = 0;
if (count == position) {
return;}
current = current->next;
count++;}
if (current == NULL) {
printf("List is empty\n");
return;}
current = current->next;}
printf("\n");}
int main() {
int data;
scanf("%d", &data);
insertAtEnd(&head, data);}
displayList(head);
scanf("%d", &data);
insertAtBeginning(&head, data);
displayList(head);
char choice;
printf("Do you want to delete the last node of the linked list? (y/n): ");
deleteLastNode(&head);
displayList(head);}
int position;
scanf("%d", &position);
searchAndPrint(head, position);
return 0; }
Output :-
Program-2: Program to implement stack using linked list.
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
if (newNode == NULL) {
exit(1); }
newNode->data = data;
newNode->next = NULL;
return newNode;}
struct Stack {
stack->top = NULL;}
newNode->next = stack->top;
stack->top = newNode;}
if (isEmpty(stack)) {
printf("Stack underflow\n");
return -1; }
free(temp);
return poppedData;}
if (isEmpty(stack)) {
printf("Stack is empty\n");
return;}
current = current->next;}
printf("\n");}
int main() {
initializeStack(&stack);
do { printf("\n1. Push\n");
printf("2. Pop\n");
printf("3. Display\n");
printf("4. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &data);
push(&stack, data);
break;
case 2:
printf("Popped element: %d\n", pop(&stack));
break;
case 3:
displayStack(&stack);
break;
case 4:
printf("Exiting...\n");
break;
default:
printf("Invalid choice!\n");}
return 0;
}
Output :-
Program-3: Program to implement queue using linked list.
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
if (newNode == NULL) {
exit(1);}
newNode->data = data;
newNode->next = NULL;
return newNode;}
struct Queue {
queue->front = NULL;
queue->rear = NULL;}
if (isEmpty(queue)) {
queue->front = newNode;
queue->rear = newNode;
return;}
queue->rear->next = newNode;
queue->rear = newNode;}
int dequeue(struct Queue* queue) {
if (isEmpty(queue)) {
printf("Queue underflow\n");
return -1;}
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;}]
free(temp);
return dequeuedData;}
if (isEmpty(queue)) {
printf("Queue is empty\n");
return;}
current = current->next;}
printf("\n");}
int main() {
initializeQueue(&queue);
do { printf("\n1. Enqueue\n");
printf("2. Dequeue\n");
printf("3. Display\n");
printf("4. Exit\n");
switch (choice) {
case 1:
scanf("%d", &data);
enqueue(&queue, data);
break;
case 2:
break;
case 3:
displayQueue(&queue);
break;
case 4:
printf("Exiting...\n");
break;
default:
printf("Invalid choice!\n");}
return 0;
}
Output :-
Lab – 1
(SEARCHING)