⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lundu.cpp

📁 1. 汽车轮渡口
💻 CPP
字号:
//用字符表示命令,h表示一辆货车请求过江,k表示一辆客车请求过江,用两队列分别模拟等待的货车和客车队列
//用s表示管理处允许一辆车上船,规定:在现有的等待队列中的车的基础上按规定上船
//用e表示停业或程序结束

#include <iostream>
using namespace std;

#define QUEUE_INIT_SIZE 100
#define QUEUE_INCREMENT 10
typedef char QElemType;
typedef struct{                      //类型定义 
 QElemType  *elem;
 int        front;
 int        rear;
 int        queuesize;
 int        incrementsize;
} SqQueue;


void InitQueue_Sq(SqQueue &Q)            //初始化
{Q.elem=new QElemType[QUEUE_INIT_SIZE];
 Q.front=Q.rear=0;
 Q.queuesize=QUEUE_INIT_SIZE;
 Q.incrementsize=QUEUE_INCREMENT;
}

void EnQueue_Sq(SqQueue &Q,QElemType e)     //入队  
{ void IncrementQueueSize(SqQueue &Q);
  if(((Q.rear+1)%Q.queuesize)==Q.front) IncrementQueueSize(Q);
  Q.elem[Q.rear]=e;
  Q.rear=(Q.rear+1)%Q.queuesize;
}

void IncrementQueueSize (SqQueue &Q)             //增长队列空间 
{QElemType *a=new QElemType[Q.queuesize+Q.incrementsize];
 for(int i=0;i<Q.queuesize;i++)
 a[i]=Q.elem[(Q.front+i)%Q.queuesize];
 delete []Q.elem;
 Q.elem=a;
 Q.front=0;
 Q.rear=Q.queuesize-1;
 Q.queuesize+=Q.incrementsize;
}




QElemType DeQueue_Sq(SqQueue &Q)    //出队 
{QElemType e;
 e=Q.elem[Q.front];
 Q.front=(Q.front+1)%Q.queuesize;
 return e;
}


int main()  //主函数
{
 cout<<"命令H:货车请求等待"<<endl;   
 cout<<"命令K:客车请求等待"<<endl;
 cout<<"命令S:允许一辆车上船"<<endl;
 cout<<"命令E:停业所有车出队和下船"<<endl;  //命令提示 
 SqQueue QH,QK;
  InitQueue_Sq(QH);
  InitQueue_Sq(QK);              //构建两个队列 
 int hcount=0,kcount=0;      //整型变量表示当前队列中车的数量
 int i=1;int m=1;        //m用作数组下标  
 bool flag=1;char ch;char a[100];       //数组a模拟船上 车的排队  
while(flag)          
{
 

 cout<<"请输入命令:";
 cin>>ch;

 if((ch=='H')||(ch=='h'))
 {EnQueue_Sq(QH,'H');hcount++;}     //货车入队等待
 else if((ch=='k')||(ch=='K'))
 {EnQueue_Sq(QK,'K');kcount++;}     //客车入队等待
 else if((ch=='S')||(ch=='s'))        //按规定上一辆车 
  {if((kcount!=0)&&(i<=4)){a[m]=DeQueue_Sq(QK);kcount--;i++;m++;}
    else if(hcount!=0){a[m]=DeQueue_Sq(QH);hcount--;m++;i=1;}
    else{i=1;cout<<"可能无车等待,请再输入一次上车命令以便检验,如再次出现此话则无车等待"<<endl;}
	if((m-1)%10==0)          //上够十辆车就开船
	{for(int j=m-10;j<m;j++)
	{cout<<a[j]<<",";}
	cout<<endl;} 
 }
 else if(ch=='E'||ch=='e')
  {cout<<"停业,所有车出队,下船"<<endl; flag=0;}
 else cout<<"输入命令非法"<<endl;
 }//endwhile

return 0;
}
  
 
























⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -