Implementation of Core Data Structures and Algorithms

Linear List Implementations

Array-Based Sequence

template <typename T>
class Sequence {
private:
    T* data;
    int capacity;
    int count;
    int current;
public:
    Sequence(int size) : capacity(size), count(0), current(0) {
        data = new T[capacity];
    }

    ~Sequence() {
        delete[] data;
    }

    void insert(T value) {
        if (count >= capacity) return;
        for (int i = count; i > current; i--)
            data[i] = data[i-1];
        data[current] = value;
        count++;
    }

    void append(T value) {
        if (count >= capacity) return;
        data[count++] = value;
    }

    void remove() {
        if (current < 0 || current >= count) return;
        for (int i = current; i < count-1; i++)
            data[i] = data[i+1];
        count--;
    }

    void reposition(int pos) {
        if (pos >= 0 && pos < count) current = pos;
    }

    T getCurrent() {
        return data[current];
    }
};

Linked List Sorting

template <typename T>
class LinkedList {
private:
    struct Node {
        T value;
        Node* next;
        Node(T v) : value(v), next(nullptr) {}
    };
    Node* head;
public:
    void sort() {
        Node* outer = head;
        while (outer) {
            Node* inner = outer->next;
            Node* minNode = outer;
            while (inner) {
                if (inner->value < minNode->value) 
                    minNode = inner;
                inner = inner->next;
            }
            T temp = outer->value;
            outer->value = minNode->value;
            minNode->value = temp;
            outer = outer->next;
        }
    }
};

Binary Tree Structures

Tree Node Implementation

template <typename T>
class TreeNode {
private:
    T element;
    TreeNode* left;
    TreeNode* right;
public:
    TreeNode(T e) : element(e), left(nullptr), right(nullptr) {}
    void setChildren(TreeNode* l, TreeNode* r) {
        left = l;
        right = r;
    }
    bool isLeaf() {
        return !left && !right;
    }
};

Tree Traversal Operations

template <typename T>
class Tree {
private:
    TreeNode<T>* root;
public:
    void levelOrder() {
        queue<TreeNode<T>*> q;
        if (root) q.push(root);
        while (!q.empty()) {
            TreeNode<T>* node = q.front();
            q.pop();
            cout << node->getElement() << ' ';
            if (node->getLeft()) q.push(node->getLeft());
            if (node->getRight()) q.push(node->getRight());
        }
    }

    int height(TreeNode<T>* node) {
        if (!node) return 0;
        return max(height(node->getLeft()), 
                  height(node->getRight())) + 1;
    }
};

Binary Search Tree Range Query

template <typename T>
class SearchTree {
private:
    struct Node {
        T data;
        Node* left;
        Node* right;
        Node(T d) : data(d), left(nullptr), right(nullptr) {}
    };
    Node* root;
public:
    void findRange(T low, T high) {
        traverseRange(root, low, high);
    }

    void traverseRange(Node* node, T low, T high) {
        if (!node) return;
        if (node->data >= low && node->data <= high) {
            traverseRange(node->left, low, high);
            cout << node->data << ' ';
            traverseRange(node->right, low, high);
        }
        else if (node->data < low) 
            traverseRange(node->right, low, high);
        else 
            traverseRange(node->left, low, high);
    }
};

Heap and Encoding Structures

Priority Heap Implementation

template <typename T>
class PriorityHeap {
private:
    vector<T> heap;
    void sink(int pos) {
        while (pos*2+1 < heap.size()) {
            int child = pos*2+1;
            if (child+1 < heap.size() && heap[child+1] > heap[child])
                child++;
            if (heap[pos] >= heap[child]) break;
            swap(heap[pos], heap[child]);
            pos = child;
        }
    }
public:
    void buildHeap() {
        for (int i = heap.size()/2; i >= 0; i--)
            sink(i);
    }

    T extractMax() {
        T max = heap[0];
        heap[0] = heap.back();
        heap.pop_back();
        sink(0);
        return max;
    }
};

Huffman Coding Implementation

struct HuffNode {
    int frequency;
    char symbol;
    int left, right, parent;
};

class HuffmanCoder {
private:
    vector<HuffNode> tree;
public:
    void generateCodes() {
        for (int i = 0; i < leafCount; i++) {
            string code = "";
            int current = i;
            while (tree[current].parent != -1) {
                int parent = tree[current].parent;
                if (current == tree[parent].left)
                    code = "0" + code;
                else
                    code = "1" + code;
                current = parent;
            }
            cout << tree[i].symbol << ": " << code << endl;
        }
    }
};

Tags: ArraySequence linkedlist BinaryTree BinarySearchTree MaxHeap

Posted on Fri, 14 Aug 2026 16:30:11 +0000 by ben2468