nikitast

ekz_prep_1

Jan 20th, 2021
762
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <locale.h>
  4.  
  5. struct Node
  6. {
  7.     char data;
  8.     Node* next;
  9. };
  10.  
  11. void AddNode(Node*& first, char letter)
  12. {
  13.     Node* cur;
  14.     if (first == NULL)
  15.     {
  16.         first = new Node;
  17.         first->data = letter;
  18.         first->next = NULL;
  19.         cur = first;
  20.     }
  21.     else
  22.     {
  23.         cur = new Node;
  24.         cur->data = letter;
  25.         cur->next = first;
  26.         first = cur;
  27.     }
  28. }
  29.  
  30. void OutputList(Node* first)
  31. {
  32.     while (first != NULL)
  33.     {
  34.         printf("%c ", first->data);
  35.         first = first->next;
  36.     }
  37. }
  38.  
  39. void DeleteMiddle(Node* first, int n)
  40. {
  41.     if (n == 1)
  42.         puts("\n\nПоследовательность содержит 1 символ, невозможно найти средний символ.");
  43.     else
  44.     {
  45.         for (int i = 1; i < n / 2; i++)
  46.             first = first->next;
  47.         printf("\n\nУдаление элемента списка: %c.", first->next->data);
  48.         Node* tmp = first->next;
  49.         first->next = first->next->next;
  50.         delete tmp;
  51.     }
  52. }
  53.  
  54. void MemoryClear(Node*& first)
  55. {
  56.     while (first != NULL)
  57.     {
  58.         Node* tmp = first;
  59.         first = first->next;
  60.         delete tmp;
  61.     }
  62. }
  63.  
  64. int main()
  65. {
  66.     char str[80];
  67.     Node* first = NULL;
  68.     int n = 0;
  69.     setlocale(0, "Russian");
  70.     puts("Введите последовательность, содержащую нечетное количество символов без пробелов и других разделительных знаков:");
  71.     while (n % 2 == 0)
  72.     {
  73.         gets_s(str);
  74.         n = strlen(str);
  75.         if (n % 2 == 0)
  76.             puts("\nПоследовательность содержит четное количество символов, введите другую последовательность:");
  77.     }
  78.     for (int i = 0; i < n; i++)
  79.         AddNode(first, str[i]);
  80.     puts("\nСформированный линейный односвязный список по типу стека:");
  81.     OutputList(first);
  82.     DeleteMiddle(first, n);
  83.     puts("\n\nСписок с удаленным средним элементом списка:");
  84.     OutputList(first);
  85.     puts("\n");
  86.     MemoryClear(first);
  87.     return 0;
  88. }
RAW Paste Data