发布网友 发布时间:2022-05-13 15:37
共1个回答
热心网友 时间:2023-10-14 17:36
就一个栈+一个队列 。
停车场就是一个栈,先进后出,
中间的车出栈的话让其前面的车依次入到另一个临时栈,这个要出去的车出栈后,再把另一个临时栈的元素依次入到这个停车场的栈。
等待入停车场的车 是一个队列。先进先出(有车来 添加到队列尾部,停车场的栈有空位,从队列头部取)。
下面是停车场的类定义
struct NODE
{
unsigned intCarID;
unsigned intEnterTime;
};
class CCarStation
{
public:
CCarStation(int size)
:
m_Size(size){}
void CheckStation()//检查栈中有空位 从queue中取一个car,构造一个NODE 加入栈,
{
if (m_station.size() < m_Size && m_waitCar.size() > 0)
{
NODE* carInfo = new NODE;
carInfo->CarID = m_waitCar.front();
carInfo->EnterTime = time(NULL);
m_station.push(carInfo);
m_waitCar.pop();
}
}
bool EnterStation(int CarID)
{
m_waitCar.push(CarID);
CheckStation();
}
void LeaveStation(int CarID)
{
stack<NODE*> temp;
while (!m_station.empty())
{
NODE* carInfo = m_station.top();
m_station.pop();
if (carInfo->CarID == CarID)
{
//根据时长,在这里收费。
int stayedTime = time(NULL) - carInfo->EnterTime;
delete carInfo;
}
else
{
temp.push(carInfo);
}
}
while (!temp.empty())
{
m_station.push(temp.top());
temp.pop();
}
CheckStation();
}
private:
intm_Size;
stack<NODE*>m_station;
queue<int>m_waitCar;
CCarStation(){};
};