資源簡介
設停車場是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內按車輛到達時間的先后順序,一次由北向南排列(大門在最南端,最先到達的第一輛車停放在車場的最北端),若車廠內已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入,當停車場內某輛車要離開時,在它之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進行管理的模擬程序。

代碼片段和文件信息
#include
using?namespace?std;
struct?car{
int?id;
int?arrive;
int?leave;
int?time;
car?*next;
};
struct?park{
???car?*base;
???int?top;
???int?size;
};
struct?queue{
car?*first;
car?*rear;
int?size;
};
int?iniqueue(queue?&q)
{
???q.first=NULL;
???q.rear?=NULL;
???q.size=0;
???return?1;
}
int?insert_queue(queue?&qcar?c)
{
???if(q.first==NULL)
???{
???q.first=new?car;
???*q.first=c;
???q.first->next=0;
???q.rear=q.first;
???q.size++;
???return?1;
???}
???else
???{
???q.rear->next=new?car;
???q.rear=q.rear->next;
???*q.rear=c;
???q.rear->next=0;
???q.size++;
???return?1;
???
???}
}
int??push(park?&park1car?w)
{
????park1.base[park1.top++]=w;
return?1;//進棧
}
car?pop(park?&park1)
{
if(park1.top)
return?park1.base[--park1.top];//出棧
}
car?delete_queue(queue?&q)
{
car?w;
w.arrive=w.id=w.leave=w.time=0;??w.next=0;
????if(!q.first)
{
cout<<“便道上無車“< return?w;
}
else
{
car?*p=q.first;
q.first=q.first->next;
w=*p;
delete?p;
q.size--;
return?w;
}
}
int?inistack(park?&sint?n)
{
s.base=NULL;
s.base=new?car[n];
if(!s.base)
{
cout<<“申請內存失敗“< return?0;
}
s.size=n;
s.top=0;
return?1;
}
int?stack_full(park?&park1)
{
if(park1.top return?0;
else?return?1;
}
int?queue_empty(queue?&q)
{
return?!q.size;
}
int?assign(queue?&qpark?&park1park?&park2char?ordercar?c)
{
if(order==‘A‘)
{
c.arrive=c.time;
insert_queue(qc);
if(!queue_empty(q))//隊列不空
{
???????????if(stack_full(park1))
???{cout<<“車牌為“< ???else
???{
???push(park1?delete_queue(q)?);
?//??cout< ???cout<<“車牌為“< ???}
}
}
else?if(order==‘D‘)
{
?
?for(;park1.top?&&?park1.base[park1.top-1].id!=c.id;)
?push(park2pop(park1));//讓車道
?if(!park1.top)//無找到
?{
?cout<<“no?this?car“< ?for(;park2.top;)
?push(park1pop(park2));
?return?0;
?}
?????????else
?{
?car?toleave=pop(park1);
?toleave.leave=c.time;
?c.leave=c.time;
?cout<<“車牌為“< ?????????????cout<<“總的停留時間為:“< ?for(;park2.top;)
?push(park1pop(park2));//停車場進車,park2退車?
?
?
?if(!queue_empty(q))//隊列不空
?{
???????????? ?push(park1delete_queue(q));//進車場,刪除隊列頭?
?park1.base[park1.top-1].arrive=c.leave;//
????????
?}
?}
}
else?if(order==‘E‘)
{
exit(0);
}
else
{
cout<<“非法輸入“< return?0;
}
return?1;
}
int?main()
{
park?park1park2;
queue?q;
int?n=0;
cout<<“停車場容量“< cin>>n;
inistack(park1n);
inistack(park2n);
iniqueue(q);
char?order=‘?‘;
int??id;
int??time;
car??w;
for(;;)
{
cout<<“請輸入車信息“?< cin>>order>>id>>time;
????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3475??2009-06-10?20:33??停車場管理\1.cpp
?????文件???????3341??2009-06-10?20:33??停車場管理\1.dsp
?????文件????????510??2009-06-10?20:43??停車場管理\1.dsw
?????文件??????41984??2009-06-10?20:43??停車場管理\1.ncb
?????文件??????48640??2009-06-10?20:43??停車場管理\1.opt
?????文件???????1316??2009-06-10?20:33??停車場管理\1.plg
?????文件?????548973??2009-06-10?20:33??停車場管理\Debug\1.exe
?????文件?????789404??2009-06-10?20:33??停車場管理\Debug\1.ilk
?????文件?????261005??2009-06-10?20:33??停車場管理\Debug\1.obj
?????文件????1996300??2009-06-06?18:59??停車場管理\Debug\1.pch
?????文件????1098752??2009-06-10?20:33??停車場管理\Debug\1.pdb
?????文件??????82944??2009-06-10?20:33??停車場管理\Debug\vc60.idb
?????文件?????110592??2009-06-10?20:33??停車場管理\Debug\vc60.pdb
?????目錄??????????0??2009-06-13?00:41??停車場管理\Debug
?????目錄??????????0??2009-06-13?00:41??停車場管理
-----------?---------??----------?-----??----
??????????????4987236????????????????????15
- 上一篇:銀行家算法C實現
- 下一篇:多機調度問題C++語言解決的源代碼
評論
共有 條評論