Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
2.86 Кб
Скачать
#include <iostream>
#include <vector>
#include <locale>
using namespace std;

class IntersectingStacks {
private:
    vector<int> data;
    int x_top, y_top; // Вершины стеков
    int common_index; // Общий элемент
    
public:
    IntersectingStacks() : x_top(-1), y_top(-1), common_index(-1) {}
    
    // Добавление в стек X
    void pushX(int value) {
        if (data.empty()) {
            data.push_back(value);
            x_top = y_top = common_index = 0;
        } else {
            data.insert(data.begin() + x_top + 1, value);
            x_top++;
            if (y_top >= x_top) y_top++;
            if (common_index >= x_top) common_index++;
        }
    }
    
    // Добавление в стек Y
    void pushY(int value) {
        if (data.empty()) {
            data.push_back(value);
            x_top = y_top = common_index = 0;
        } else {
            data.insert(data.begin() + y_top + 1, value);
            y_top++;
            if (x_top >= y_top) x_top++;
            if (common_index >= y_top) common_index++;
        }
    }
    
    // Удаление из стека X
    int popX() {
        if (x_top == -1) return -1;
        
        int value = data[x_top];
        if (x_top == common_index) {
            // Удаляем общий элемент
            if (y_top == common_index) {
                data.clear();
                x_top = y_top = common_index = -1;
            } else {
                data.erase(data.begin() + x_top);
                y_top--;
                x_top = common_index = y_top;
            }
        } else {
            data.erase(data.begin() + x_top);
            if (y_top > x_top) y_top--;
            if (common_index > x_top) common_index--;
            x_top--;
        }
        
        return value;
    }
    
    // Просмотр стеков
    void print() const {
        if (data.empty()) {
            cout << "Стеки пусты" << endl;
            return;
        }
        
        cout << "Стек X: ";
        for (int i = 0; i <= x_top; i++) {
            if (i == common_index) cout << "[" << data[i] << "] ";
            else cout << data[i] << " ";
        }
        cout << endl;
        
        cout << "Стек Y: ";
        for (int i = 0; i <= y_top; i++) {
            if (i == common_index) cout << "[" << data[i] << "] ";
            else cout << data[i] << " ";
        }
        cout << endl;
    }
};

int main() {
    setlocale(LC_ALL, "ru_RU.UTF-8");
    
    IntersectingStacks stacks;
    stacks.pushX(1);
    stacks.pushX(2);
    stacks.pushY(3);
    stacks.pushY(4);
    
    cout << "Пересекающиеся стеки:" << endl;
    stacks.print();
    
    return 0;
}
Соседние файлы в папке Лаба8