Как выполнить с помощью стека?
Как реализовать следующую задачу с помощью стека из stl(или с помощью своего шаблона класса stack)?
Условие задачи:
Гаражная стоянка имеет одну стояночную полосу, причем единственный въезд и единственный выезд находятся в одном конце полосы. Если владелец автомашины приходит забрать свой автомобиль, который не является ближайшим к выходу, то все автомашины, загораживающие проезд, удаляются, машина данного владельца выводится со стоянки, а другие машины возвращаются на стоянку в исходном порядке.
Написать программу, которая моделирует процесс прибытия и отъезда машин. Прибытие или отъезд задается командной строкой, которая содержит признак прибытия или отъезда и номер машины. При выезде автомашины со стоянки сообщение должно содержать число случаев, когда машина удалялась со стоянки для обеспечения выезда других автомобилей.
Реализация без стека из stl
#include <iostream>
#include <clocale>
#include <stack>
using namespace std;
struct Node
{
int number;
int info;
Node* p;
};
void add_car(Node** top, int number);
void delete_car(Node** top, int number);
int main()
{
setlocale(LC_ALL, "Russian");
int number;
Node* top1 = 0;
int menu = 0;
do
{
cout << "1.Добавить машину" << endl;
cout << "2.Удалить машину" << endl;
//cout << "4.Показать гараж" << endl;
cout << "3.Выход" << endl;
cin >> menu;
switch (menu)
{
case 1:
cout << "Введите номер машины" << endl;
cin >> number;
add_car(&top1, number);
system("pause");
system("cls");
break;
case 2:
cout << "Введите номер машины" << endl;
cin >> number;
delete_car(&top1, number);
system("pause");
system("cls");
break;
}
} while (menu != 3);
return 0;
}
void add_car(Node** top, int number)
{
Node* pv = new Node;
pv->p = 0;
pv->number = number;
cout << "Машина с номером " << ' ' << pv->number << ' ' << "въехала на стоянку" << endl;
pv->info = 0;
if (*top == 0)
{
*top = pv;
}
else
{
pv->p = *top;
*top = pv;
}
}
void delete_car(Node** top, int number)
{
Node* tmp = *top;
Node* tmp2 = *top;
Node* pr = 0;
while ((tmp != 0) && (tmp->number != number))
{
pr = tmp;
tmp = tmp->p;
}
if (tmp == 0)
{
cout << "Машины с данным номером нет на стоянке" << endl;
}
else
{
cout << "Машина с номером" << ' ' << tmp->number << ' ' << "выезжала со стоянки для беспечения выезда других автомобилей" << ' ' << tmp->info++ << ' ' << "раз" << endl;
while (tmp2 != tmp)
{
tmp2->info++;
tmp2 = tmp2->p;
}
if (pr != 0)
pr->p = tmp->p;
if (tmp == *top)
*top = (*top)->p;
delete tmp;
}
}