当前位置:文档之家› 火车重排问题

火车重排问题

实验报告
DeQueue(H[j],front);
EnQueue(Outqueue,front);
printf("缓冲区H[%d]头元素%d————>出轨队列\n",j,front);
nextout++;
break;}}
}
}
(3)输出
printf("出轨顺序:");
while(!QueueEmpty(Outqueue))
{DeQueue(Outqueue,a);
printf("%d ",a); }
四、界面设计
程序包含输入提示功能

还有输入报错
五、运行测试与分析
(1)运行程序,显示提示,
(2)输入入轨顺序
(3)数据结果输出
六、实验收获与思考
通过本次实验,熟练掌握了构建队列及相关操作函数的操作。

关于火车重排
#include"stdio.h"
#include "stdlib.h"
#define MAXSIZE 1000
#define N 7
typedef struct {
int *base;//初始化动态分配空间
int front;//头指针
int rear;//尾指针
}SqQueue;
int InitQueue(SqQueue &Q){
Q.base=(int *)malloc(MAXSIZE*sizeof(int));
if(!Q.base) exit(-2);
Q.front=Q.rear=0;
return 1;}
int DestroyQueue(SqQueue &Q){//销毁队列
free(Q.base);
return 1;}
int QueueEmpty(SqQueue Q){//判断队空
return (Q.front-Q.rear)%100==0 ? 1: 0;}
int Getfront(SqQueue Q ,int &front){//读取队头元素if(QueueEmpty(Q)) exit(0);
front=Q.base[Q.front];
return 1;}
int Getrear(SqQueue Q,int &rear){//读取队尾元素if(QueueEmpty(Q)) exit(0);
rear=Q.base[Q.rear-1];
return 1;}
int EnQueue(SqQueue &Q,int &e){//入队
if((Q.rear+1)%MAXSIZE==Q.front) exit(-2);
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
return 1;}
int DeQueue(SqQueue &Q,int &e){//出队
if(Q.front==Q.rear) exit(0);
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
return 1;}
int main(){
SqQueue H[N],Inqueue,Outqueue;
int i,j,a,b,k,nextout,n,front;
InitQueue(Inqueue);
InitQueue(Outqueue);
for(i=0;i<N;i++)//初始化缓冲队列
InitQueue(H[i]);i=1;
printf("输入车厢总数N: ");
scanf("%d",&k);
while(k<=0||k>N){printf("车厢数不得超过指定值7 请重新输入: ");
scanf("%d",&k); }
printf("输入车厢入轨顺序R: ");
while(i<=k){
scanf("%d",&a);
EnQueue(Inqueue,a); i++;}
i=0;j=0;nextout=1;
while(nextout<=k){//循环出轨
if(!QueueEmpty(Inqueue))
{DeQueue(Inqueue,a);//入轨队列非空,将入轨头元素出队
if(a==nextout) {//入轨头元素等于标记元素,将该元素入到出轨队列
EnQueue(Outqueue,a);
printf("入轨队列头元素%d————>出轨队列\n",a);
nextout++;}
else { //该操作完成将入轨对头元素入到缓冲区队列
b=0;j=0;int r[N]={0};
for(i=0;i<N;i++){
if(!QueueEmpty(H[i])){
Getrear(H[i],r[i]);}}
for(i=0;i<N;i++){
if(b<r[i]&&r[i]<a) {b=r[i];j=i;}}
if(b!=0) {EnQueue(H[j],a);//如果入轨头元素大于缓冲区对列最大尾元素,入队
printf("入轨队列头元素%d————>缓冲区队列H[%d]\n",a,j);}
else {//寻找空的缓冲区队列,并入队。

for(i=0;i<N;i++){
if(QueueEmpty(H[i])) {EnQueue(H[i],a);
printf("入轨队列头元素%d-->缓冲区队列H[%d]\n",a,i);break;}} if(i>=N){
printf("connot arrange!!"); break;} }}} //如果没有空的缓冲区对列,输出cannot arrange
for(j=0;j<N;j++){ if(!QueueEmpty(H[j])) {Getfront(H[j],front);
if(front==nextout){
DeQueue(H[j],front);
EnQueue(Outqueue,front);
printf("缓冲区H[%d]头元素%d————>出轨队列\n",j,front);
nextout++;
break;}}}}
printf("出轨顺序:");
while(!QueueEmpty(Outqueue)){//出队的顺序DeQueue(Outqueue,a);
printf("%d ",a); }
for(i=0;i<N;i++)
DestroyQueue(H[i]);
DestroyQueue(Inqueue);
DestroyQueue(Outqueue);
system("pause");
return 0;}。

相关主题