Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.30 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <iostream>
  3. #ifndef __list
  4. #define __list
  5.  
  6. template <class T> class MyList
  7. {
  8. struct Element
  9. {
  10. T data; // данные элемента
  11. Element *next; // указатель на следующий элемент списка
  12. Element *prev; // указатель на предыдущий элемент списка
  13. };
  14.  
  15. private:
  16. Element *Head; // указатель первый добавленный элемент
  17. Element *Curr; // указатель на текущий элемент
  18.  
  19. public:
  20. int length;
  21. MyList();
  22. ~MyList();
  23. int isNoEmpty();
  24. void push(T data);
  25. void loop();
  26. };
  27.  
  28. template <class T>
  29. MyList<T>::MyList() {
  30. this->Head = NULL;
  31. this->Curr = NULL;
  32. this->length = 0;
  33. };
  34.  
  35. template <class T> MyList<T>::~MyList() {
  36.  
  37. };
  38.  
  39. template <class T> int MyList<T>::isNoEmpty()
  40. {
  41. if (Curr==NULL ) // если текущая позиция имеет нулевое значение
  42. return 0; // вернуть "ложь"
  43. else // иначе
  44. return 1; // вернуть "истина"
  45. }
  46.  
  47. template <class T> void MyList<T>::push (T data)
  48. {
  49. Element *inserted; // создать новый указатель на элемент
  50. inserted= new Element; // выделить память под элемент
  51. inserted->data=data; // установить входной параметр в поле данных элемента
  52. if (!isNoEmpty()) // если список пуст
  53. {
  54. Head=inserted; // установить указатель первого элемента на новый элемент
  55. Curr=inserted; // установить указатель текущего элемента на новый элемент
  56. Curr->next=inserted; // установить указатель следующего элемента на новый элемент
  57. Curr->prev=inserted; // установить указатель предыдущего элемента на новый элемент
  58. }
  59. else // если список не пуст
  60. {
  61. inserted->next=Curr->next; // перенаправляем указатель следующего элемента в добавляемом
  62. inserted->next->prev=inserted; // перенаправляем указатель следующего элемента на добавляемый
  63. Curr->next=inserted; // перенаправляем следующий указатель на добавляемый
  64. inserted->prev=Curr; // перенаправляем предыдущий добавляемого на текущий
  65. }
  66. length++; // увеличиваем количество элементов в списке
  67. Curr=inserted; // устанавливаем текущий указатель на добавленный
  68. }
  69.  
  70. template <class T> void MyList<T>::loop()
  71. {
  72. if (isNoEmpty())
  73. {
  74. Element *tempCar=Head;
  75. for (int i=0;i<length;i++)
  76. {
  77. std::cout << tempCar->data <<" ";
  78. tempCar=tempCar->next ;
  79. }
  80. std::cout << "\n";
  81. }
  82. else // если список пуст
  83. std::cout<< "List is empty\n";
  84. }
  85.  
  86.  
  87. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement