828. 模拟栈

#include
using namespace std;
const int N=1e5+10;
int stk[N];
int hh,tt;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		char s[20];
		cin>>s;
		if(s[2]=='s')
		{
			int x;
			cin>>x;
			stk[++tt]=x;
		}
		else if(s[1]=='o')
		{
			tt--;
		}
		else if(s[0]=='e')
		{
			if(hh<tt)	puts("NO");
			else	puts("YES");
		}
		else
		{
			cout<<stk[tt]<<endl;
		}
	}
	return 0;
}

栈还是比较简单,每一次都是对栈顶进行操作,可以直接用数组把栈模拟出来

hh表示的是0,算是一个标志,tt 初始值也是0,所以使用++tt,也就是第一个使用的下标其实是1,向栈顶插入一个元素就是把tt 增加1,把元素存进数组,栈顶弹出一个元素就是把tt数值减小1,tt表示的其实是一个计数器,所以其实有没有hh是无所谓的,我改下代码,看下能不能 ac

#include
using namespace std;
const int N=1e5+10;
int stk[N];
int tt;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		char s[20];
		cin>>s;
		if(s[2]=='s')
		{
			int x;
			cin>>x;
			stk[++tt]=x;
		}
		else if(s[1]=='o')
		{
			tt--;
		}
		else if(s[0]=='e')
		{
			if(tt>=1)	puts("NO");
			else	puts("YES");
		}
		else
		{
			cout<<stk[tt]<<endl;
		}
	}
	return 0;
}

改成这样也可以ac ,所以hh有没有其实无所谓

然后是判断栈是否为空,假设栈是空的,tt一定小于1,或者说hh==tt,因为操作一定合法,所以栈为空就是tt ==0的时候

查询栈顶的元素就是输出 stk[tt]即可

非常简单

你可能感兴趣的:(#,数据结构,算法)