c列车编组

2 篇文章 0 订阅

【问题描述】用于列车编组的铁路转轨网络是一种栈结构,其中,右边作为输入端,左边作为输出端。当右边轨道上的车皮编号顺序为1,2,3,4时,如果执行操作为进栈、进栈、出栈、进栈、进栈、出栈、出栈、出栈,则在左边轨道上的车皮编号顺序为2,4,3,1。编写一个算法,输入n个整数,表示右边轨道上n节车皮的编号,用上述转轨栈对这些车皮重新编排,使得编号为奇数的车皮都排在编号为偶数的车皮的前面,编号为偶数的车皮序列与输入时的序列正好相反。利用顺序栈和顺序队列的实现。

【输入形式】输入n个整数,数值之间空格分隔,以回车结束。

【输出形式】保持数值之间的前后位序,显示的结果为奇数在前偶数在后,偶数输出序列为输入序列的逆置,数值之间空格分隔。

【样例输入】1 2 3 4 5
【样例输出】1 3 5 4 2

【样例输入】4 1 3 2
【样例输出】1 3 2 4
【样例说明】
【评分标准】

出栈:判断栈空

进栈:判断栈满

#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
typedef struct stack
{
	int *top;
	int *base;
	int stacksize;
}SqStack;
void InitStack(SqStack &s)
{
	s.base = s.top = new int[100];   //指针开创空间 需要用new int[100]
	if (!s.base)
		exit(1);
	s.stacksize = 100;               //整形变量 直接赋值开创
}
int  Empty(SqStack &s)
{
	if (s.base == s.top)
		return 1;
	else
		return 0;
}
void Push(SqStack &s,int n)          //进栈考虑栈满情况
{
	if (s.top - s.base == s.stacksize)
		exit(1);
	*s.top = n;                    //先赋值 再移动
	s.top++;
}
int Pop(SqStack &s)
{
	int t;
	if(s.base==s.top)       
	   exit(1);
	else
	{
		s.top--;                  //先移动 再赋值
		t = *s.top;
		return t;
	}
}
int main()
{
	SqStack s;
	InitStack(s);
	int n;
	char ch = 0;
	while (ch != '\n')
	{
		cin >> n;
		ch = getchar();
		if (n % 2 == 0)        //n为偶数 先进后出 
		{
			Push(s, n);
		}
		else
			cout << n << " ";  //n为奇数 直接打印
	}
	while (Empty(s) == 0)
	{
		int t;
		t = Pop(s);            //栈内的偶数进行打印
		cout << t << " ";
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值