Skip to Content
Semester 4PracticalsData Structure Practicals in C

Data Structure Practicals in C

1. Bubble Sort

Aim: To implement Bubble Sort algorithm in C.

#include <stdio.h> void bubbleSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } void printArray(int arr[], int n) { for (int i = 0; i < n; i++) printf("%d ", arr[i]); printf("\n"); } int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr)/sizeof(arr[0]); bubbleSort(arr, n); printf("Sorted array: \n"); printArray(arr, n); return 0; }

2. Selection Sort

Aim: To implement Selection Sort algorithm in C.

#include <stdio.h> void selectionSort(int arr[], int n) { int i, j, min_idx; for (i = 0; i < n-1; i++) { min_idx = i; for (j = i+1; j < n; j++) if (arr[j] < arr[min_idx]) min_idx = j; int temp = arr[min_idx]; arr[min_idx] = arr[i]; arr[i] = temp; } } void printArray(int arr[], int n) { for (int i=0; i < n; i++) printf("%d ", arr[i]); printf("\n"); } int main() { int arr[] = {64, 25, 12, 22, 11}; int n = sizeof(arr)/sizeof(arr[0]); selectionSort(arr, n); printf("Sorted array: \n"); printArray(arr, n); return 0; }

3. Quick Sort

Aim: To implement Quick Sort algorithm in C.

#include <stdio.h> void swap(int* a, int* b) { int t = *a; *a = *b; *b = t; } int partition (int arr[], int low, int high) { int pivot = arr[high]; int i = (low - 1); for (int j = low; j <= high - 1; j++) { if (arr[j] < pivot) { i++; swap(&arr[i], &arr[j]); } } swap(&arr[i + 1], &arr[high]); return (i + 1); } void quickSort(int arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } } void printArray(int arr[], int size) { for (int i=0; i < size; i++) printf("%d ", arr[i]); printf("\n"); } int main() { int arr[] = {10, 7, 8, 9, 1, 5}; int n = sizeof(arr)/sizeof(arr[0]); quickSort(arr, 0, n-1); printf("Sorted array: \n"); printArray(arr, n); return 0; }

4. Merge Sort

Aim: To implement Merge Sort algorithm in C.

#include <stdio.h> #include <stdlib.h> void merge(int arr[], int l, int m, int r) { int i, j, k; int n1 = m - l + 1; int n2 = r - m; int L[n1], R[n2]; for (i = 0; i < n1; i++) L[i] = arr[l + i]; for (j = 0; j < n2; j++) R[j] = arr[m + 1+ j]; i = 0; j = 0; k = l; while (i < n1 && j < n2) { if (L[i] <= R[j]) arr[k++] = L[i++]; else arr[k++] = R[j++]; } while (i < n1) arr[k++] = L[i++]; while (j < n2) arr[k++] = R[j++]; } void mergeSort(int arr[], int l, int r) { if (l < r) { int m = l+(r-l)/2; mergeSort(arr, l, m); mergeSort(arr, m+1, r); merge(arr, l, m, r); } } void printArray(int A[], int size) { for (int i = 0; i < size; i++) printf("%d ", A[i]); printf("\n"); } int main() { int arr[] = {12, 11, 13, 5, 6, 7}; int arr_size = sizeof(arr)/sizeof(arr[0]); printf("Given array is \n"); printArray(arr, arr_size); mergeSort(arr, 0, arr_size - 1); printf("\nSorted array is \n"); printArray(arr, arr_size); return 0; }

5. Stack Operations

Aim: To implement stack operations (push, pop, display) using array in C.

#include <stdio.h> #define SIZE 100 int stack[SIZE]; int top = -1; void push(int value) { if (top == SIZE - 1) printf("Stack Overflow\n"); else { stack[++top] = value; printf("%d pushed to stack\n", value); } } void pop() { if (top == -1) printf("Stack Underflow\n"); else printf("%d popped from stack\n", stack[top--]); } void display() { if (top == -1) printf("Stack is empty\n"); else { printf("Stack elements: "); for (int i = top; i >= 0; i--) printf("%d ", stack[i]); printf("\n"); } } int main() { push(10); push(20); push(30); display(); pop(); display(); return 0; }

6. Queue Operations

Aim: To implement queue operations (enqueue, dequeue, display) using array in C.

#include <stdio.h> #define SIZE 100 int queue[SIZE]; int front = -1, rear = -1; void enqueue(int value) { if (rear == SIZE - 1) printf("Queue Overflow\n"); else { if (front == -1) front = 0; queue[++rear] = value; printf("%d enqueued to queue\n", value); } } void dequeue() { if (front == -1 || front > rear) printf("Queue Underflow\n"); else printf("%d dequeued from queue\n", queue[front++]); } void display() { if (front == -1 || front > rear) printf("Queue is empty\n"); else { printf("Queue elements: "); for (int i = front; i <= rear; i++) printf("%d ", queue[i]); printf("\n"); } } int main() { enqueue(10); enqueue(20); enqueue(30); display(); dequeue(); display(); return 0; }

Aim: To implement Linear Search and Binary Search in C.

#include <stdio.h> void linearSearch(int arr[], int n, int x) { for (int i = 0; i < n; i++) { if (arr[i] == x) { printf("Linear Search: Element found at index %d\n", i); return; } } printf("Linear Search: Element not found\n"); } int binarySearch(int arr[], int l, int r, int x) { while (l <= r) { int m = l + (r - l) / 2; if (arr[m] == x) return m; if (arr[m] < x) l = m + 1; else r = m - 1; } return -1; } int main() { int arr[] = {2, 4, 10, 20, 40}; int n = sizeof(arr)/sizeof(arr[0]); int x = 10; linearSearch(arr, n, x); int result = binarySearch(arr, 0, n - 1, x); if (result != -1) printf("Binary Search: Element found at index %d\n", result); else printf("Binary Search: Element not found\n"); return 0; }

8. Singly Linked List

Aim: To implement singly linked list operations in C.

#include <stdio.h> #include <stdlib.h> struct Node { int data; struct Node* next; }; void insertEnd(struct Node** head, int data) { struct Node* new_node = (struct Node*) malloc(sizeof(struct Node)); struct Node* last = *head; new_node->data = data; new_node->next = NULL; if (*head == NULL) { *head = new_node; return; } while (last->next != NULL) last = last->next; last->next = new_node; } void display(struct Node* node) { while (node != NULL) { printf("%d -> ", node->data); node = node->next; } printf("NULL\n"); } int main() { struct Node* head = NULL; insertEnd(&head, 10); insertEnd(&head, 20); insertEnd(&head, 30); printf("Linked List: "); display(head); return 0; }

9. Stack using Linked List

Aim: To implement stack using linked list in C.

#include <stdio.h> #include <stdlib.h> struct Node { int data; struct Node* next; }; struct Node* top = NULL; void push(int data) { struct Node* new_node = (struct Node*) malloc(sizeof(struct Node)); new_node->data = data; new_node->next = top; top = new_node; printf("%d pushed to stack\n", data); } void pop() { if (top == NULL) printf("Stack Underflow\n"); else { printf("%d popped from stack\n", top->data); top = top->next; } } void display() { struct Node* temp = top; printf("Stack elements: "); while (temp != NULL) { printf("%d ", temp->data); temp = temp->next; } printf("\n"); } int main() { push(10); push(20); push(30); display(); pop(); display(); return 0; }

10. Queue using Linked List

Aim: To implement queue using linked list in C.

#include <stdio.h> #include <stdlib.h> struct Node { int data; struct Node* next; }; struct Node* front = NULL; struct Node* rear = NULL; void enqueue(int data) { struct Node* new_node = (struct Node*) malloc(sizeof(struct Node)); new_node->data = data; new_node->next = NULL; if (rear == NULL) { front = rear = new_node; return; } rear->next = new_node; rear = new_node; printf("%d enqueued to queue\n", data); } void dequeue() { if (front == NULL) printf("Queue Underflow\n"); else { struct Node* temp = front; front = front->next; if (front == NULL) rear = NULL; printf("%d dequeued from queue\n", temp->data); free(temp); } } void display() { struct Node* temp = front; printf("Queue elements: "); while (temp != NULL) { printf("%d ", temp->data); temp = temp->next; } printf("\n"); } int main() { enqueue(10); enqueue(20); enqueue(30); display(); dequeue(); display(); return 0; }
Last updated on