Savelyev_Vyacheslav

Списки вложенные структуры

Jan 17th, 2021 (edited)
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 22.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream> // chtenie faila
  4.  
  5.  
  6. using namespace std;
  7. class Otsenki {
  8.         string fizika;
  9.         string istoriya;
  10.         string informatika;
  11.     friend class List;
  12.         friend class Node;
  13. };
  14. class Node
  15. {
  16.     string FirstName;
  17.     string LastName;
  18.     string N_student;
  19.     Otsenki *OtsenkiPtr = new Otsenki();
  20.     class Node *ptr;
  21.     friend class List;
  22. };
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30. class List
  31. {
  32.     Node *head;
  33.     int count = 0;
  34.     Node* Prev(Node *); // Переход к предыдущему узлу (не интерфейсный метод)
  35. public:
  36.     List() { head = NULL; } // Инициализация списка
  37.     int getCount() { return count; } // Получение количества узлов списка
  38.     bool isEmpty() { return head == NULL; }  // Проверка, пуст ли список
  39.     string getValue2(Node* p) { return p->FirstName; } // Получение значения узла списка
  40.     string getValue3(Node* p) { return p->LastName; } // Получение значения 2го узла списка
  41.     string getValue(Node* p) { return p->N_student; } // Получение значения  узла списка
  42.     string getValue4(Node* p) {  return p->OtsenkiPtr->fizika; }
  43.     string getValue5(Node* p) {  return p->OtsenkiPtr->istoriya; }
  44.     string getValue6(Node* p) { return p->OtsenkiPtr->informatika; }
  45.  
  46.     Node* Add(string, string, string, string, string, string, Node*); // Добавление узла списка
  47.     void setValue(Node *p, int val) { p->FirstName = val; } // Установка значения узла списка
  48.     Node* getFirst() { return head; } // Получение корневого узла списка
  49.     Node* getLast();            // Получение последнего узла списка
  50.     void Clear();               // Очистка списка
  51.     Node* Next(Node *);         // Переход к следующему узлу
  52.    
  53.     Node* Delete(Node*);        // Удаление узла списка
  54.     void Print();               // Вывод значений узлов списка
  55.     void Swap(Node*, Node*);    // Взаимообмен двух узлов
  56.     void String_total_X();              // поиск X
  57.     void String_X(string);              // поиск X
  58.     string reedOfFile(string);
  59.     void Delete_ALL();
  60.     Node* By_value_print();
  61.     int CountElement();
  62.  
  63.     Node* Nomer_s_kontsa_del(); // удален середина по номеру
  64.     Node* Zamena(); // замена
  65.     Node* Zamena_ptr(); // замена по указателю
  66.     Node* HeadToEnd(); // замена местами по указателю первый назад последний вперед
  67.     Node* FILO(); // первый назад
  68.     Node* LIFO(); // последний вперед
  69.     void StekOperation(); // DZ po AIP
  70.  
  71.     Node* Dobav_n_last(string); // добавить в конец
  72.     Node* Dobav_pre_last(); // добавить перед конец
  73.     Node* Dobav_head(string); // добавить перед конец
  74.     Node* Dobav_head_next(); // добавить перед конец
  75.  
  76.     Node* head_del(); // udalit golovu
  77.     Node* head_next_del(); // udalit 2 s golovu
  78.     Node* Delete_end(); // удаляет конец
  79.     Node* Delete_prev_end(); // удален предпоследний
  80.  
  81.     Node* By_value_del(); // udalit po znacheniu
  82.  
  83.    
  84. };
  85.  
  86.  
  87. Node* List::Add(string num3, string num1, string num2, string num4, string num5, string num6, Node* node = NULL)
  88. {
  89.     Node *elem = new Node();
  90.     elem->FirstName = num1;
  91.     elem->LastName = num2;
  92.     elem->N_student = num3;
  93.     elem->OtsenkiPtr->fizika = num4;
  94.     elem->OtsenkiPtr->istoriya = num5;
  95.     elem->OtsenkiPtr->informatika = num6;
  96.     count++;
  97.     if (node == NULL) // Добавление нового корня
  98.     {
  99.         if (head == NULL) {
  100.             elem->ptr = NULL;
  101.             head = elem;
  102.         }
  103.         else {
  104.             elem->ptr = head;
  105.             head = elem;
  106.         }
  107.         return elem;
  108.     }
  109.     elem->ptr = node->ptr; // Добавление узла после текущего
  110.     node->ptr = elem;
  111.     return elem;
  112. }
  113.  
  114. Node* List::Delete(Node* node)
  115. {
  116.     if (node == NULL) { return NULL; } // В списке нет узлов
  117.     count--;
  118.     if (node == head)   // Удаление корневого узла
  119.     {
  120.         head = node->ptr;
  121.         delete node;
  122.         return head;
  123.     }
  124.     Node* prev = Prev(node); // Удаление промежуточного узла
  125.     prev->ptr = node->ptr;
  126.     delete node;
  127.     return prev;
  128. }
  129. ////////////////
  130. Node* List::Delete_end()
  131. {
  132.     Node *temp = NULL;
  133.     Node *head2 = head;
  134.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  135.     count--;
  136.     while (head2->ptr != NULL) {  // перемотка на последние указатели
  137.         temp = head2;
  138.         head2 = head2->ptr;
  139.     }
  140.     if (temp) {
  141.         //<udalenie poslednego>
  142.         temp->ptr = NULL;
  143.         delete head2;
  144.         //< /udalenie poslednego>
  145.     }
  146.     cout << temp->FirstName << " - " << temp << " - " << temp->ptr << endl;
  147. }
  148. ////////////////
  149. ////////////////
  150. Node* List::Dobav_head(string value = "ADD-TEST")
  151. {
  152.     Node *temp = NULL;
  153.     Node *head2 = head;
  154.     //Node *uzel = head;
  155.     //cout << "add to head: ";
  156.     cin >> value;
  157.     //<opation>
  158.     Node *elem2 = new Node();
  159.     elem2->FirstName = value;
  160.     elem2->ptr = head2;
  161.     head = elem2;
  162.     //</opation>
  163.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  164.     count++;
  165. }
  166. ////////////////
  167. ////////////////
  168. Node* List::Dobav_head_next()
  169. {
  170.     Node *t1 = NULL;
  171.     Node *t2 = head;
  172.     t1 = head;
  173.     t2 = t2->ptr;
  174.     //<operation>
  175.     Node *elem2 = new Node();
  176.     elem2->FirstName = "88";
  177.     t1->ptr = elem2;
  178.     elem2->ptr = t2;
  179.     //<operation>
  180.     if (t2 == NULL) { return NULL; } // В списке нет узлов
  181.     count++;
  182. }
  183. ////////////////
  184. ////////////////
  185. Node* List::Dobav_n_last(string value = "88")
  186. {
  187.     Node *temp = NULL;
  188.     Node *head2 = head;
  189.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  190.     count++;
  191.     while (head2->ptr != NULL) {
  192.         temp = head2;
  193.         head2 = head2->ptr;
  194.     }
  195.     // <operation>
  196.     Node *elem2 = new Node();
  197.     elem2->FirstName = value;
  198.     elem2->ptr = NULL;
  199.     head2->ptr = elem2;
  200.     // </operation>
  201.     cout << head2->FirstName << " test " << head2 << " test " << endl;
  202.     cout << head2->ptr->FirstName << " test " << head2->ptr << " test " << endl;
  203. }
  204. ////////////////
  205. /////////////////
  206. Node* List::Dobav_pre_last()
  207. {
  208.     Node *temp = NULL;
  209.     Node *t = head;
  210.     Node *head2 = head;
  211.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  212.     count--;
  213.     while (head2->ptr != NULL) {
  214.         head2 = head2->ptr;
  215.         t = t->ptr;
  216.         if (t->ptr->ptr == NULL) {
  217.             temp = t->ptr;
  218.             cout << t->FirstName << " test2 " << t << " test2 " << endl;
  219.             cout << temp->FirstName << " test2 " << temp->ptr << " test2 " << endl;
  220.             //<operation>
  221.             Node *elem2 = new Node();
  222.             elem2->FirstName = "88";
  223.             t->ptr = elem2;
  224.             elem2->ptr = temp;
  225.             //</operation>
  226.             return NULL;
  227.         }
  228.     }
  229. }
  230. ////////////////
  231. ////////////////
  232. Node* List::Delete_prev_end()
  233. {
  234.     count++;
  235.     Node *temp = NULL;
  236.     Node *head2 = head;
  237.     Node *t = head;
  238.     Node *t2 = head;
  239.     Node *t3 = head;
  240.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  241.     if (head2->ptr == NULL) { return NULL; } // В списке нет узлов по условию
  242.     if (head2->ptr->ptr == NULL) { return NULL; } // В списке нет узлов
  243.     count--;
  244.     int j = 0;
  245.     cout << head2->FirstName << " - " << head2 << " - " << endl;
  246.     while (head2->ptr != NULL) {
  247.         j++;
  248.         head2 = head2->ptr;
  249.         temp = head2;
  250.         t = temp->ptr;
  251.         t3 = t->ptr;
  252.         cout << temp->FirstName << " - " << temp << " - " << endl;
  253.         cout << t->FirstName << " - " << t << " - " << endl;
  254.         cout << t3->FirstName << " - " << t3 << " - " << endl;
  255.  
  256.         if (head2->ptr->ptr->ptr == NULL) {
  257.             //// <operation>
  258.             temp->ptr = t3; delete t;
  259.             //// </operation>
  260.             cout << temp->FirstName << " Проверка " << temp << " - " << endl;
  261.             cout << temp->ptr->FirstName << " Проверка " << temp->ptr << " - " << endl;
  262.             cout << "temp->ptr->ptr->FirstName" << " Проверка " << temp->ptr->ptr << " - " << endl;
  263.             cout << "t3->ptr->FirstName" << " - " << t3->ptr << " - " << endl;
  264.             return NULL;
  265.         }
  266.     }
  267. }
  268. ///////////////////
  269. ////////////////
  270. Node* List::Nomer_s_kontsa_del()
  271. {
  272.     count++;
  273.     Node *temp = NULL;
  274.     Node *head2 = head;
  275.     Node *t = head;
  276.     Node *t2 = head;
  277.     Node *t3 = head;
  278.     Node *t4 = head;
  279.     int nomer_s_kontsa = 4;
  280.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  281.     count--;
  282.     int i = 0;
  283.     int vsego;
  284.     while (t2->ptr != NULL) {
  285.         t2 = t2->ptr;
  286.         i++;
  287.         vsego = i;
  288.     }
  289.     // proverka na sootvetstvie spisku
  290.     if ((vsego + 1) <= nomer_s_kontsa) { cout << " Nomer ne sootvetstvuet spisku|" << nomer_s_kontsa << "- этого номера нет " << endl;   return NULL; }
  291.  
  292.     cout << " vsego  " << (vsego + 1) << " - " << endl;
  293.     int j = 0;
  294.  
  295.     while (head2->ptr != NULL) {
  296.         if (j == (vsego - nomer_s_kontsa)) {
  297.             temp = head2;
  298.             t = temp->ptr;
  299.             t3 = t->ptr;
  300.             //// <perenos ukazatelya udalenie>
  301.             temp->ptr = t3; delete t;
  302.             //// </ perenos ukazatelya udalenie>
  303.             cout << j << " Проверка " << temp << " - " << endl;
  304.             head2 = head2->ptr;
  305.         }
  306.         else {
  307.             head2 = head2->ptr;
  308.         }
  309.         j++;
  310.     }
  311. }
  312. ///////////////////
  313. int List::CountElement()
  314. {
  315.     Node *t = head;
  316.  
  317.     int i = 0;
  318.     int vsego;
  319.     while (t->ptr != NULL) {
  320.         t = t->ptr;
  321.         i++;
  322.         vsego = i;
  323.     }
  324.     return vsego;
  325. }
  326. ////////////////
  327. Node* List::By_value_del()
  328. {
  329.     Node *temp = NULL;
  330.     Node *head2 = head;
  331.     Node *t = head;
  332.     Node *t2 = head;
  333.     Node *t3 = head;
  334.     Node *t4 = head;
  335.     Node *tail = head;
  336.  
  337.     string value_del = "31";
  338.     cin >> value_del;
  339.    
  340.     while (tail->ptr != NULL) {
  341.         tail = tail->ptr;
  342.         //cout << " Проверка222 " << tail->FirstName << " - " << endl;
  343.     }
  344.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  345.     else if (head2->FirstName == value_del) {  // kluch v golove
  346.         head_del();
  347.     }
  348.     else if (tail->FirstName == value_del) { // kluch v hvoste
  349.         Delete_end();
  350.     }
  351.     else {
  352.     int j = 0;
  353.     while (head2 != NULL) {
  354.         temp = head2;
  355.         t = temp->ptr;
  356.         if (t->FirstName == value_del) {
  357.            
  358.             t3 = t->ptr;
  359.             //// <operation>
  360.             temp->ptr = t3; delete t;
  361.             //// </operation>
  362.             //cout << j << " Проверка " << temp->FirstName << " - " << endl;
  363.             //cout << j << " Проверка " << t->FirstName << " - " << endl;
  364.             //cout << j << " Проверка " << t3->FirstName << " - " << endl;
  365.             break;
  366.         }
  367.         head2 = head2->ptr;
  368.         j++;
  369.     }
  370.   }
  371. }
  372. ///////////////////
  373. ////////////////
  374. Node* List::By_value_print()
  375. {
  376.     Node *head2 = head;
  377.  
  378.     string value_del;
  379.     cout << " Vvedite imya dlya poiska > ";
  380.     cin >> value_del;
  381.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  382.    
  383.     while (head2 != NULL) {
  384.  
  385.         if (head2->FirstName == value_del) {
  386.             //typ[0];
  387.             cout << " Nomer > " << head2->N_student << " < " << head2->FirstName+' '<< head2->LastName + ' ' <<  head2->OtsenkiPtr->fizika + ' ' << head2->OtsenkiPtr->istoriya + ' ' << head2->OtsenkiPtr->informatika + ' ' << endl;
  388.         }
  389.         head2 = head2->ptr;
  390.     }
  391. }
  392. ///////////////////
  393. ////////////////
  394. Node* List::head_next_del()
  395. {
  396.     Node *t1 = NULL;
  397.     Node *head2 = head;
  398.     Node *t2 = head;
  399.     Node *t3 = head;
  400.     t1 = head;
  401.     t2 = t1->ptr;
  402.     t3 = t2->ptr;
  403.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  404.     // <ukazateli dlya operatsii>
  405.     cout << t1->FirstName << " - " << t1 << " - " << endl;
  406.     cout << t2->FirstName << " - " << t2 << " - " << endl;
  407.     cout << t3->FirstName << " - " << t3 << " - " << endl;
  408.     // </ukazateli dlya operatsii>
  409.     // <operation>
  410.     t1->ptr = t3;
  411.     t2->ptr = NULL;
  412.     delete t2;
  413.     // </operation>
  414.     // <proverka>
  415.     cout << head2->FirstName << " - " << head2 << " - " << endl;
  416.     cout << head2->ptr->FirstName << " - " << head2->ptr << " - " << endl;
  417.     cout << head2->ptr->ptr->FirstName << " - " << head2->ptr->ptr << " - " << endl;
  418.     // </proverka>
  419. }
  420. ////////////////
  421. ////////////////
  422. Node* List::head_del()
  423. {
  424.     Node *temp = NULL;
  425.     Node *head2 = head;
  426.     Node *t = head;
  427.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  428.     //<operation>
  429.     head = head2->ptr;
  430.     t = NULL;
  431.     delete t;
  432.     //</operation>
  433.     int i = 0;
  434.     while (head2->ptr != NULL) {
  435.         temp = head2;
  436.         head2 = head2->ptr;
  437.         cout << i << " t " << t << " t " << endl;
  438.         cout << i << " - " << temp << " - " << endl;
  439.         cout << i << " - " << head2->ptr << " - " << endl;
  440.         i++;
  441.     }
  442. }
  443. ////////////////
  444. ////////////////
  445. Node* List::Zamena_ptr()
  446. {
  447.     Node *temp = NULL;
  448.     Node *head2 = head;
  449.     Node *t = head;
  450.     Node *t2 = head;
  451.     Node *t3 = head;
  452.     Node *t4 = head;
  453.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  454.     int i = 0;
  455.     int n_zameny = 3;
  456.     while (head2->ptr != NULL) {
  457.         t2 = head2;
  458.         head2 = head2->ptr;
  459.         if (i == (n_zameny - 2)) {
  460.             temp = head2;
  461.             cout << " Замена " << n_zameny << endl;
  462.             head2 = head2->ptr;
  463.             t3 = temp->ptr;
  464.             // <vivod nuzhnih peremennih>
  465.             cout << t->FirstName << " - " << t << " - " << endl;
  466.             cout << t2->FirstName << " - " << t2 << " - " << endl;
  467.             cout << temp->FirstName << " - " << temp << " - " << endl;
  468.             cout << t3->FirstName << " - " << t3 << " - " << endl;
  469.             // </vivod nuzhnih peremennih>
  470.             // </ operation>
  471.             t4 = t4->ptr;  // второй
  472.             t2->ptr = t;  // связь перед t. t был первым
  473.             t->ptr = t3;  // связь после t. t был первым
  474.             head = temp; // новый хэд темп выбран по номеру n_zameny
  475.             temp->ptr = t4; // указатель на второй
  476.             // < operation>
  477.             // < proverka>
  478.             cout << head->FirstName << " 1 " << head << " - " << endl;
  479.             cout << t2->FirstName << " n " << t2 << " - " << endl;
  480.             cout << t2->ptr->FirstName << " n+1 " << t2->ptr << " - " << endl;
  481.             cout << t3->FirstName << " n+2 " << t3 << " - " << endl;
  482.             // < proverka>
  483.         }
  484.         i++;
  485.     }
  486. }
  487. ///////////////////
  488. ////////////////
  489. Node* List::HeadToEnd()
  490. {
  491.     Node *temp = NULL;
  492.     Node *head2 = head;
  493.     Node *t = head;
  494.     Node *t2 = head;
  495.     Node *t3 = head;
  496.     Node *t4 = head;
  497.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  498.     int i = 0;
  499.     int n_zameny = 10;
  500.     while (head2->ptr != NULL) {
  501.         head2 = head2->ptr;
  502.         t2 = head2;
  503.         if (t2->ptr->ptr->ptr == NULL) {
  504.             t2 = head2;
  505.             temp = t2->ptr;
  506.             cout << " Замена " << n_zameny << endl;
  507.             //head2 = head2->ptr;
  508.             t3 = temp->ptr;
  509.             // <vivod nuzhnih peremennih>
  510.             cout << t->FirstName << " - " << t << " - " << endl;
  511.             cout << t2->FirstName << " - " << t2 << " - " << endl;
  512.             cout << temp->FirstName << " - " << temp << " - " << endl;
  513.             cout << t3->FirstName << " - " << t3 << " - " << endl;
  514.             // </vivod nuzhnih peremennih>
  515.             // </ podstanovka>
  516.             t4 = t4->ptr;
  517.             head = t3;
  518.             t3->ptr = t4;
  519.             temp->ptr = t; t->ptr = NULL;
  520.             // < podstanovka>
  521.             return NULL;
  522.         }
  523.         i++;
  524.     }
  525. }
  526. ///////////////////
  527. ////////////////
  528. Node* List::LIFO()
  529. {
  530.     Node *temp = NULL;
  531.     Node *head2 = head;
  532.     Node *t = head;
  533.     Node *tt = head;
  534.     Node *t2 = head;
  535.     Node *t3 = head;
  536.     Node *t4 = head;
  537.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  538.     int i = 0;
  539.     int n_zameny = 10;
  540.  
  541.     while (head2->ptr != NULL) {
  542.         t2 = head2;
  543.         t4 = t2->ptr;
  544.  
  545.         if (t2->ptr->ptr == NULL) {
  546.             // <vivod nuzhnih peremennih>
  547.             cout << t2->FirstName << " -- " << t2 << " - " << endl;
  548.             cout << t4->FirstName << " -- " << t4 << " - " << endl;
  549.             // </vivod nuzhnih peremennih>
  550.             // </ podstanovka>
  551.             head = t4;
  552.             t4->ptr = t3;
  553.             t2->ptr = NULL;
  554.             // < podstanovka>
  555.             return NULL;
  556.         }
  557.         head2 = head2->ptr; t2 = t2->ptr;
  558.         i++;
  559.     }
  560.  
  561. }
  562. ///////////////////
  563. ////////////////
  564. Node* List::FILO()
  565. {
  566.     Node *temp = NULL;
  567.     Node *head2 = head;
  568.     Node *t = head;
  569.     Node *tt = head;
  570.     Node *t2 = head;
  571.     Node *t3 = head;
  572.     Node *t4 = head;
  573.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  574.     int i = 0;
  575.     while (head2->ptr != NULL) {
  576.         head2 = head2->ptr;
  577.         t2 = head2;
  578.         if (t2->ptr == NULL) {
  579.             t2 = head2;
  580.             temp = t2->ptr;
  581.             // <vivod nuzhnih peremennih>
  582.             //cout << t->FirstName << " -- " << t << " - " << endl;
  583.             //cout << t2->FirstName << " -- " << t2 << " - " << endl;
  584.             // </vivod nuzhnih peremennih>
  585.             // </ podstanovka>
  586.             t4 = t4->ptr;
  587.             head = t4;
  588.             t2->ptr = t;
  589.             t->ptr = NULL;
  590.             // < podstanovka>
  591.             return NULL;
  592.         }
  593.         i++;
  594.     }
  595.  
  596. }
  597. ///////////////////
  598. ////////////////
  599. Node* List::Zamena()
  600. {
  601.     Node *temp = NULL;
  602.     Node *head2 = head;
  603.     Node *t = head;
  604.     if (head2 == NULL) { return NULL; } // В списке нет узлов
  605.     int i = 0;
  606.     int n_zameny;
  607.     cout << " Введи номер замены " << endl;
  608.     cin >> n_zameny;
  609.  
  610.     while (head2->ptr != NULL) {
  611.         if (i == (n_zameny - 1)) {
  612.             temp = head2;
  613.             cout << " Замена " << n_zameny << endl;
  614.         }
  615.         head2 = head2->ptr;
  616.         cout << i << " - " << t << " - " << endl;
  617.         cout << i << " - " << temp << " - " << endl;
  618.         cout << i << " - " << head2->ptr << " - " << endl;
  619.         i++;
  620.     }
  621.     if (temp) {
  622.         string zamen1;
  623.         zamen1 = temp->FirstName;
  624.         temp->FirstName = t->FirstName; // вставляем значение первого в выбранный
  625.         t->FirstName = zamen1; // вставляем в первый значение выбранного
  626.     }
  627. }
  628. ///////////////////
  629. ////////////////
  630. void List::StekOperation()
  631. {
  632.     while (true)
  633.     {
  634.         int day;
  635.         cout << "Operation  Dobav_head-1 head_del-2 AddTail-3 DelTail-4 Print-5 Delet_ALL-6 Exit-7 \n";
  636.         cin >> day;
  637.         switch (day) {
  638.         case 1:
  639.             cout << "Dobav_head\n"; Dobav_head();
  640.             break;
  641.         case 2:
  642.             cout << "head_del\n"; head_del();
  643.             break;
  644.         case 3:
  645.             cout << "AddTail\n"; Dobav_head(); FILO();
  646.             break;
  647.         case 4:
  648.             cout << "DelTail\n";  LIFO(); head_del();
  649.             break;
  650.         case 5:
  651.             cout << "Print\n"; Print();
  652.             break;
  653.         case 6:
  654.             cout << "Delete_ALL\n"; Delete_ALL();
  655.             break;
  656.         case 7:
  657.             cout << "Exit\n"; goto tryAgain;
  658.             break;
  659.         }
  660.  
  661.     }
  662. tryAgain: // это лейбл
  663.     exit;
  664. }
  665. ///////////////////
  666.  
  667. void List::Print()
  668. {
  669.     if (isEmpty()) { cout << "Список пуст" << endl; return; }
  670.     Node *p = head;
  671.     do {
  672.         cout << "(" << getValue(p)
  673.                 << " "<< getValue2(p)
  674.                 << " " << getValue3(p)
  675.             << " " << getValue4(p)
  676.             << " " << getValue5(p)
  677.             << " " << getValue6(p)
  678.             << ")\n";
  679.         p = Next(p);
  680.     } while (p != NULL);
  681.     cout << endl;
  682. }
  683.  
  684. void List::Clear()
  685. {
  686.     class Node *p = head;
  687.     if (p == NULL) return;
  688.     do {
  689.         Node *d = p;
  690.         p = Next(p);
  691.         delete d;
  692.     } while (p != NULL);
  693.     count = 0;
  694.     head = NULL;
  695. }
  696. void List::Delete_ALL()
  697. {
  698.     class Node *p = head;
  699.     if (p == NULL) return;
  700.     do {
  701.         Node *d = p;
  702.         p = p->ptr;
  703.         delete d;
  704.     } while (p != NULL);
  705.     count = 0;
  706.     head = NULL;
  707. }
  708.  
  709. Node* List::getLast()
  710. {
  711.     Node* p = head;
  712.     while (Next(p) != NULL)
  713.         p = Next(p);
  714.     return p;
  715. }
  716.  
  717. Node* List::Next(Node* node)
  718. {
  719.     if (isEmpty()) return NULL;
  720.     return node->ptr;
  721. }
  722.  
  723. Node* List::Prev(Node* node)
  724. {
  725.     if (isEmpty()) return NULL;
  726.     if (node == head) return NULL;
  727.     Node *p = head;
  728.     while (p->ptr != node)
  729.         p = p->ptr;
  730.     return p;
  731. }
  732.  
  733. void List::String_total_X() {
  734.     //string s = "sfsdfsXdsfdvdf XsfsdfsXdsfdvdf XsfsdfsXdsfdvdf X";
  735.     string nameFile="students.txt";
  736.     string s = reedOfFile(nameFile);
  737.     //<podschet vseh simvolov v tekste>
  738.             int p = 0;
  739.             if (s.find('X') != -1) {
  740. String_X(s);
  741. cout << '\n\n' << "Vsego elementov v spiske ";
  742.                 for (auto c : s)
  743.                     if (c == 'X') {
  744.                         p++;
  745.                     }
  746.                 cout <<  p  << '\n';
  747.             }
  748.  
  749.     //</podschet vseh simvolov v tekste>
  750. ////////////////
  751.        
  752. }
  753. void List::String_X(string s) {
  754.     //<podschet vseh simvolov v stroke>
  755.     char unit;
  756.     int dlina_stroki = 10;
  757.     int i = 0; int is = 0;
  758.     while (s[i] != NULL) {
  759.         s[i]; cout << s[i];
  760.         if (s[i] == 'X') { is++; }
  761.         if ((i % dlina_stroki == 0)&&(i != 0) ) {
  762.             cout << "  " << is << "\n";
  763.             is = 0;
  764.         }
  765.         i++;
  766.     }
  767.     //</podschet vseh simvolov v stroke>
  768. }
  769.  
  770. ////////////////
  771. string List::reedOfFile(string nameFile)
  772. {
  773.     ifstream inf(nameFile);
  774.     // Если мы не можем открыть файл для чтения его содержимого,
  775.     if (!inf)
  776.     {
  777.         // то выводим следующее сообщение об ошибке и выполняем функцию exit()
  778.         cerr << "SetText.txt could not be opened for reading!" << endl;
  779.         exit(1);
  780.     }
  781.     string strInput2;
  782.     // Пока есть, что читать,
  783.     while (inf)
  784.     {
  785.         // то перемещаем то, что можем прочитать, в строку, а затем выводим эту строку на экран
  786.         string strInput;
  787.         getline(inf, strInput);
  788.         strInput2 = strInput2 + strInput;
  789.     }
  790.     return strInput2;
  791.     //cout << strInput2 << endl;
  792. }
  793. ///////////////////
  794.  
  795. void List::Swap(Node* node1, Node* Otsenki)
  796. {
  797.     if (node1 == NULL || Otsenki == NULL) return;
  798.     if (node1 == Otsenki) return;
  799.     if (Otsenki->ptr == node1)
  800.     {
  801.         Node *p = node1;
  802.         node1 = Otsenki;
  803.         Otsenki = p;
  804.     }
  805.     Node *prev1 = Prev(node1);
  806.     Node *prev2 = Prev(Otsenki);
  807.     Node *next1 = Next(node1);
  808.     Node *next2 = Next(Otsenki);
  809.     if (next1 == Otsenki)
  810.     {
  811.         if (prev1 != NULL)
  812.             prev1->ptr = Otsenki;
  813.         else
  814.             head = Otsenki;
  815.         Otsenki->ptr = node1;
  816.         node1->ptr = next2;
  817.         return;
  818.     }
  819.     if (prev1 != NULL)
  820.         prev1->ptr = Otsenki;
  821.     else
  822.         head = Otsenki;
  823.     if (prev2 != NULL)
  824.         prev2->ptr = node1;
  825.     else
  826.         head = node1;
  827.     Otsenki->ptr = next1;
  828.     node1->ptr = next2;
  829. }
  830.  
  831.  
  832.  
  833. int main()
  834. {
  835.     using std::string;
  836.     using std::cin;
  837.     using std::cout;
  838.     using std::getline;
  839.     system("chcp 1251");
  840.     system("cls");
  841.     List list;
  842.     Otsenki Otsenki;
  843.  
  844.     list.Print();
  845.     Node *s = list.getLast();
  846.     for (int i = 0; i < 1; i++) {
  847.         string z1;
  848.         string z2;
  849.         string z3;
  850.         string z4;
  851.         string z5;
  852.         string z6;
  853.         cout << ">> N_student  ";
  854.         cin >> z1;
  855.         cout << ">> FirstName  ";
  856.         cin >> z2;
  857.         cout << ">> LastName  ";
  858.         cin >> z3;
  859.        
  860.         cout << ">> fizika  ";
  861.         cin >> z4;
  862.         cout << ">> istoriya  ";
  863.         cin >> z5;
  864.         cout << ">> informatika  ";
  865.         cin >> z6;
  866.         s = list.Add(z1, z2, z3, z4, z5, z6, s);
  867.     }
  868.  
  869.     //list.String_total_X();
  870.     //list.String_X(string s);
  871.     //list.Delete_end();
  872.     //list.Nomer_s_kontsa_del();
  873.     //list.By_value_del();
  874.     //list.By_value_print();
  875.     //list.Delete_prev_end();
  876.  
  877.     //list.Zamena();
  878.     //list.Zamena_ptr();
  879.     //list.head_next_del();
  880.     //list.Dobav_n_last();
  881.     //list.Dobav_pre_last();
  882.     //list.StekOperation();
  883.  
  884.  
  885.  
  886.     //list.Dobav_head_next();
  887.     //list.HeadToEnd();
  888. //list.FILO();
  889. //list.LIFO();
  890.     //cout << "***********************" << endl;
  891.     list.Print();
  892.     //cout << "Последний элемент: " << list.getValue(list.getLast()) << endl;
  893.     // Удаляем элементы, равные 0
  894.     //Node *p = list.getFirst();
  895.     //do {
  896.     //  if (list.getValue(p) == "0")
  897.     //      p = list.Delete(p);
  898.     //  else
  899.     //      p = list.Next(p);
  900.     //} while (p != NULL);
  901.     //list.Print();
  902.     //cout << "В списке " << list.getCount() << " элементов" << endl;
  903.     //list.Swap(list.getFirst(), list.getLast());
  904.     //list.Print();
  905.     //list.Clear();
  906.     //list.Print();
  907.     //cout << "В списке " << list.getCount() << " элементов" << endl;
  908.     //cin.get(); cin.get();
  909.    
  910.    
  911.  
  912.     return 0;
  913.  
  914. }
  915.  
  916.  
Add Comment
Please, Sign In to add comment