이 튜토리얼에서는 연결 목록을 사용하여 실행 길이 인코딩을 구현하는 프로그램에 대해 설명합니다.
이를 위해 연결 목록이 제공됩니다. 우리의 작업은 실행 길이 인코딩을 사용하여 연결 목록의 요소를 너무 인코딩합니다.
예를 들어 연결 목록의 요소가 "a->a->a->a->a"인 경우 실행 길이 인코딩에서는 "a → 5"로 대체됩니다.
예시
#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; }
출력
a 2 b 2 r 2