Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
C++ program to implement Run Length Encoding using Linked Lists
In this tutorial, we will be discussing a program to implement Run Length Encoding using Linked Lists.
For this we will be given with a linked list. OUr task is too encode the elements of the Linked List using Run Length Encoding.
For example, if the elements of the linked list are “a->a->a->a->a” then in run length encoding they will be replaced by “a → 5”.
Example
#include <bits/stdc++.h>
using namespace std;
//structuring linked list node
struct Node {
char data;
struct Node* next;
};
//creating a new node
Node* newNode(char data){
Node* temp = new Node;
temp->data = data;
temp->next = NULL;
return temp;
}
//adding nodes to the list
void add_node(struct Node* head_ref, char new_data){
struct Node* new_node = newNode(new_data);
struct Node* last = head_ref;
if (head_ref == NULL) {
head_ref = new_node;
return;
}
while (last->next != NULL)
last = last->next;
last->next = new_node;
return;
}
void print_llist(Node* node){
while (node != NULL) {
cout << node->data << " ";
node = node->next;
}
}
//encoding the given list
void llist_encode(Node* head){
Node* p = head;
Node* temp = newNode(p->data);
char c = p->data;
p = p->next;
int count = 1;
while (p != NULL) {
char x = p->data;
if (c == x)
count++;
else {
if (count > 1) {
if (count > 9)
add_node(temp, '0' + (count / 10));
add_node(temp, '0' + (count % 10));
}
count = 1;
add_node(temp, x);
c = x;
}
p = p->next;
}
if (count != 0)
add_node(temp, '0' + count);
print_llist(temp);
}
int main(){
Node* head = newNode('a');
head->next = newNode('a');
head->next->next = newNode('b');
head->next->next->next = newNode('b');
head->next->next->next->next = newNode('r');
head->next->next->next->next->next = newNode('r');
llist_encode(head);
return 0;
}
Output
a 2 b 2 r 2
Advertisements