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

class IntersectingQueues {
private:
    vector<int> data;
    int x_start, x_end; // Начало и конец очереди X
    int y_start, y_end; // Начало и конец очереди Y
    int common_index;   // Индекс общей ячейки
    
public:
    IntersectingQueues() : x_start(-1), x_end(-1), y_start(-1), y_end(-1), common_index(-1) {}
    
    // Добавление в очередь X
    void addToX(int value) {
        if (data.empty()) {
            data.push_back(value);
            x_start = x_end = y_start = y_end = common_index = 0;
        } else {
            data.insert(data.begin() + x_end + 1, value);
            x_end++;
            if (y_end >= x_end) y_end++;
            if (common_index >= x_end) common_index++;
        }
    }
    
    // Добавление в очередь Y
    void addToY(int value) {
        if (data.empty()) {
            data.push_back(value);
            x_start = x_end = y_start = y_end = common_index = 0;
        } else {
            data.insert(data.begin() + y_end + 1, value);
            y_end++;
            if (x_end >= y_end) x_end++;
            if (common_index >= y_end) common_index++;
        }
    }
    
    // Удаление из очереди X
    void removeFromX() {
        if (x_start == -1) return;
        
        if (x_start == x_end) { // Одна ячейка в X
            if (y_start == y_end) { // Одна ячейка в Y - общая
                data.clear();
                x_start = x_end = y_start = y_end = common_index = -1;
            } else {
                // Удаляем как элемент внутри Y
                data.erase(data.begin() + x_start);
                if (y_start > x_start) y_start--;
                if (y_end > x_start) y_end--;
                if (common_index > x_start) common_index--;
                x_start = x_end = common_index;
            }
        } else {
            data.erase(data.begin() + x_start);
            if (y_start > x_start) y_start--;
            if (y_end > x_start) y_end--;
            if (common_index > x_start) common_index--;
            x_end--;
        }
    }
    
    // Просмотр в форме креста
    void printCross() const {
        if (data.empty()) {
            cout << "Очереди пусты" << endl;
            return;
        }
        
        // Верхняя часть (только X)
        for (int i = x_start; i < common_index; i++) {
            cout << "x" << data[i] << " ";
        }
        cout << endl;
        
        // Средняя часть (пересечение)
        cout << "x" << data[common_index] << " y" << data[common_index] << endl;
        
        // Нижняя часть (только Y)
        for (int i = common_index + 1; i <= y_end; i++) {
            cout << "y" << data[i] << " ";
        }
        cout << endl;
    }
};

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