alexx876

Untitled

Jun 25th, 2019
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.43 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <locale.h>
  4. #include <Windows.h>
  5.  
  6. using namespace std;
  7.  
  8. struct elm {
  9.     int vl;
  10.     elm *link;
  11. };
  12. struct list {
  13.     elm *start, *ptr;
  14. };
  15. void moveptr(list *L) {
  16.     if (!L->ptr->link) return;
  17.     L->ptr = L->ptr->link;
  18. }
  19. void addelement(list *L, int vl) {
  20.     elm *temp = (elm *)malloc(sizeof(elm));
  21.     if (!temp) return;
  22.     temp->vl = vl;
  23.     temp->link = L->ptr->link;
  24.     L->ptr->link = temp;
  25. }
  26.  
  27. void initl(list *L) {
  28.     L->start = (elm *)malloc(sizeof(elm)); // Create first
  29.     if (!L->start) return;
  30.     L->start->link = NULL;
  31.     L->ptr = L->start;
  32. }
  33. void remove_element(list *L) {
  34.     elm *pntr = L->ptr; // След удаляем
  35.     elm *del = L->ptr->link;
  36.     pntr->link = del->link;
  37.     free((void *)del);
  38. }
  39. void print(list *L) {
  40.     // дополнительный элемент для прохода от начала до конца списка
  41.     elm *tmp;
  42.     tmp = L->start->link;
  43.     while (tmp != NULL) {
  44.         cout << tmp->vl << " "; // печать текущего элемента
  45.         tmp = tmp->link; // переход на следующий элемент
  46.     }
  47.     cout << endl;
  48. }
  49. int main() {
  50.     setlocale(LC_ALL, "rus");
  51.  
  52.     list *L = (list *)malloc(0);
  53.     initl(L); // Create new list
  54.  
  55.     int exit = 1, m, vl, num, cc = 0;
  56.     while (exit != 0) {
  57.         system("cls");
  58.         cout << "1.Добавить элемент в начало\n2.Добавить элемент после элемента\n3.Удалить элемент\n4.Вывод списка элементов\n5.Очистить и закрыть\n\n";
  59.         cin >> m;
  60.         switch (m) {
  61.         case 1:
  62.             system("cls");
  63.             L->ptr = L->start;
  64.             cout << "Enter value: ";
  65.             cin >> vl;
  66.             addelement(L, vl);
  67.             cc++;
  68.             break;
  69.         case 2:
  70.             system("cls");
  71.             if (cc == 0) break;
  72.             do {
  73.                 cout << "Номер элемента после которого добавить: ";
  74.                 cin >> num;
  75.             } while (num < 1 || num > cc);
  76.             for (int i = 0; i < num; i++) moveptr(L);
  77.             cout << "Enter value: ";
  78.             cin >> vl;
  79.             addelement(L, vl);
  80.             cc++;
  81.             break;
  82.         case 3:
  83.             system("cls");
  84.             do {
  85.                 cout << "Номер элемента для удаления: ";
  86.                 cin >> num;
  87.             } while (num > cc);
  88.             for (int i = 0; i < num - 1; i++) moveptr(L);
  89.             remove_element(L);
  90.             cc--;
  91.             break;
  92.         case 4:
  93.             system("cls");
  94.             print(L);
  95.             cout << "Exit? (1)";
  96.             cin >> vl;
  97.             break;
  98.         case 5:
  99.             free(L->ptr);
  100.             exit = 0;
  101.             break;
  102.         }
  103.     }
  104.     return 0;
  105. }
Add Comment
Please, Sign In to add comment