Advertisement
Guest User

tema2

a guest
Feb 25th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <memory>
  3. #include <string>
  4.  
  5. template<typename T>
  6. struct Node
  7. {
  8.     T value;
  9.     std::shared_ptr<Node<T>> prev, next;
  10. };
  11.  
  12. template <typename T>
  13. class dllist
  14. {
  15. public:
  16.     dllist();
  17.  
  18.     void push_back(T value);
  19.  
  20.     T operator[](size_t index);
  21.  
  22.     size_t size() const;
  23. private:
  24.     size_t _size = 0;
  25.  
  26.     std::shared_ptr<Node<T>> _first, _last;
  27. };
  28.  
  29. template <typename T>
  30. dllist<T>::dllist()
  31. {
  32.    
  33. }
  34.  
  35. template <typename T>
  36. void dllist<T>::push_back(T value)
  37. {
  38.     if (_size == 0)
  39.     {
  40.         _first = _last = std::make_shared<Node<T>>();
  41.         _first->value = value;
  42.     }
  43.     else
  44.     {
  45.         _last->next = std::make_shared<Node<T>>();
  46.         _last->next->prev = _last;
  47.         _last = _last->next;
  48.         _last->value = value;
  49.     }
  50.     _size++;
  51. }
  52.  
  53. template <typename T>
  54. T dllist<T>::operator[](const size_t index)
  55. {
  56.     if (index >= _size || index < 0)
  57.         throw std::out_of_range("List index out of range.");
  58.  
  59.     std::shared_ptr<Node<T>> p;
  60.  
  61.     if (index < _size / 2)
  62.     {
  63.         p = _first;
  64.         for (size_t i = 0; i < index; i++)
  65.         {
  66.             p = p->next;
  67.         }
  68.     }
  69.     else
  70.     {
  71.         p = _last;
  72.         for (int64_t i = _size - 1; i > index; i--)
  73.         {
  74.             p = p->prev;
  75.         }
  76.     }
  77.  
  78.     return p->value;
  79. }
  80.  
  81. template <typename T>
  82. size_t dllist<T>::size() const
  83. {
  84.     return _size;
  85. }
  86.  
  87. int main()
  88. {
  89.     try
  90.     {
  91.         dllist<char> word;
  92.  
  93.         std::string str;
  94.         std::cin >> str;
  95.         for (auto c : str)
  96.         {
  97.             word.push_back(c);
  98.         }
  99.        
  100.         bool bEPalindrom = true;
  101.         for (size_t i = 0; i < word.size() / 2; i++)
  102.         {
  103.             if (word[i] != word[word.size() - 1- i])
  104.             {
  105.                 bEPalindrom = false;
  106.                 break;
  107.             }
  108.         }
  109.  
  110.         if (bEPalindrom)
  111.             std::cout << "E palindrom." << std::endl;
  112.         else
  113.             std::cout << "Nu e palindrom." << std::endl;
  114.     }
  115.     catch (std::exception& e)
  116.     {
  117.         std::cout << e.what() << std::endl;
  118.     }
  119.  
  120.     std::cout << "Press any key to quit...";
  121.     std::getchar(); std::getchar();
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement