1) Merge Sort
#include <iostream>
using namespace std;
void merge(int a[], int l, int m, int r) {
int i = l, j = m + 1, k = 0, temp[r - l + 1];
while (i <= m && j <= r) temp[k++] = (a[i] < a[j]) ? a[i++] : a[j++];
while (i <= m) temp[k++] = a[i++];
while (j <= r) temp[k++] = a[j++];
for (i = l, k = 0; i <= r; i++) a[i] = temp[k++];
void mergeSort(int a[], int l, int r) {
if (l < r) {
int m = (l + r) / 2;
mergeSort(a, l, m);
mergeSort(a, m + 1, r);
merge(a, l, m, r);
int main() {
int a[] = {5, 3, 8, 6, 2};
mergeSort(a, 0, 4);
for (int i : a) cout << i << ' ';
2) Single Linked List Reverse Traversal
#include <iostream>
using namespace std;
struct Node { int data; Node* next; };
void reversePrint(Node* head) {
if (!head) return;
reversePrint(head->next);
cout << head->data << ' ';
void push(Node*& head, int data) {
Node* newNode = new Node{data, head};
head = newNode;
int main() {
Node* head = nullptr;
push(head, 1); push(head, 2); push(head, 3);
reversePrint(head);
3) Priority Queue using Linked List
#include <iostream>
using namespace std;
struct Node { int data, priority; Node* next; };
void push(Node*& head, int d, int p) {
Node* newNode = new Node{d, p, nullptr};
if (!head || head->priority > p) { newNode->next = head; head = newNode; return; }
Node* temp = head;
while (temp->next && temp->next->priority <= p) temp = temp->next;
newNode->next = temp->next; temp->next = newNode;
int pop(Node*& head) { int d = head->data; head = head->next; return d; }
int main() {
Node* pq = nullptr;
push(pq, 10, 2); push(pq, 5, 1); push(pq, 20, 3);
while (pq) cout << pop(pq) << ' ';
4) BST Pre-order and Post-order Traversal
#include <iostream>
using namespace std;
struct Node { int data; Node *left, *right; };
void preorder(Node* root) { if (!root) return; cout << root->data << ' ';
preorder(root->left); preorder(root->right); }
void postorder(Node* root) { if (!root) return; postorder(root->left);
postorder(root->right); cout << root->data << ' '; }
Node* newNode(int data) { return new Node{data, nullptr, nullptr}; }
int main() {
Node* root = newNode(1);
root->left = newNode(2); root->right = newNode(3);
preorder(root); cout << endl; postorder(root);
5) Selection Sort for Array of Strings
#include <iostream>
#include <string>
using namespace std;
void selectionSort(string arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int minIdx = i;
for (int j = i + 1; j < n; j++)
if (arr[j] < arr[minIdx]) minIdx = j;
swap(arr[i], arr[minIdx]);
int main() {
string arr[] = {"apple", "orange", "banana"};
selectionSort(arr, 3);
for (string s : arr) cout << s << ' ';