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

#include <iostream>

using namespace std;

struct obj {
	int item;
	obj* next;
};
void del_x2(obj**);
void view(obj*);
void push(obj**, int);
void clear(obj**);
void sort(obj*);
void mmx(obj**);

int main()
{
	setlocale(LC_ALL, "Russian");
	obj* begin = NULL;
play:
	cout << "1. Создать новый стек " << endl;
	cout << "2. Просмотреть текущик стек " << endl;
	cout << "3. Очистить текущий стек " << endl;
	cout << "4. Отсортировать текущий стек " << endl;
	cout << "5. Выйти " << endl;
	cout << endl;
	cout << "6. Задание удалить из стека четные элменты" << endl;
	cout << "7. Задание поменять мах и мин элменты" << endl;


	int a = 0;
	cin >> a;
	int b;

	switch (a)
	{
	case 1:
		if (begin != NULL)
		{
			cout << "Стек уже создан" << endl;
		repeat1:
			cout << "Вернуться назад или выйти?" << endl;
			cout << "1. Да" << endl;
			cout << "2. Нет" << endl;
			cin >> b;
			switch (b)
			{
			case 1:
				system("cls");
				goto play;
			case 2: return 0;
			default:
				system("cls");
				goto repeat1;
			}
		}
		else
		{
		err:
			cout << "Введите длину стека" << endl;
			int l = 0;
			cin >> l;
			if (l < 1)
			{
				cout << "Ошибочная длина стека!" << endl;
				goto err;
			}
			for (int i = 0; i < l; i++)
			{
				push(&begin, (-10 + (rand() % 21)));
			}
			cout << "Ваш стек:" << endl;
			view(begin);
			cout << endl;
		repeat2:
			cout << "Желаете вернуться или выйти?" << endl;
			cout << "1. Да" << endl;
			cout << "2. Нет" << endl;
			cin >> b;
			switch (b)
			{
			case 1:
				system("cls");
				goto play;
			case 2: return 0;
			default:
				system("cls");
				goto repeat2;
			}
		}
	case 2:
		if (begin == NULL)
		{
			cout << "Стек пустой!" << endl;
		repeat3:
			cout << "Желаете вернуться или выйти? " << endl;
			cout << "1. Да" << endl;
			cout << "2. Нет" << endl;
			cin >> b;
			switch (b)
			{
			case 1:
				system("cls");
				goto play;
			case 2: return 0;
			default:
				system("cls");
				goto repeat3;
			}
		}
		else
		{
			cout << "Ваше стек:" << endl;
			view(begin);
		repeat4:
			cout << "Желаете вернуться или выйти?" << endl;
			cout << "1. Да" << endl;
			cout << "2. Нет" << endl;
			cin >> b;
			switch (b)
			{
			case 1:
				system("cls");
				goto play;
			case 2: return 0;
			default:
				system("cls");
				goto repeat4;
			}
		}
	case 3:
		if (begin == NULL)
		{
			cout << "Стек пустой!" << endl;
		repeat5:
			cout << "Желаете вернуться или выйти? " << endl;
			cout << "1. Да" << endl;
			cout << "2. Нет" << endl;
			cin >> b;
			switch (b)
			{
			case 1:
				system("cls");
				goto play;
			case 2: return 0;
			default:
				system("cls");
				goto repeat5;
			}
		}
		else
		{
			clear(&begin);
			cout << "Стек пуст!" << endl;
		repeat6:
			cout << "Желаете продолжить или выйти?" << endl;
			cout << "1. Да" << endl;
			cout << "2. Нет" << endl;
			cin >> b;
			switch (b)
			{
			case 1:
				system("cls");
				goto play;
			case 2: return 0;
			default:
				system("cls");
				goto repeat6;
			}
		}
	case 4:
		if (begin == NULL)
		{
			cout << "Стек пустой!" << endl;
		repeat7:
			cout << "Желаете вернуться или выйти? " << endl;
			cout << "1. Да" << endl;
			cout << "2. Нет" << endl;
			cin >> b;
			switch (b)
			{
			case 1:
				system("cls");
				goto play;
			case 2: return 0;
			default:
				system("cls");
				goto repeat7;
			}
		}
		else
		{
			sort(begin);
			cout << "Ваше стек:" << endl;
			view(begin);
		repeat8:
			cout << "Желаете вернуться или выйти? " << endl;
			cout << "1. Да" << endl;
			cout << "2. Нет" << endl;
			cin >> b;
			switch (b)
			{
			case 1:
				system("cls");
				goto play;
			case 2: return 0;
			default:
				system("cls");
				goto repeat8;
			}
		}
	case 5:
		return 0;
	case 6:
		if (begin == NULL)
		{
			cout << "Стек пустой!" << endl;
			repeat9:
			cout << "Желаете вернуться или выйти? " << endl;
			cout << "1. Да" << endl;
			cout << "2. Нет" << endl;
			cin >> b;
			switch (b)
			{
			case 1:
				system("cls");
				goto play;
			case 2: return 0;
			default:
				system("cls");
				goto repeat9;
			}
		}
		else
		{
			del_x2(&begin);
			view(begin);
			repeat13:
			cout << "Желаете вернуться или выйти? " << endl;
			cout << "1. Да" << endl;
			cout << "2. Нет" << endl;
			cin >> b;
			switch (b)
			{
			case 1:
				system("cls");
				goto play;
			case 2: return 0;
			default:
				system("cls");
				goto repeat13;
			}
		}
	case 7:
		if (begin == NULL)
		{
			cout << "Стек пустой!" << endl;
		repeat11:
			cout << "Желаете вернуться или выйти? " << endl;
			cout << "1. Да" << endl;
			cout << "2. Нет" << endl;
			cin >> b;
			switch (b)
			{
			case 1:
				system("cls");
				goto play;
			case 2: return 0;
			default:
				system("cls");
				goto repeat11;
			}
		}

		else
		{
			mmx(&begin);
			view(begin);
			repeat12:
			cout << "Желаете вернуться или выйти? " << endl;
			cout << "1. Да" << endl;
			cout << "2. Нет" << endl;
			cin >> b;
			switch (b)
			{
			case 1:
				system("cls");
				goto play;
			case 2: return 0;
			default:
				system("cls");
				goto repeat12;
			}
		}
	default:
		system("cls");
		goto play;

	}
}
void sort(obj* p)
{
	obj* t = NULL, * t1;
	int r;
	if (p->next == NULL)
	{
		cout << "Стек нельзя отсортировать!" << endl;
		return;
	}
	do {
		for (t1 = p; t1->next != t; t1 = t1->next)
			if (t1->item > t1->next->item) {
				r = t1->item;
				t1->item = t1->next->item;
				t1->next->item = r;
			}
		t = t1;
	} while (p->next != t);
	

}

