描述
注意空间哦,题目很简单,设想一个双堆栈总空间容量为100万个数据。
现在我进行M次操作,可能是出栈,可能是入栈,希望得到最后2个堆栈的信息。
-
输入
-
第一行包含两个整数N,M,表示堆栈空间大小为N,一共M次操作。
其中N小于100万。
以下M行每行格式为以下几种:
LIN X 表示左边堆栈入栈一个数据X
RIN X 表示右边堆栈入栈一个数据X
LOUT 表示左边堆栈出栈
ROUT 表示右边堆栈出栈
保证数据合法
输出
-
输出为两行,分别代表左边堆栈和右边堆栈;
第一行为左边,第二行为右边;
输出顺序均为从栈底到栈顶输出。
样例输入
-
3 6
-
LIN 1
-
RIN 2
-
LIN 3
-
ROUT
-
LOUT
-
RIN 5
样例输出
-
1
-
5
模拟题,栈的拓展
#include <stdio.h>
char a[500001];
char b[500001];
long n,m;
main()
{
char t,tt;
int upset;
int up1,up2;
int i;
scanf("%ld %ld",&n,&m);
up1=up2=0;
while(m--)
{
getchar();
scanf("%c%c",&t,&tt);
if(t=='L'&&tt=='I')
{
scanf("%c%c",&t,&tt);
scanf("%d",&upset);
a[up1++]=upset+'0';
}
if(t=='L'&&tt=='O')
{
scanf("%c%c",&t,&tt);
up1--;
}
if(t=='R'&&tt=='I')
{
scanf("%c%c",&t,&tt);
scanf("%d",&upset);
b[up2++]=upset+'0';
}
if(t=='R'&&tt=='O')
{
scanf("%c%c",&t,&tt);
up2--;
}
}
for(i=0;i<up1;i++)
printf("%c ",a[i]);
printf("\n");
for(i=0;i<up2;i++)
printf("%c ",b[i]);
printf("\n");
}