#include<stdio.h>
/*Description
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多
种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高
的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
栈是一个非常经典的数据结构。我们可以形象地想象一只桶,
这只桶里面的元素是从下至上依次排列的,不存在两个元素在桶里的同一个高度。
我们可以从桶的顶部往里面放入一个元素,这个操作称为入栈(push);
也可以将其最上面的一个元素拿掉,这个操作称为出栈(pop)。
显然,由于最顶上的元素“压着”其他元素,我们不能从栈的其他地方放入或者拿掉一个元素。
现在,为了更好地理解栈,请你编写一个程序来实现栈的各项操作。
Tips: 我们可以用数组来模拟栈的实现。声明一个数组stack来存储栈内元素,
一个整型变量top来表示栈顶在数组中的位置。
Input
输入有若干行,你要对每一行的命令进行相应的操作。
对于每一行,有一个字符串,表示要进行的操作名称。
若为push(x),则表示将这个整数x入栈。
若为pop,表示按照规则将栈内一个元素出栈,若栈内无元素,忽略此次命令。
若为sequence,从栈底至栈顶输出此时的栈内元素,以一个空格分隔每个元素
Output
输出应有若干行,表示按照要求所进行的输出,每次输出操作占一行。
在所有操作结束以后,若栈非空,按照出栈规则将栈内元素依次出栈
直至栈内无元素,然后输出从最开始为止每次出栈的元素,以一个空格分隔每个元素。
对于上述的每一行输出操作,若该次操作没有任何元素需要输出,输出一个空行。
Sample Input
push(3)
push(6)
push(9)
sequence
pop
push(7)
push(13)
sequence
Sample Output
3 6 9
3 6 7 13
9 13 7 6 3
Sample Explanation
对样例中每次操作的具体情况进行更详细的说明
3入栈,栈内元素3,无出栈元素
6入栈,栈内元素3 6,无出栈元素
9入栈,栈内元素3 6 9,无出栈元素
输出栈内元素
栈顶元素9出栈,栈内元素3 6,出栈序列9
7入栈,栈内元素3 6 7,出栈序列9
13入栈,栈内元素3 6 7 13,出栈序列9
输出栈内元素
随后13、7、6、3依次出栈,出栈序列即为9 13 7 6 3
Hint
-10000≤x≤10000,总操作数≤3000
*/
int main()
{
char a[4000][20]={0};//存操作
int i=0, b[4000]={0}/*存stack的元素*/, shu=0/*stack元素数量*/;
int shuchu[4000]={0}/* 已经输出的元素*/, k=0;
while(scanf("%s",&a[i])!=EOF) //读取操作
{
i++;
}
for(int r=0; r<i; r++)//遍历操作
{
if(a[r][0]=='s')//判断sequence
{
if(shu==0)
printf("\n");//stack里无元素,不操作
else
{
for(int j=0;j<shu-1;j++)//从stack底部开始输出元素
/*-1是因为每次push后shu++,上限在这一行小于push*/
printf("%d ",b[j]);
printf( "%d\n" ,b[shu-1]);
}
}
else if(a[r][1]=='o')//判断pop
{
if(shu>0)//stack内无元素,则忽略操作
{
shuchu[k]=b[shu-1];//b【0】为stack底部,b【shu】为顶部
shu--;//stack上限下调,出stack
k++;//这里是用一个数组存出stack的数,这样在最后就能输出从最开始为止每次出栈的元素
}
}
else//push
{
int flag=1;//判断一下push的是正负数,正为1,负数0
if(a[r][5]=='-')//判断push(后第一个是数码还是-
{
flag=0;
//在循环内定义的变量为局部变量形参
int wei=6/*记录push(后的位置,从而一个一个读入数码*/, shuzi=0/*存数码*/;
while(a[r][wei]>='0' && a[r][wei]<='9')
{
shuzi*=10;//每次循环通过*10使得整体上升一位,最后一位为0存新的数
shuzi+=a[r][wei]-48;//由于a存char,所以-48转换为数字
wei++;
}
shu++;//循环最后使stack上限+1
b[shu-1]=-shuzi;//由于为负数,故
}
else//正数
{
int wei=5/*正数从第五位开始读*/, shuzi = 0;
while(a[r][wei]>='0' && a[r][wei]<='9')
{
shuzi*=10;
shuzi+=a[r][wei] - 48;
wei ++;
}
shu ++;//循环最后使stack上限+1
b[shu - 1] =shuzi;
}
}
}
//这里是所有操作结束了
if(shu==0)//空stack ,只用输出shuchu
{
for(int p=0;p<k-1;p++)
printf("%d ", shuchu[p]);
if(k!=0)
printf("%d\n", shuchu[k-1]);
}
else
{
for(int p=0;p<k;p++)//先输出shuchu,再输出stack内的
printf("%d ", shuchu[p]);
for(int p=shu-1;p>0;p--)//stack顶至底部输出
printf("%d ",b[p]);
printf("%d\n",b[0]);
}
return 0;
}
Description
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
栈是一个非常经典的数据结构。我们可以形象地想象一只桶,这只桶里面的元素是从下至上依次排列的,不存在两个元素在桶里的同一个高度。我们可以从桶的顶部往里面放入一个元素,这个操作称为入栈(push);也可以将其最上面的一个元素拿掉,这个操作称为出栈(pop)。显然,由于最顶上的元素“压着”其他元素,我们不能从栈的其他地方放入或者拿掉一个元素。
现在,为了更好地理解栈,请你编写一个程序来实现栈的各项操作。
Tips: 我们可以用数组来模拟栈的实现。声明一个数组stack来存储栈内元素,一个整型变量top来表示栈顶在数组中的位置。
Input
输入有若干行,你要对每一行的命令进行相应的操作。
对于每一行,有一个字符串,表示要进行的操作名称。
若为push(x),则表示将这个整数x入栈。
若为pop,表示按照规则将栈内一个元素出栈,若栈内无元素,忽略此次命令。
若为sequence,从栈底至栈顶输出此时的栈内元素,以一个空格分隔每个元素
Output
输出应有若干行,表示按照要求所进行的输出,每次输出操作占一行。
在所有操作结束以后,若栈非空,按照出栈规则将栈内元素依次出栈,直至栈内无元素,然后输出从最开始为止每次出栈的元素,以一个空格分隔每个元素。
对于上述的每一行输出操作,若该次操作没有任何元素需要输出,输出一个空行。
Sample Input
push(3)
push(6)
push(9)
sequence
pop
push(7)
push(13)
sequence
Sample Output
3 6 9
3 6 7 13
9 13 7 6 3
Sample Explanation
对样例中每次操作的具体情况进行更详细的说明
3入栈,栈内元素3,无出栈元素
6入栈,栈内元素3 6,无出栈元素
9入栈,栈内元素3 6 9,无出栈元素
输出栈内元素
栈顶元素9出栈,栈内元素3 6,出栈序列9
7入栈,栈内元素3 6 7,出栈序列9
13入栈,栈内元素3 6 7 13,出栈序列9
输出栈内元素
随后13、7、6、3依次出栈,出栈序列即为9 13 7 6 3
Hint
-10000≤x≤10000,总操作数≤3000