Как выполнить с помощью стека?

Как реализовать следующую задачу с помощью стека из 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;
    }
}

Ответы (0 шт):