stack---停车场

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值