利用栈编写一个C++ 程序:设停车场内只有一个可以停放n辆汽车的狭长通道,且只有一个大门可以供汽车进出,编写停车场管理程序,使其具有如下功能: 1.汽车在停车场内按车辆到达先后顺序停车; 2.停车场已满,在候车场候车; 3.一旦有车离开,候车场第一辆车开入停车场; 4.当停车场有车离开时,在它之后进入的车辆要先离开,待该车开出停车场后,其它车辆再按原次序进入车场; 5.每辆汽车离开停车场时按停车时间长短缴纳费用;
时间: 2024-02-28 15:54:33 浏览: 25
好的,我可以帮你写一个基于栈的 C++ 停车场管理程序。下面是代码实现:
```c++
#include <iostream>
#include <stack>
#include <vector>
#include <unordered_map>
using namespace std;
class Car {
public:
int id;
int arriveTime;
int leaveTime;
int parkingTime;
Car(int i, int t) : id(i), arriveTime(t), leaveTime(0), parkingTime(0) {}
};
class ParkingLot {
private:
int capacity;
stack<Car> parkingStack;
stack<Car> waitingStack;
unordered_map<int, int> carIndexMap;
vector<Car> carList;
public:
ParkingLot(int c) : capacity(c) {}
bool isFull() {
return parkingStack.size() >= capacity;
}
void park(Car car) {
if (isFull()) {
cout << "The parking lot is full. Please wait." << endl;
waitingStack.push(car);
return;
}
parkingStack.push(car);
int index = parkingStack.size() - 1;
carIndexMap[car.id] = index;
carList.push_back(car);
}
void leave(int carId, int leaveTime) {
if (carIndexMap.find(carId) == carIndexMap.end()) {
cout << "The car is not in the parking lot." << endl;
return;
}
int index = carIndexMap[carId];
Car car = carList[index];
car.leaveTime = leaveTime;
car.parkingTime = leaveTime - car.arriveTime;
parkingStack.pop();
carIndexMap.erase(carId);
for (int i = index; i < carList.size() - 1; i++) {
carList[i] = carList[i + 1];
carIndexMap[carList[i].id] = i;
}
carList.pop_back();
if (!waitingStack.empty()) {
Car waitingCar = waitingStack.top();
waitingStack.pop();
park(waitingCar);
}
cout << "The car " << carId << " has left the parking lot. The parking time is " << car.parkingTime << "." << endl;
}
};
int main() {
ParkingLot parkingLot(5);
parkingLot.park(Car(1, 0));
parkingLot.park(Car(2, 1));
parkingLot.park(Car(3, 2));
parkingLot.leave(2, 3);
parkingLot.park(Car(4, 4));
parkingLot.park(Car(5, 5));
parkingLot.park(Car(6, 6));
parkingLot.leave(3, 7);
parkingLot.leave(1, 8);
parkingLot.leave(4, 9);
parkingLot.leave(6, 10);
parkingLot.leave(5, 11);
return 0;
}
```
这个程序中,我们定义了一个 `Car` 类来表示车辆,包含车辆编号、到达时间、离开时间和停车时间四个属性。我们还定义了一个 `ParkingLot` 类来表示停车场,包含停车场容量、停车栈、等待栈、车辆索引映射和车辆列表等成员变量,以及判断停车场是否已满、停车和离开等方法。在 `main` 函数中,我们模拟了几辆车的到达和离开过程,以测试停车场管理程序的功能。
需要注意的是,这个程序只是一个简单的实现,还有很多细节问题需要考虑,比如停车场容量的动态调整、车辆离开时的缴费机制等等,需要根据实际需求进行改进和完善。