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;
}
}
};