火车车厢重排问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
火车车厢重排问题源程序代码
#include
#include
typedef struct QNode
{
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front; // 头指针,若队列不空,指向队列头元素
QueuePtr rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置
} LinkQueue;
int InitQueue (LinkQueue &Q)// 构造一个空队列Q
{
Q.front = Q.rear = (QueuePtr) malloc (sizeof (QNode));
if (!Q.front) return 0; // 存储分配失败
Q.front->next=NULL;
return 1;
}
int EnQueue (LinkQueue &Q, int e) // 插入元素e为Q的新的队尾元素{
QueuePtr p;
p=(QueuePtr) malloc (sizeof (QNode));
if(!p) return 0; //队列满
p->data=e; p->next =NULL;
Q.rear->next =p;
Q.rear =p;
return 1;
}
int DeQueue (LinkQueue &Q) // 若队列不空,则删除Q的队头元素,用e 返回其值,并返回1; 否则返回0
{
QueuePtr p;
if (Q.front == Q.rear) return 0;
else
{
p=Q.front->next;
Q.front->next=p->next;
if(p->next==NULL)
Q.front=Q.rear;
int m=p->data;
free(p);
return m;
}
}
int Getfront(LinkQueue &Q)//取队头元素
{
if(Q.front==Q.rear) return 0;
else
return Q.front->next->data;
}
int Getrear(LinkQueue &Q)//取队尾元素
{
if(Q.front==Q.rear) return 0;
else
return Q.rear->data;
}
int IsEmpty(LinkQueue &Q)//判断队列为空
{
if (Q.front == Q.rear)
return 0;
return 1;
}
void Resort(LinkQueue &Q,LinkQueue *H,int k)//火车车厢重排{
int nowOut=1,no=1;
while(nowOut<10)
{
int flag=0,flag2=0;//车厢出轨标记初始化为0
int c=DeQueue(Q);
if(c==nowOut)
{
cout< } for(int j=0;j { if(IsEmpty(H[j])) { if(Getfront(H[j])==nowOut) { int m=DeQueue(H[j]); cout< } } } if(flag==0)//插入新的缓冲队列 { for(int i=0;i { if(IsEmpty(H[i])) { int n=Getrear(H[i]); if(c>n) { EnQueue(H[i],c);flag2=1;break; } } } if(flag2==0) { if(no==k) { cout<<"缓冲队列已用完,无法输出"< } else { EnQueue(H[no],c);no++; } } } } } void main() { LinkQueue Q,H[9]; int k,a[9]; InitQueue(Q); cout<<"请输入你需要的缓冲队列个数:"; cin>>k; for(int i=0;i InitQueue(H[i]); cout<<"请输入火车入轨的编号序列:"; for(int j=0;j<9;j++) { cin>>a[j]; EnQueue(Q,a[j]);