Josif_tepe

Untitled

Sep 9th, 2025
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.96 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. const int MAX_SIZE = 100;
  4. struct Queue {
  5.     int a[MAX_SIZE];
  6.     int S, E;
  7.    
  8.     void init() {
  9.         S = 0;
  10.         E = -1;
  11.     }
  12.    
  13.     bool isFull() {
  14.         if(E == MAX_SIZE - 1) {
  15.             return true;
  16.         }
  17.         else {
  18.             return false;
  19.         }
  20.     }
  21.    
  22.     bool isEmpty() {
  23.         if(E == -1) {
  24.             return true;
  25.         }
  26.         else {
  27.             return false;
  28.         }
  29.     }
  30.    
  31.     void push(int x) {
  32.         if(isFull()) {
  33.             cout << "queue overflow" << endl;
  34.             exit(-1);
  35.         }
  36.         E++;
  37.         a[E] = x;
  38.     }
  39.    
  40.     int front() {
  41.         if(isEmpty()) {
  42.             cout << "prazen red" << endl;
  43.             exit(-1);
  44.         }
  45.         return a[S];
  46.     }
  47.    
  48.     int pop() {
  49.         if(isEmpty()) {
  50.             cout << "prazen red" << endl;
  51.             exit(-1);
  52.         }
  53.        
  54.         int x = a[S];
  55.        
  56.         for(int i = 0; i < E; i++) {
  57.             a[i] = a[i + 1];
  58.         }
  59.         E--;
  60.        
  61.         return x;
  62.     }
  63.    
  64.    
  65. };
  66.  
  67. struct node {
  68.     int info;
  69.     node *next;
  70. };
  71.  
  72. struct SinglyLinkedList {
  73.     node * head;
  74.  
  75.     void init() {
  76.         head = NULL;
  77.     }
  78.  
  79.     void insertFront(int x) {
  80.         node * new_node = new node;
  81.         new_node->info = x;
  82.         new_node->next = NULL;
  83.  
  84.         if(head == NULL) {
  85.             head = new_node;
  86.         }
  87.         else {
  88.             new_node->next = head;
  89.             head = new_node;
  90.         }
  91.     }
  92.  
  93.  
  94.     void insertBack(int x) {
  95.         node * new_node = new node;
  96.         new_node->info = x;
  97.         new_node->next = NULL;
  98.  
  99.         if(head == NULL) {
  100.             head = new_node;
  101.         }
  102.         else {
  103.             node * tmp = head;
  104.             while(tmp->next != NULL) {
  105.                 tmp = tmp->next;
  106.             }
  107.             tmp->next = new_node;
  108.         }
  109.     }
  110.  
  111.     void deleteFront() {
  112.         if(head != NULL) {
  113.             if(head->next == NULL) {
  114.                 delete head;
  115.                 head = NULL;
  116.             }
  117.             else {
  118.                 node * tmp = head;
  119.                 head = head->next;
  120.                 delete tmp;
  121.             }
  122.         }
  123.     }
  124.  
  125.     void deleteBack() {
  126.         if(head != NULL) {
  127.             if(head->next == NULL) {
  128.                 delete head;
  129.                 head = NULL;
  130.             }
  131.             else {
  132.                 node * tmp = head;
  133.                 while(tmp->next->next != NULL) {
  134.                     tmp = tmp->next;
  135.                 }
  136.                 delete tmp->next;
  137.                 tmp->next = NULL;
  138.             }
  139.         }
  140.     }
  141.  
  142.     void deleteAll() {
  143.         while(head != NULL) {
  144.             deleteFront();
  145.         }
  146.     }
  147.  
  148.     void deleteNode(int x) {
  149.         if(head != NULL) {
  150.             if(head->info == x) {
  151.                 deleteFront();
  152.             }
  153.             else {
  154.                 node * tmp = head;
  155.                 node * prev = NULL;
  156.  
  157.                 while(tmp != NULL && tmp->info != x) {
  158.                     prev = tmp;
  159.                     tmp = tmp->next;
  160.                 }
  161.  
  162.                 prev->next = tmp->next;
  163.                 delete tmp;
  164.             }
  165.         }
  166.     }
  167.  
  168.     void deleteNode(node * x) {
  169.         if(head != NULL) {
  170.             if(head == x) {
  171.                 deleteFront();
  172.             }
  173.             else {
  174.                 node * tmp = head;
  175.                 node * prev = NULL;
  176.  
  177.                 while(tmp != NULL && tmp != x) {
  178.                     prev = tmp;
  179.                     tmp = tmp->next;
  180.                 }
  181.  
  182.                 prev->next = tmp->next;
  183.                 delete tmp;
  184.             }
  185.         }
  186.     }
  187.  
  188.     void print() {
  189.         node * tmp = head;
  190.         while(tmp != NULL) {
  191.             cout << tmp->info << " --> ";
  192.             tmp = tmp->next;
  193.         }
  194.         cout << endl;
  195.     }
  196.  
  197.  
  198. };
  199.  
  200. void funkcija(Queue & red, SinglyLinkedList & sl1, SinglyLinkedList & sl2) {
  201.     while(red.isEmpty() == false) {
  202.         int x = red.front();
  203.         red.pop();
  204.        
  205.         int brojac = 1;
  206.         while(red.isEmpty() == false && red.front() == x) {
  207.             red.pop();
  208.             brojac++;
  209.         }
  210.        
  211.         if(brojac == 1) {
  212.             sl1.insertBack(x);
  213.         }
  214.         else {
  215.             for(int i = 0; i < brojac - 1; i++) {
  216.                 sl2.insertBack(x);
  217.             }
  218.             sl1.insertBack(x);
  219.         }
  220.        
  221.     }
  222.    
  223.     sl1.print();
  224.     sl2.print();
  225. }
  226.  
  227.  int main() {
  228.      SinglyLinkedList sl1, sl2;
  229.      sl1.init();
  230.  
  231.      Queue red;
  232.      red.init();
  233.      int n;
  234.      cin >> n;
  235.      for(int i = 0; i < n; i++) {
  236.          int x;
  237.          cin >> x;
  238.          red.push(x);
  239.      }
  240.  
  241.      sl2.init();
  242.      
  243.      
  244.      funkcija(red, sl1, sl2);
  245.     return 0;
  246. }
  247. /*
  248.  18
  249.  113  83  83  119  85  85  101  67  67  67  114  69  69  116  83  83  83  121
  250.  
  251.  **/
  252.  
Advertisement
Add Comment
Please, Sign In to add comment