Advertisement
coloriot

HA22_2

Sep 6th, 2024
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. // Решение задачи ПСП стэком
  7.  
  8. // Структура стэка - ноды и список (из предыдущих задач)
  9. struct Node {
  10.     char value;
  11.     Node* next;
  12. };
  13.  
  14. struct List {
  15.     Node* start;
  16.     int size;
  17.  
  18.     // Конструктор
  19.     List() {
  20.         start = nullptr;
  21.         size = 0;
  22.     }
  23. };
  24.  
  25. // Добавление и удаление элементов (из прошлых задач)
  26. void push(List& list, char new_value) {
  27.     Node* new_node = new Node;
  28.     new_node->value = new_value;
  29.     new_node->next = list.start;
  30.     list.start = new_node;
  31.     ++list.size;
  32. }
  33.  
  34. void pop(List& list) {
  35.     if (list.size == 0) {
  36.         return;
  37.     }
  38.     Node* temp = list.start;
  39.     list.start = list.start->next;
  40.     delete temp;
  41.     --list.size;
  42. }
  43.  
  44. // Возвращает верхний элемент стэка
  45. bool peek(List& list, char& topValue) {
  46.     if (list.size == 0) {
  47.         return false;
  48.     }
  49.     topValue = list.start->value;
  50.     return true;
  51. }
  52.  
  53. bool isEmpty(List& list) {
  54.     return list.size == 0;
  55. }
  56.  
  57. // Проверка последовательности - здесь используются вещи из библиотеки string
  58. bool isCorrectSequence(const string& sequence) {
  59.     List stack;
  60.     for (int i = 0; i < sequence.length(); ++i) {
  61.         char ch = sequence[i];
  62.         if (ch == '(' || ch == '[' || ch == '{') {
  63.             push(stack, ch);
  64.         } else if (ch == ')' || ch == ']' || ch == '}') {
  65.             char top;
  66.             if (!peek(stack, top)) {
  67.                 return false;
  68.             }
  69.             if ((ch == ')' && top == '(') ||
  70.                 (ch == ']' && top == '[') ||
  71.                 (ch == '}' && top == '{')) {
  72.                 pop(stack);
  73.             } else {
  74.                 return false;
  75.             }
  76.         }
  77.     }
  78.     return isEmpty(stack);
  79. }
  80.  
  81. int main() {
  82.     string test;
  83.     while (cin >> test) {
  84.         cout << test << " " << (isCorrectSequence(test) ? "yes" : "no") << endl;
  85.     }
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement