栈的简单模拟

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值