Скачиваний:
8
Добавлен:
03.11.2022
Размер:
3.43 Кб
Скачать
// LAB 4.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//

#include <iostream>

using namespace std;

struct obj
{
	int item;
	obj *next, *prev;
	
};

void push_on(obj**, obj**, int);
void go_read(obj*);
void redakt(obj**, obj**, obj**);


int main()
{
	setlocale(LC_ALL, "RU");
	obj* begin = NULL;
	obj* end = NULL;
	obj* minuses_begin = NULL;
	obj* minuses_end = NULL;
	cout << "Введите длину длину очереди" << endl;
	int k = 0;
	cin >> k;
	cout << "Введите очередь положительных и отрицательных чисел" << endl;
	int n = 0;
	for (int i = 0; i<k;i++)
	{
		cin >> n;
		push_on(&begin, &end, n);
	}
	go_read(begin);

	redakt(&begin, &minuses_begin, &minuses_end);
	go_read(begin);
	go_read(minuses_begin);

}
void redakt(obj** begin, obj** minuses_begin, obj** minuses_end)
{
	obj* q = *begin;
	obj* q_next = (*begin)->next;
	do
	{
		if (q->item < 0)
		{
			push_on(minuses_begin, minuses_end, q->item);
			q_next->prev = q->prev;
			q = q->prev;
			q->next = q_next;
			q = q->next;
			q_next = q->next;
		}
		else
		{
			q = q->next;
			q_next = q->next;
		}

	}
	while (q != *begin);
}
void push_on(obj** begin, obj** end, int in)
{
	obj* q = new obj();
	q->item = in;
	if (*begin == NULL)
	{
		*begin = q;
		q->prev = *begin;
		q->next = *begin;
	}
	else if (*begin != NULL && *end == NULL)
	{
		q->next = *begin;
		q->prev = *begin;
		*end = q;
		(*begin)->prev = *end;
		(*begin)->next = *end;
		
	}
	else if (*begin != NULL && *end != NULL)
	{
		q->next = *end;
		q->prev = *begin;
		*end = q;
		(*begin)->next = q;

	}

}
void go_read(obj* begin)
{
	obj* q = begin;
	if (q == NULL)
	{
		cout << "пусто" << endl;
		return;
	}
	while (q->prev != begin)
	{
		cout << q->item << " ";
		q = q->prev;
	}
	cout << q->item;
	cout << endl;
}
// Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
// Отладка программы: F5 или меню "Отладка" > "Запустить отладку"

// Советы по началу работы 
//   1. В окне обозревателя решений можно добавлять файлы и управлять ими.
//   2. В окне Team Explorer можно подключиться к системе управления версиями.
//   3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
//   4. В окне "Список ошибок" можно просматривать ошибки.
//   5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
//   6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
Соседние файлы в папке 1 курс различные лабы и их куски. Что-то полезное тут есть