Добавил:
Uliminittion
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:1 курс различные лабы и их куски. Что-то полезное тут есть / lab4_5ochered
.cpp// stacks_3lbl.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
struct obj {
int item;
obj* next, * prev;
};
//прототипы функций
void push(obj**, obj**, int);
void push_to_start(obj**, obj**, int);
void view(obj**,int);
void clear(obj**); //очистка очереди
obj* del_x2(obj**, obj**);
int main()
{
setlocale(LC_ALL, "Russian");
obj* begin = NULL;
obj* end = NULL;
play:
cout << "1. Создать новую очередь " << endl;
cout << "2. Просмотреть очередь" << endl;
cout << "3. Добавить в очередь " << endl;
cout << "4. Выйти " << endl;
cout << endl;
cout << "5. Задание удалить из очереди максимальное "<< 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, &end, (-10 + (rand() % 21))); // генерация случайных чисел от -10 до 10 и вызов функции
}
cout << "Ваша очередь:" << endl;
view(&begin, 1);
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;
er0:
cout << "1. С начала в конец" << endl;
cout << "2. С конца в начало" << endl;
cin >> b;
switch (b)
{
case 1:
cout << "Ваша очередь!" << endl;
view(&begin, 1);
er:
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 er;
}
case 2:
cout << "Ваша очередь!" << endl;
view(&end, 2);
er2:
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 er2;
}
default:
system("cls");
goto er0;
}
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
{
cout << "Какую цифры вы хотите добавить?" << endl;
int numb;
cin >> numb;
errt:
cout << "Куда вы хотите добавить?" << endl;
cout << "1. В начало" << endl;
cout << "2. В конец" << endl;
cin >> b;
switch (b)
{
case 1:
push_to_start(&begin, &end, numb);
ttr:
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 ttr;
}
case 2:
push(&begin, &end, numb);
ttr1:
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 ttr1;
}
default:
system("cls");
goto errt;
}
}
case 4:
return 0;
case 5:
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
{
begin = del_x2(&begin, &end);
view(&begin, 1);
repeat56:
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 repeat56;
}
}
default:
system("cls");
goto play;
}
}
}
void push_to_start(obj** begin, obj** end, int numb)
{
obj* q = new obj();
q->item = numb;
q->next = *begin;
q->prev = NULL;
(*begin)->prev = q;
*begin = q;
q = NULL;
free(q);
}
obj* del_x2(obj**begin,obj**end)
{
if (*begin == *end)
{
cout << "Ошибка один элемент не может быть максимумом!" << endl;
return *begin;
}
obj* start = *begin;
obj* q = *begin;
obj* prev = NULL;
int max = 0;
while (q != NULL)
{
if (q->item > max)
{
max = q->item;
}
else
{
q = q->next;
}
}
q = *begin;
while (q != NULL)
{
if (q == start && q->item == max)
{
prev = q->next;
q = NULL;
free(q);
q = prev;
prev = NULL;
start = q;
}
if (q->item==max)
{
prev = q->prev;
prev->next = q->next;
q = NULL;
free(q);
q = prev->next;
if (q != NULL)
{
q->prev = prev;
}
}
else
{
q = q->next;
}
}
return start;
}
void push(obj** begin, obj** end, int number)
{
obj* q = new obj();
if (*begin == NULL)
{
q->item = number;
q->prev = NULL;
q->next = NULL;
*begin = q;
*end = q;
q = NULL;
free(q);
}
else
{
if ((*end)->prev == NULL)
{
q->item = number;
q->prev = *begin;
q->next = NULL;
*end = q;
q = NULL;
free(q);
(*begin)->next = *end;
}
else
{
q->item = number;
q->prev = *end;
q->next = NULL;
(*end)->next = q;
*end = q;
q = NULL;
free(q);
}
}
}
void clear(obj** begin)
{
obj* q = *begin;
while (*begin != NULL)
{
// q следующий в стеке а тот, что вершина я зануляю а потом методом free чищу b и перетаскиваю вершину на q
q = (*begin)->next;
(*begin)->item = NULL;
(*begin)->next = NULL;
free(*begin);
*begin = q;
}
}
void view(obj** begin,int r) //запись в консоль стэка
{
obj* q = *begin;
if (r == 1)
{
while (q != NULL) // пока q не NULL
{
cout << "\t" << q->item;
q = q->next;
cout << endl;
}
}
else if (r == 2)
{
while (q != NULL) // пока q не NULL
{
cout << "\t" << q->item;
q = q->prev;
cout << endl;
}
}
}
Соседние файлы в папке 1 курс различные лабы и их куски. Что-то полезное тут есть