void clear(obj** begin)
{
	obj* q = *begin;
	while (*begin != NULL)
	{

		q = (*begin)->next;
		(*begin)->item = NULL;
		(*begin)->next = NULL;
		free(*begin);
		*begin = q;
	}
}

void push(obj** begin, int in)
{
	obj* q = NULL;
	q = new obj();
	q->item = in;
	q->next = NULL;
	if (*begin == NULL)
	{
		*begin = q;
	}
	else if (*begin != NULL)
	{
		q->next = *begin;
		*begin = q;
	}
}

void del_x2(obj** begin)
{
	obj* start = *begin;
	obj* prev = *begin;
	obj* cle = NULL;
	while (prev->item % 2 == 0)
	{
		*begin = (*begin)->next;
		start = *begin;
		cle = prev;
		prev = *begin;
		free(cle);

	}
	while (*begin != NULL)
	{
		if ((*begin)->item % 2 == 0)
		{
			prev->next = (*begin)->next;
			cle = *begin;
			*begin = (*begin)->next;
			free(cle);
		}
		else
		{
			prev = *begin;
			*begin = (*begin)->next;

		}

	}
	*begin = start;
}
void mmx(obj** t)
{
	obj* q = *t;
	int max = 0;
	int min = q->item;
	while (q != NULL)
	{
		if (q->item > max)
		{
			max = q->item;
		}
		if (q->item < min)
		{
			min = q->item;
		}
		q = q->next;
	}
	q = *t;
	while (q != NULL)
	{
		if (q->item == min)
		{
			q->item = max;
			q = q->next;
			continue;
		}
		if (q->item == max)
		{

			q->item = min;
			q = q->next;

			continue;
		}
		q = q->next;

	}
	t = &q;
}
void view(obj* begin)
{
	obj* q = begin;
	while (q != NULL)
	{
		cout << "\t" << q->item;
		q = q->next;
		cout << endl;
	}
}





// Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
// Отладка программы: F5 или меню "Отладка" > "Запустить отладку"

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