Ladizzz

SAOD Lab 3 Var 4

Oct 23rd, 2021
571
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. struct person {
  7.     string name;
  8.     string surname;
  9.     string secondname;
  10. };
  11.  
  12. struct list_element
  13. {
  14.     person person;
  15.     list_element* next;
  16.     list_element* prev;
  17. };
  18.  
  19. struct list_element* init(person input)  // а- значение первого узла
  20. {
  21.     struct list_element* temp = new list_element;
  22.     // выделение памяти под корень списка
  23.     temp->person = input;
  24.     temp->next = temp; // указатель на следующий узел
  25.     temp->prev = temp; // указатель на предыдущий узел
  26.     return temp;
  27. }
  28.  
  29. struct list_element* addelem(list_element* lst, person input)
  30. {
  31.     struct list_element *p;
  32.     struct list_element *temp = new list_element;
  33.     p = lst->next; // сохранение указателя на следующий узел
  34.     lst->next = temp; // предыдущий узел указывает на создаваемый
  35.     temp->person = input;
  36.     temp->next = p; // созданный узел указывает на следующий узел
  37.     temp->prev = lst; // созданный узел указывает на предыдущий узел
  38.     p->prev = temp;
  39.     return temp;
  40. }
  41.  
  42. void show(list_element* lst)
  43. {
  44.     list_element* p;
  45.     p = lst;
  46.     do {
  47.         cout << "Адрес:" << p << "   Информация:" << p->person.name << " " << p->person.surname << " "
  48.             << p->person.secondname
  49.             << "   Адрес предыдущего:" << p->prev << "   Адрес следующего:" << p->next << endl;
  50.         p = p->prev;  // переход к предыдущему узлу
  51.     } while (p != lst); // условие окончания обхода
  52. }
  53.  
  54. string reverse(string text) {
  55.     string temp;
  56.     for (int i = text.length() - 1; i >= 0; i--)
  57.         temp += text[i];
  58.     return temp;
  59. }
  60.  
  61. void reverse_list(list_element* lst) {
  62.     list_element* p;
  63.     p = lst;
  64.     do {
  65.         p->person.name = reverse(p->person.name);
  66.         p->person.surname = reverse(p->person.surname);
  67.         p = p->prev;  // переход к предыдущему узлу
  68.     } while (p != lst); // условие окончания обхода
  69. }
  70.  
  71. int main()
  72. {
  73.     setlocale(LC_ALL, "Russian");
  74.  
  75.     person in;
  76.     list_element* list = nullptr;
  77.  
  78.     int num;
  79.     cout << "Введите количество человек: ";
  80.     cin >> num;
  81.  
  82.     for (int i = 0; i < num; i++) {
  83.  
  84.         cout << "Введите информацию про " << i + 1 << " человека" << endl;
  85.         cout << "Имя: ";
  86.         cin >> in.name;
  87.         cout << "Фамилия: ";
  88.         cin >> in.surname;
  89.         cout << "Отчество: ";
  90.         cin >> in.secondname;
  91.  
  92.         if (i == 0)
  93.             list = init(in);
  94.         else
  95.             list = addelem(list, in);
  96.         cout << "\n";
  97.     }
  98.  
  99.     show(list);
  100.     reverse_list(list);
  101.     cout << "\nПосле переворота:\n";
  102.     show(list);
  103. }
RAW Paste Data