gashink_t

многосвязные списки (функци) лаба 16

Apr 19th, 2020
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.70 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <iostream>
  4. #define list struct spisok
  5. using namespace std;
  6.  
  7. list
  8. {
  9.     list *next;// следущий элемент списка
  10.     int data;// данные
  11.     list *null_element; // указатель на выделенный элемент
  12. };
  13.  
  14.  
  15. list *create(int data); // инициализация списка
  16. list *get_last(list* head); // поиск последнего элемента списка
  17. void add(list* head, int data); // добавление нового элемента
  18. void print(list* head); //вывод списка на экран
  19. void point(list* head); //присваивание полям "null_element" указатель на последний элемент спискa
  20. void print2(list* head); // вывод списка на экран с содержанием поля "null_element"
  21. void del_list(list* head);// удаление списка
  22.    
  23. int main() {
  24.     int a,c=1,n;
  25.     cout << "Enter a first element: " << endl;
  26.     cin >> a;
  27.     n = 1;
  28.     list* s = create(a); // голова списка
  29.     while (c) {
  30.         cout << "Do you want to add a new element?Yea(1)/No(0)" << endl;
  31.         cin >> c;
  32.         if (c != 0) {
  33.             cout << "Enter a next element: " << endl;
  34.             cin >> a;
  35.             add(s, a);
  36.             n++;
  37.         }
  38.     }
  39.     print(s);
  40.     cout << "\nNumber of elements in list N = " << n << endl;
  41.     point(s);
  42.     print2(s);
  43.     del_list(s);
  44.     return 0;
  45. }
  46.  
  47. void add(list* head,int data)
  48. {
  49.     list* s = get_last(head);
  50.     list* t = new list;
  51.     t->data = data;
  52.     t->next = NULL;
  53.     t->null_element = NULL;
  54.     s->next = t;
  55. }
  56.  
  57. void print(list* head)
  58. {
  59.     list* t = head;
  60.     while (t != NULL) {
  61.         cout << t->data << " -> ";
  62.         t = t->next;
  63.     }
  64. }
  65.  
  66. void point(list* head)
  67. {
  68.     list* t = head;
  69.     list* last = get_last(head);
  70.     while (t->next != NULL) {
  71.         t->null_element = last;
  72.         t = t->next;
  73.     }
  74. }
  75.  
  76. void print2(list* head)
  77. {
  78.     list* t = head;
  79.     while (t->next != NULL) {
  80.         cout << t->data << " -> " << t->null_element->data;
  81.         cout << "\n|\n";
  82.         t = t->next;
  83.     }
  84.     cout << t->data << endl;
  85. }
  86.  
  87. void del_list(list* head)
  88. {
  89.     while (head != NULL) {
  90.         list* t = head;
  91.         head = head->next;
  92.         free(t);
  93.     }
  94. }
  95.  
  96. list* create(int data)
  97. {
  98.     list* head = new list;
  99.     head->data = data;
  100.     head->next = NULL;
  101.     head->null_element = NULL;
  102.     return head;
  103. }
  104.  
  105. list* get_last(list* head)
  106. {
  107.      if (head == 0) {
  108.          return NULL;
  109.      }
  110.      while (head->next) {
  111.          head = head->next;
  112.      }
  113.      return head;
  114. }
Add Comment
Please, Sign In to add comment