队列车厢编组源码

利用队列实现车厢编组问题。
假设队列元素是char类型,'H'表示硬座,'S'表示软卧,
队列A表示一组硬座和卧铺混编的车厢。
要求把队列A中的硬座车厢移动到队列B,
队列A中的卧铺车厢移动到队列C,
同时保留原有硬座车厢之间和软卧车厢之间的先后顺序不变。
如HSHHSHSSHH,
分别输出软卧车组:SSSS和硬座车组:HHHHHH。


//循环队列实现车厢编组
#include <stdio.h>
#include <stdlib.h>
#define OK   1
#define ERROR   0
#define OVERFLOW  -2
#define TRUE 1
#define FALSE  0
typedef  char   ElemType;
typedef int  Status;
//----- 队列的顺序存储表示 -----
#define  MAXQSIZE  30 // 存储空间的初始分配量
typedef struct {
ElemType  *base;
int front;
int rear;
int maxSize;
} SqQueue;
// 构造一个空队列 Q
Status InitQueue(SqQueue &Q){
Q.base=(ElemType*)malloc(MAXQSIZE*sizeof(ElemType));
if(!Q.base)	exit(OVERFLOW);
Q.front=Q.rear=0;
Q.maxSize = MAXQSIZE;
return OK;
}
//判队列是否为空
Status QueueEmpty (SqQueue Q) {
if(Q.rear==Q.front) return TRUE;
else return FALSE ;
}
//入队函数
Status EnQueue (SqQueue &Q, ElemType e) {
	if((Q.rear +1)%Q.maxSize ==Q.front )
		return ERROR;
	Q.base [Q.rear ] = e;
	Q.rear = (Q.rear +1)%Q.maxSize ;
	return OK;
}
//出队函数
Status DeQueue (SqQueue &Q, ElemType &e) {
//请在此填写代码,将该算法补充完整,参见书本和课件相关章节
	if(QueueEmpty(Q))	return ERROR;
	e = Q.base [Q.front ];
	Q.front = (Q.front +1)%Q.maxSize ;
	return OK;
}
//输出循环队列函数
void OutQueue(SqQueue Q)
{ 	ElemType e;
if(QueueEmpty(Q)){
printf("这是一个空队列!");
}
else{
		while(!QueueEmpty(Q)){
			DeQueue(Q,e);
			printf("%6c", e);
}
printf("\n");
}
}
void Arrange(SqQueue A, SqQueue &B, SqQueue &C){
	ElemType  e;
	InitQueue(B);
	InitQueue(C);
	while(FALSE==QueueEmpty(A)){
		DeQueue(A,e);
		if(e == 'H')	EnQueue(B,e);
		else EnQueue(C,e);
	}

}
//主函数
int main()
{ 	SqQueue A,B,C;
ElemType e;
InitQueue(A);
printf("请输入软卧S和硬座H的一个组合车组:");
for(scanf("%c", &e); e!='\n';)	{
	EnQueue(A,e);
	scanf("%c",&e);
}
Arrange(A,B,C);
printf("硬座车组:");
OutQueue(B);
printf("软卧车组:");
OutQueue(C); 
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梖梖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值