Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба8 / Laba 9 (1)
.cpp#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
