vadimk772336

Untitled

Oct 25th, 2021 (edited)
764
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. using namespace std;
  5. struct list_segments;
  6. struct heap_elements
  7. {
  8.    
  9.     int l;
  10.     int r;
  11.     list_segments* to_list; //Указатель на себя в списке отрезков.
  12. };
  13.  
  14.  
  15. struct list_segments
  16. { //Структура отрезка - элемента списка отрезок
  17.    
  18.     int l;
  19.     int r;
  20.     int status; // Но лучше просто считать это элементов класса и делать del по указателю
  21.     struct list_segments* next;
  22.     struct list_segments* prev;
  23.     int to_heap; //Указатель на себя в куче (элемент структуры heap_elements)
  24. };
  25.  
  26. class list2
  27. {
  28.     struct list_segments * Head, * Tail;
  29.     struct list_segments* element;
  30.     int Count;
  31.  
  32. public:
  33.     list2(); // конструктор кучи
  34.     //list2(int, int, int, struct list_segments*, struct list_segments*,int); // конструктор кучи
  35.     void addelem(int, int, int, list_segments*, int);
  36.     void deelem(list_segments*);
  37.     void Print();
  38.     void AddHead(int,int,int,int);
  39.     list_segments* ret();
  40.     // void out(); // вывод элементов кучи в форме массива
  41. };
  42.  
  43. list2::list2()
  44. {
  45.    // Изначально список пуст
  46.    Head = Tail = NULL;
  47.    Count = 0;
  48. }
  49. void list2::AddHead(int l,int r,int status,int to_heap)
  50. {
  51.    // новый элемент
  52.    list_segments * temp = new list_segments;
  53.  
  54.    // Предыдущего нет
  55.    temp->prev = 0;
  56.    // Заполняем данные
  57.    temp->l = l;
  58.    temp->r = r;
  59.    temp->status = status;
  60.    // Следующий - бывшая голова
  61.    temp->next = Head;
  62.  
  63.    // Если элементы есть?
  64.    if(Head != 0)
  65.       Head->prev = temp;
  66.  
  67.    // Если элемент первый, то он одновременно и голова и хвост
  68.    if(Count == 0)
  69.       Head = Tail = temp;
  70.    else
  71.       // иначе новый элемент - головной
  72.       Head = temp;
  73.  
  74.    Count++;
  75. }
  76.  
  77. /*
  78. list2::list2(struct list_segments* segment,int l, int r, int status, struct list_segments* next, struct list_segments* prev,
  79.     int to_heap)
  80. {
  81.     segment = new list_segments;
  82.     segment.l = l;
  83.     segment.r = r;
  84.     segment.status = status;
  85.     segment.next = next;
  86.     segment.prev = prev;
  87.     segment.to_heap = to_heap;
  88. }
  89. */
  90.  
  91. void list2::addelem(int l, int r, int status, list_segments* segment, int to_heap)
  92. {
  93.     //struct list_segments* next;
  94.     //struct list_segments* prev;
  95.     //prev = segment;
  96.     //*next = &(segment->next);
  97.     list_segments* segment2 = new list_segments;
  98.     //list2(elem,l, r, status, &(segment->next), &segment, to_heap);
  99.     segment2->l = l;
  100.     segment2->r = r;
  101.     segment2->status = status;
  102.     segment2->next = segment->next;
  103.     segment2->prev = segment;
  104.     segment2->to_heap = to_heap;
  105.     if (segment->next!=NULL)
  106.         segment->next->prev = segment2;
  107.     segment->next = segment2;
  108.     Count++;
  109.  
  110. }
  111. void list2::deelem(list_segments* segment)
  112. {
  113.     if (segment->next!=NULL)
  114.         segment->next->prev = segment->prev;
  115.     if (segment->prev!=NULL)
  116.         segment->prev->next = segment->next;
  117.     else Head = segment->next;    
  118.     delete segment; // или free или любое другое удаление хзхзхз
  119. }
  120. void list2::Print()
  121. {
  122.    // Если в списке присутствуют элементы, то пробегаем по нему
  123.    // и печатаем элементы, начиная с головного
  124.     list_segments * temp = Head;
  125.     cout << "( ";
  126.     while(temp->next != NULL)
  127.     {
  128.         cout << temp->l << ", ";
  129.         temp = temp->next;
  130.     }
  131.  
  132.     cout << temp->l << " )\n";
  133. }
  134. list_segments* list2::ret(){
  135.     return Head;
  136. }
  137. int main()
  138. {
  139.     list2 List;
  140.     list_segments* vlist;
  141.     list_segments* vlist2;
  142.     list_segments* vlist3;
  143.     List.AddHead(1,2,0,0);
  144.     vlist = List.ret();
  145.     List.addelem(3,4,1,vlist,2);
  146.     vlist2 = vlist->next;
  147.     //List.addelem(6,4,1,vlist2,2);
  148.     List.addelem(5,4,1,vlist,2);
  149.     vlist3 = vlist->next;
  150.     List.Print();
  151.     cout<<vlist3->prev->l<<endl;
  152.     List.deelem(vlist);
  153.     if ((vlist3->prev)==NULL){
  154.         cout<<"jj"<<endl;
  155.     }
  156.     //cout<<(vlist3->prev)==NULL<<endl;
  157.     List.Print();
  158.     return 0;
  159. }
  160.  
Add Comment
Please, Sign In to add comment