Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2019, 20:27   #1
LomionDK
Пользователь
 
Регистрация: 24.02.2019
Сообщений: 33
По умолчанию Удаление в стеке

Есть задание, надо удалить мин.значение в стеки, но не трогать первый и последний элементы.
Сделал все, но не знаю как игнорировать первый и последний элемент, удаляется минимальный со всего стека(
А так же, не знаю, как удалять по 1 элементу, т.е. не весь стек сразу.
Код:
#include <iostream>
#include <limits>
#include <conio.h>
using namespace std;
struct stack {
	int inf;
	stack *next;
};
stack* addElements(stack *begin);
void showStack(stack *begin);
void deleteStack(stack **begin);
int menu();
void input(int &a);
stack* deleteMinValue(stack *begin);
void deleteElem();
int main() {
	setlocale(0, "");
	stack *begin = NULL;
	while (true) {
		switch (menu())
		{
		case 1:
			cout << "Добавьте элемент:" << endl;
			begin = addElements(begin);
			cout << "Элемент добавлен" << endl;
			break;
		case 2:
			showStack(begin);
			break;
		case 3:
			deleteStack(&begin);
			break;
		case 4:
			begin = deleteMinValue(begin);
			break;
		case 5:
			begin = deleteElem();
			break;
		case 0:
			exit(0);
			break;
		default:
			cout << "Нет такого пунтка: ";
			break;
		}
	}
}
stack* addElements(stack *begin) {
	int inf;
	input(inf);
	stack *t = new stack;
	t->inf = inf;
	t->next = begin;
	return t;
}
void showStack(stack *begin) {
	cout << "--------------Stack--------------" << endl;
	stack *t = begin;
	while (t != NULL) {
		cout << "\t\t" << t->inf << endl;
		t = t->next;
	}
	cout << endl;
	system("pause");
}
void deleteStack(stack **begin) {
	while ((*begin) != NULL) {
		stack *t = *begin;
		(*begin) = (*begin)->next;
		delete t;
	}
	cout << "Очищен" << endl;
}
int menu() {
	system("cls");
	cout << "1 - Добавить элемент" << endl;
	cout << "2 - Показать элемент" << endl;
	cout << "3 - Очистить стек" << endl;
	cout << "4 - Удалить минимум" << endl;
	cout << "5 - Удалить элемент" << endl;
	cout << "0 - Выход" << endl;
	int choise;
	input(choise);
	return choise;
}
void input(int &a) {
	while (true)
	{
		cin >> a;
		if (cin.good()) {
			break;
		}
		cout << "Ошибка" << endl;
		cin.clear();
		cin.ignore(numeric_limits<streamsize>::max(), '\n');
	}
}
stack* deleteMinValue(stack *begin) {
	stack *t = begin, *p = begin->next;
	for (; p; p = p->next)
		if (p->inf < t->inf)  t = p;
	p = begin;
	if (p != t) {
		while (p->next != t)   p = p->next;
		p->next = t->next;
	}
	else
		begin = t->next;
	delete t;
	return begin;
}
LomionDK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти max и min в стеке shilovec5377 Общие вопросы C/C++ 3 25.06.2013 09:46
Максимум в стеке akademochka Общие вопросы C/C++ 5 12.03.2013 23:19
Инициализация, добавление и удаление элементов в СТЕКЕ 4atty Общие вопросы C/C++ 0 05.02.2013 18:24