{
int carnumber; int money; time_t entertime; time_t leavetime; }Car;
typedef struct ParkList{ Car *head; int length; int listsize; }ParkList;
typedef struct WaitNode{ Car WaitCar; WaitNode *next; }WaitNode,*WaitList;
typedef struct LeaveNode{ Car LeaveCar; LeaveNode *next; }LeaveNode,*LeaveList;
int init_LeaveList(LeaveList &L){
L = (LeaveList)malloc(sizeof(LeaveNode)); L->next = NULL; }
int init_WaitList(WaitList &WL,Car wc){ WL = (WaitList)malloc(sizeof(WaitNode)); WL->WaitCar = wc; WL->next = NULL; }
void Put_LeaveList(LeaveList &L,Car lc){ LeaveList p = L; if(p==NULL){ return ; }
while(p->next){ p = p->next; }
LeaveList q = (LeaveList)malloc(sizeof(LeaveNode)); q->LeaveCar = lc;
p->next = q; q->next = NULL;
q->LeaveCar.money = (q->LeaveCar.leavetime-q->LeaveCar.entertime)*PRICE; }
void Putelem_WaitList(WaitList &WL,Car wc){ WaitList p = WL; if(p==NULL){
init_WaitList(WL,wc); return ; }
while(p->next){ p = p->next; }
WaitList q = (WaitList)malloc(sizeof(WaitNode)); q->WaitCar = wc; p->next = q; q->next = NULL; }
void delete_WaitList(WaitList &WL,Car &c){ if(WL==NULL){ return ; }
WaitList p = WL; c = p->WaitCar; if(WL->next==NULL){ WL=NULL; } else {
WL = WL->next; } free(p); }
Car CreateCar(int carnum){
Car *pc = (Car *)malloc(sizeof(Car)); pc->carnumber = carnum; pc->entertime = time(NULL); return *pc; }
int init_Parklist(ParkList &p) {
p.head = (Car *)malloc(LIST_INIT_SIZE*sizeof(Car)); if(!p.head) return 0; p.length = 0;
p.listsize = LIST_INIT_SIZE; return 1; }
int put_ParkList(ParkList &p,WaitList &WL,Car c) {
if(p.length==p.listsize){ if(WL==NULL) {
init_WaitList(WL,c); }
else Putelem_WaitList(WL,c); return 0; }
Car *pc = p.head; pc[p.length] = c; p.length += 1; return 1; }
int insert_ParkList(ParkList &p,WaitList &WL,int i) {
Car c;
delete_WaitList(WL,c);
if(i<0||i>=p.length){ return 0;} Car *pc = p.head;
for(int j=p.length-1;j>i-1;j--) {
pc[j+1]=pc[j]; } pc[i]=c; p.length += 1; return 1; }
int delete_ParkList(ParkList &p,LeaveList &L,int i) {
if(i>=0&&i
Car *pc = p.head;
pc[i].leavetime = time(NULL); Put_LeaveList(L,pc[i]);
for(int j=i;j
pc[j]=pc[j+1]; }
p.length -= 1; return 1; }
else return 0; }
void showParkList(ParkList p) {
if(p.head!=NULL) {
Car *pc = p.head; printf(\); for(int j=0;j
printf(\,pc[j].carnumber,ctime(&pc[j].entertime)); }
printf(\); } }
void showWaitList(WaitList WL){ WaitList p = WL; printf(\); while(p){
printf(\,p->WaitCar.carnumber,ctime(&(p->WaitCar.entertime))); p = p->next; } }
void showLeaveList(LeaveList L){ LeaveList p = L->next; printf(\); while(p){
printf(\,p->LeaveCar.carnumber, ctime(&(p->LeaveCar.entertime)));
printf(\,ctime(&(p->LeaveCar.leavetime)),p->LeaveCar.money); p = p->next; } }
int main() {
ParkList p; LeaveList L; WaitList WL=NULL; init_LeaveList(L); init_Parklist(p); srand(time(NULL)); Car c;
int i = 1,n=0; int dic = 0; int index = 0; int time = 0; while(i<=100){ dic = rand()%2; switch(dic){ case 1:
c = CreateCar(1000+i); put_ParkList(p,WL,c); break; case 0:
if(p.length==0){ break; } else {
index = rand()%p.length; delete_ParkList(p,L,index); if(WL!=NULL){
insert_ParkList(p,WL,index); } break; } default: break; } i++; }
showParkList(p); showWaitList(WL); showLeaveList(L);
}
4、 某银行营业厅共有6个营业窗口,设有排队系统广播叫号,该银行的业务分为公积金、
银行卡、理财卡等三种。公积金业务指定1号窗口,银行卡业务指定2、3、4号窗口,理财卡业务指定5、6号窗口。但如果5、6号窗口全忙,而2、3、4号窗口有空闲时,