#define stacksize 5
#include<cstdio>
#include<iostream>
#include<malloc.h>
#define LEN sizeof(linked_queue)
using namespace std;
void wait(int);
typedef struct sqstack
{
int data[stacksize];
int top;
}SqstackTp;
SqstackTp stopstack{{},-1}; //for 0 - 9
typedef struct linked_queue //waiting queue
{
int data;
struct linked_queue *next;
}LqueueTp;
LqueueTp waitqueue;
LqueueTp *fron=NULL,*rear=NULL;
int queuenum=0;
void gooutcar(int carnum)
{ int i=0;
while(stopstack.data[i]!=carnum&&i<=stopstack.top)
{
i++; //得出车正确位置来;
}
if(stopstack.data[i]<=stopstack.top)
{
cout<<"没有查询到该车辆的信息";
}
else{
for(int j=i;j<=stopstack.top;j++) //将该车删除
{ int temp=j+1;
stopstack.data[j]=stopstack.data[temp];
}
cout<<carnum<<"离开停车场,";
if(fron&&fron->next) //由于出队列导致的队列空 font后边rear所以加两个判断
{
stopstack.data[stopstack.top]=fron->next->data;
fron=fron->next;
cout<<stopstack.data[stopstack.top]<<"由便捷车道进入停车场"<<endl;
}
else{
cout<<"便捷车道空,无车辆进入停车场"<<endl;
stopstack.top--;
}
}
}
void stopcar (int carnum)
{
if(stopstack.top==stacksize-1)
{
cout<<"停车栈满,";
wait(carnum);
cout<<carnum<<"进入便捷车道"<<endl;
}
else
{
stopstack.top++;
stopstack.data[stopstack.top]=carnum;
cout<<carnum<<"由外界进入停车场"<<endl;
}
}
void tip()
{ int flag;
cout<<" *******************************\n"<<endl;
cout<<" 停车按1 出车按2\n 显示停车栈3 显示便捷车道4\n 退出系统按0 \n\n";
while(cin>>flag)
{
if(flag==1)
{ int carnum;
cout<<"请输入停车车牌号\n";
cin>>carnum;
stopcar(carnum);
}
else if(flag==2)
{
int carnum;
cout<<"请输入出车车牌号\n";
cin>>carnum;
gooutcar(carnum);
}
else if(flag==3)
{ cout<<"停车栈|";
for(int i=0;i<=stopstack.top;i++)
cout<<stopstack.data[i]<<" |";
cout<<endl;
}
else if(flag==4)
{
LqueueTp *p3=fron;
cout<<"便捷车道|";
if(p3)
{while(p3->next!=NULL)
{ p3=p3->next;
cout<<p3->data<<" |";
}
}
cout<<endl;
}
if(flag==0)
break;
//
cout<<"\n *****停车1*****出车2*****停车栈3*****便捷车道4*****退出系统按0*** \n";
}
}
void wait(int carnum)
{
if(queuenum==0)
{
queuenum++;
rear=fron=(LqueueTp *)malloc(sizeof(LqueueTp));
LqueueTp *p1;
p1=(LqueueTp *)malloc(sizeof(LqueueTp));
p1->data=carnum;
p1->next=NULL;
rear->next=p1;
rear=p1;
// cout<<"1中现实front"<<front->data;
// cout<<"1中现实rear"<<rear->data;
// cout<<"1中现实frontnext"<<front->next->data;
}
else
{
queuenum++;
LqueueTp *p1;
p1=(LqueueTp *)malloc(sizeof(LqueueTp));
p1->data=carnum;
p1->next=NULL;
// cout<<"2中现实p1next"<<p1->next->data;
// cout<<"2中现实p1data"<<p1->data;
rear->next=p1;
rear=p1;
}
}
int main()
{
tip();
return 0;
}
stack---停车场
最新推荐文章于 2025-01-12 09:34:26 发布