Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.56 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "stdint.h"
  3. #include <iostream>
  4.  
  5. template <typename T>
  6. class linked_list_node
  7. {
  8. public:
  9.     linked_list_node* previous;
  10.     linked_list_node* next;
  11.     T value;
  12.  
  13.     linked_list_node(T v, linked_list_node* prev)
  14.     {
  15.         value = v;
  16.         if (prev != nullptr)
  17.         {
  18.             previous = prev;
  19.             previous->next = this;
  20.         }
  21.     }
  22. };
  23.  
  24. template <typename T>
  25. class double_linked_list
  26. {
  27. public:
  28.     linked_list_node<T>* first;
  29.     linked_list_node<T>* last;
  30.  
  31.     double_linked_list()
  32.     {
  33.         first = nullptr;
  34.         last = nullptr;
  35.     }
  36.  
  37.     void add(T val)
  38.     {
  39.         if (first == nullptr)
  40.         {
  41.             first = new linked_list_node<T>(val, nullptr);
  42.             last = first;
  43.         }
  44.         else
  45.             last = new linked_list_node<T>(val, last);
  46.     }
  47.  
  48.     void add_in_order(T val)
  49.     {
  50.         if (first == nullptr)
  51.         {
  52.             first = new linked_list_node<T>(val, nullptr);
  53.             last = first;
  54.         }
  55.         else
  56.         {
  57.             linked_list_node<T>* current = first;
  58.             while (current->next != nullptr && current->next->value < val)
  59.             {
  60.                 current = current->next;
  61.             }
  62.             if (current->next == nullptr)
  63.             {
  64.                 current->next = new linked_list_node<T>(val, current);
  65.                 last = current->next;
  66.             }
  67.             else
  68.             {
  69.                 linked_list_node<T>* next = current->next;
  70.                 current->next->previous = new linked_list_node<T>(val, current);
  71.                 current->next->previous->next = next;
  72.                 current->next = current->next->previous;
  73.             }
  74.         }
  75.     }
  76.  
  77.     bool check_order()
  78.     {
  79.         linked_list_node<T>* current = first;
  80.         while (current != nullptr)
  81.         {
  82.             if (current != first && current->value < current->previous->value)
  83.                 return false;
  84.             current = current->next;
  85.         }
  86.         return true;
  87.     }
  88. };
  89.  
  90. int main()
  91. {
  92.     std::cout << "Unsorted list:\n";
  93.     auto unsorted_list = new double_linked_list<int>();
  94.     unsorted_list->add(0);
  95.     unsorted_list->add(13);
  96.     unsorted_list->add(9);
  97.     unsorted_list->add(255);
  98.     unsorted_list->add(3);
  99.  
  100.     auto ucurrent = unsorted_list->first;
  101.     while (ucurrent != nullptr)
  102.     {
  103.         std::cout << ucurrent->value << " ";
  104.         ucurrent = ucurrent->next;
  105.     }
  106.  
  107.     std::cout << "\n" << (unsorted_list->check_order() ? "Sorted" : "Not sorted") << "\n\n";
  108.    
  109.     std::cout << "Sorted list:\n";
  110.     auto sorted_list = new double_linked_list<int>();
  111.     sorted_list->add_in_order(0);
  112.     sorted_list->add_in_order(13);
  113.     sorted_list->add_in_order(9);
  114.     sorted_list->add_in_order(255);
  115.     sorted_list->add_in_order(3);
  116.  
  117.     auto scurrent = sorted_list->first;
  118.     while (scurrent != nullptr)
  119.     {
  120.         std::cout << scurrent->value << " ";
  121.         scurrent = scurrent->next;
  122.     }
  123.  
  124.     std::cout << "\n" << (sorted_list->check_order() ? "Sorted" : "Not sorted") << "\n\n";
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement