📄 text1.c
字号:
#include"stdio.h"
status InitStack(sqstack &s,int n)
{ s.base=(LelemType)malloc(n*sizeof(elemType));
if(!s.base) exit(OVeRFLOW);
s.top=s.base;
s.stacksize=n;
return OK;
}
status Push(sqstack &s,elemType e)
{ *s.top=e;
s.top++;
return OK;
}
status Pop(sqstack &s,elemType &e)
{if(s.top==s.base) return eRROR;
e=*--s.top;
return OK;
}
status InitQueue(LinkQueue &Q)
{ Q.front=Q.rear=(Queueptr)malloc(sizeof(QNode));
if(!Q.front) exit(OVeRFLOW);
Q.front->next=NULL;
return OK;
}
status destroyQueue(LinkQueue &Q)
{ while(Q.front){
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return OK;
}
/*status Gethead( LinkQueue s,elemType &e)
{ if(s.front==s.rear) return eRROR;
e=s.front->data;
return OK;
}*/
status enQueue(LinkQueue &Q,elemType e)
{ Queueptr p;
Q.rear->data=e;
p=(Queueptr)malloc(sizeof(QNode));
if(!p) exit(OVeRFLOW);
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
status deQueue(LinkQueue &Q,elemType &e)
{ if(Q.front==Q.rear) return eRROR;
Queueptr p=Q.front;
e=p->data;
Q.front=p->next;
if(Q.rear==p->next) Q.rear=Q.front;
free(p);
return OK;
}
status InitList(tagList &L)
{ L.head=new(LNode);
L.tail=L.head;
L.size=0;
for(int i=0;i<5;i++)
L.head->ch[i]='0';
return OK;
}
status MakeNode(ListType t,char c[])
{ for(int i=0;i<5;i++)
t->ch[i]=c[i];
t->next=NULL;
return OK;
}
status Insert(tagList &L,ListType t)
{ L.tail->next=t;
L.tail=t;
L.tail->next=NULL;
return OK;
}
status judgenum(char num[])
{ int i=0;
ListType q=NULL;
if(L.size>0) q=L.head->next;
while(q)
{ if(strcmp(num,q->ch)) i=1;
q=q->next;
}
return i;
}
void deleteL(char num[])
{ ListType q=L.head->next,R=L.head;
while(q)
{ if(!strcmp(q->ch,num))
{ R->next=q->next;
if(q==L.tail) L.tail=R;
delete(q);
q=R->next;
L.size--;
}
else {R=R->next;q=q->next;}
}
}
void count(elemType q,char wh)
{ cout<<ENDL; ?<<elem- cout<<?停车时间: } ?<<endl; 分钟 元 cout<<? cout<<?0.05?; else cout<<?0.1?; if(wh="='g')" ?; cout<<?收费标准: cout<<?小汽车 { cout<<?0.15?; cout<<?0.3?; cout<<?卡车 if(q.type="='p')" cout<<?0.075?; {cout<<?客车 型: cout<<?车>time-q.time)<<" 元";
else cout<<0.1*(elem->time-q.time)<<" 元";
}
else { if(q.type=='p')
cout<<0.075*(elem->time-q.time)<<" 元";
else if(q.type=='t')
cout<<0.15*(elem->time-q.time)<<" 元";
else cout<<0.05*(elem->time-q.time)<<" 元";
}
cout<<ENDL; } { elem- elem="new(elemType);" n; int ; c="e" char main() cout<<endl; cout<<?-?; for(n="1;n<80;n++)">time=0;
printmessage();
InitList(L);
cout<<" 1.请输入车场总车位数:";
cin>>n;
InitStack(garage,n);
InitQueue(waitway);
do{
Readmessage(c);
Interpret(c);
}while(c!='e');
return 0;
}
void printmessage()
{
printf("\n");
for(n=1;n<80;n++)
printf("-");
printf("\n");
printf(" 广 东 工 业 大 学 停 车 场 自 动 模 拟 管 理 系 统");
printf("\n");
for(n=1;n<80;n++)
printf("-");
printf("\n\n");
printf(" 请用户按提示信息输入:\n");
for(n=1;n<80;n++)
printf("-");
}
void Readmessage(char &c)
{
char h;
char num[5];
int time=0;
again1:;
cout<<"\n 2.请输入车辆的情况,'a'代表进站,'d'代表出站,'e'代表结束:";
cin>>c;
if(c!='a'&&c!='d'&&c!='e')
{ cout<<" 输入不正确,请按要求重新输入!"<<ENDL;GOTO cout<<? cout<<endl; cin 3.请输入该车的类型,?p?代表客车,?t?代表卡车,?c?代表小汽车:?; again2:; end; goto if(c="='d')" again3;} {cout<<endl;goto again1;}>>h;
if(h!='p'&&h!='t'&&h!='c')
{ cout<<" 输入不正确,请按要求重新输入!"<<ENDL;GOTO elem- again2;}>type=h;
cout<<ENDL; cout<<? cin 4.请输入该车的车牌:?; again3:;>>num;
if(c!='d')
{if(judgenum(num)) {cout<<" 该车牌已存在!请重新输入!"<<ENDL;GOTO } else { again3;} strcpy(elem- Insert(L,s); MakeNode(s,num); s="new(LNode);" s; ListType>num,num);
cout<<ENDL; cout<<? else cin if(c="='a')" 5.请输入该车出车场的时间:?; 5.请输入该车进车场时间:?; again4:;>>time;
if(time<=elem->time)
{ cout<<" 时间必须递增!请重新输入!"<<ENDL; } elem- goto again4;>time=time;
cout<<ENDL; } cout<<? else { int ; char if(c="='a')" s="garage.base;" while(strcmp(s- wh="g" q; Queueptr e; elemType s,g; LelemType k="1;" j++; ----------?; 请停在便道!?<<endl; enQueue(waitway,*elem); else{ i++; ---------------------------?; 号车位!?<<endl; i<<? ?<< 请停在车场第 Push(garage,*elem); {if(garage.top-garage.base<garage.stacksize) c) Interpret(char void end:;>num,elem->num)&&k<I) { if(k s++;k++;}>=i)
{ q=waitway.front;
k=1;
while(strcmp(s->num,elem->num)&&k<J) } else if(wh="='g')" { ; wh="w" count(q- cout<<?-----------------------------------该车在便道内---------------------------------?<<endl; count(*s,wh); cout<<?-----------------------------------该车在车场内--------------------------------?<<endl; 计算停车费 if(k<j) q++;k++;}>data,wh);
}
else { cout<<" 该车没在停车场内!"<<ENDL<< if(wh="='g')" { deleteL(s- i--; 从车场开走 让路情况 end;} _________________?<<endl;goto ?>num);
if(++s!=garage.top)
{
giveway.base=s;
giveway.top=garage.top;
giveway.stacksize=giveway.top-giveway.base;
cout<<" 为该车让路,须从入口退出车场的车辆顺序: ";
g=giveway.top;
while(g!=giveway.base)
{ g--;
cout<<" "<<G->num;
}
cout<<ENDL; } ?<<endl; cout<<? else if(wh="='w')" { i++; deleteL(s- j--; 从便道上开走 ______________________________________________________?<<endl; 的车进车场,停在第?<<i<<?号车位! ?<<e.num<<? 请便道内车牌为 Push(garage,e); if(deQueue(waitway,e)) 便道上的车辆数目不为零 if(waitway.front!="waitway.rear)" garage.top--; {*s="*g;s++;g++;}" while(g!="giveway.top)" g="giveway.base;" s--; 不必让路,该车可直接从车场开走!?<<endl;>num);
if(q!=waitway.front)
{
LinkQueue Q;
InitQueue(Q);
Queueptr p=waitway.front;
do{ enQueue(Q,p->data); //copy它前面的车辆情况
p=p->next;
}while(p->next!=q);
p=waitway.front;
Queueptr M=q->next;
do{ p->data=M->data;
p=p->next;
M=M->next;
}while(M);
cout<<" 便道上为该车让路的车辆顺序: ";
cout<<" __________________________";
Queueptr N=Q.front;
do{ cout<<" "<<N->data.num;
p->data=N->data;
p=p->next;
N=N->next;
}while(N!=Q.rear);
destroyQueue(Q);
delete(waitway.rear);
waitway.rear=p;
}
}
else cout<<" 不必让路,该车可直接从便道开走!"<<ENDL; } end:; pre }<>
<SCRIPT src="/inc/gg_read2.js"></SCRIPT>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -