当前位置:首页 > 停车场管理-数据结构课程设计源代码
Status QueueEmpty(LinkQueue Q)//判断队空 {
if (Q.front == Q.rear) return OK; else return ERROR; }
Status EnQueue(LinkQueue &Q, Car e)//入队 {
QueuePtr p; p = new QNode;
if (!p) return ERROR; p->data = e; p->next = NULL; Q.rear->next = p; Q.rear = p; return OK; }
Status DeQueue(LinkQueue &Q, Car &e)//出队 {
QueuePtr p;
if (Q.front == Q.rear) return ERROR; p = Q.front->next; e = p->data;
Q.front->next = p->next;
if (Q.rear == p) Q.rear = Q.front; delete p; return OK; }
Car* LocateQ(LinkQueue Q, Car e)//查找队列元素 {
QueuePtr p = Q.front; while (p != NULL) {
if (e.num == p->data.num) { Car *car0=&p->data; return car0; }
p=p->next; }
return NULL;
}
3.模拟停车场管理系统的操作(部分伪码如下) //满足需求2,3 :入场时的输出
void Arrive(SqStack &Park, LinkQueue &Wait, Car &car, int &pos, int &ppos) {
if (!StackFull(Park)) {//停车场不满 cout << \停车场未满,可以进入。\ Push(Park, car);
cout << \请停到 \号车位\
cout << \ cout << \车牌号\车型\进入时间\车位号\
cout << \
car.time << '\\t' << \
cout << \ pos++; }
else {//停车场满,要到便道等候
cout << \停车场已满,请到便道等候。\ EnQueue(Wait, car); ppos++;
car.path_time = car.time; } }
//满足需求2,3:离场时的输出 void Departure(SqStack &Park, LinkQueue &Wait, Car &car, int &pos, int &ppos) {
int price[3]={4,6,12}; //停车场收费标准 int pathprice[3]={2,3,6}; //便道收费标准 if (!(car0 = Locate(Park, car))) {
if(!(car0 = LocateQ(Wait, car))){
cout << \哈哈输入有误,请重新输入\ return; } }
if(!Locate(Park, car)) {t=0; pt = car.time - car0->path_time;} //车还未进停车场
else {t = car.time - car0->time; pt = car0->time - car0->path_time;}//车已经进了停车场
if (car.time
else {
money = t*price[car0->type-1] + pt*pathprice[car0->type-1];
cout <<\您的停车费用为:\
cout <<\ cout <<\车牌号\车型\停车费用\离开时间\场内时间\便道时间\
cout <<\ \\
\
cout <<\ }
if(!Locate(Park, car)) {//要走的车在便道上 InitQueue(Temp);
QueuePtr Qcart=Wait.front->next;
while(Qcart->data.num!=car.num){//前面的车让道
cout<<\请\号车让道并自行排到便道尾\
Qcart=Qcart->next;
DeQueue(Wait, carn); ppos--; EnQueue(Temp, carn); }
DeQueue(Wait, carn); ppos--; Qcart=Temp.front->next;
while(!QueueEmpty(Temp)){//让道的车回到便道 EnQueue(Wait, Qcart->data); ppos++; DeQueue(Temp, carn); Qcart=Qcart->next; } }
else {//要走的车在停车场里 InitStack(Temp);
*cart = Park.top - 1;
while (!StackEmpty(Park)) { //停车场不空 if (cart->num == car.num) break; Push(Temp, *cart); --cart; } pos--;
Park.top = car0; //腾出空位 carr = (Temp.top - 1);
while (!StackEmpty(Temp)) {//临时栈不空 Pop(Temp, *carr); Push(Park, *carr); --carr; }
while (!QueueEmpty(Wait) && !StackFull(Park)) {
if (!StackFull(Park)) {//停车场不满,便道上的车进栈
cout << \停车场不满,请便道第一辆车进入停车场\ DeQueue(Wait, carn); ppos--; carn.time = car.time; Push(Park, carn); } } } }
4.主函数和其他函数的伪码算法 int main() {
int pos = 1, ppos = 1;//pos为汽车在停车场的位置,ppos为汽车在便道的位置 char i;//选择操作 InitStack(Park); InitQueue(Wait);
cout << \※※※※ 停车管理系统 ※※※※ \ cout << \
cout << \※ ※ 停车场容量:2辆 ※ ※ ※ \cout << \※ ※ 停车场收费:小汽车4元/小时 客车6元/小时 大卡车12元/小时 ※ \
cout << \※ ※ 便道收费:小汽车2元/小时 客车3元/小时 大卡车6元/小时 ※ ※ \
cout << \
cout << \※ -- ※ A 车辆到达 ※ -- ※ \ cout << \※ -- ※ D 车辆离开 ※ -- ※ \ cout << \※ -- ※ E 输入结束 ※ -- ※ \ cout << \车型:1小汽车 2客车 3大卡车\ cout << \<< endl; while (TRUE){
cout << \请输入A or D or E选择操作:\ cin >> i;
if (i != 'A'&&i != 'D'&&i != 'E'&&i != 'a'&&i != 'd'&&i != 'e') cout << \输入错误!请重新选择:\
else{
switch (i){
case 'A': case 'a':
cout << \有车到达停车场,\
cout << \请输入车辆车牌号码:\ cin >> car.num; cout << \请输入车型:\
cin >> car.type;
共分享92篇相关文档