堆栈操作合法性(附带问题总结)

  • Post author:
  • Post category:其他


堆栈操作合法性



题目

在这里插入图片描述



答案

#include<stdio.h>
int top=0;
void pop()
{
	top--;
}
void push()
{
	top++;
}
int main()
{
	int n,max,i,j,flag=0;
	scanf("%d %d",&n,&max);
	getchar();
	char str[200];
	for(i=0;i<n;i++)
	{
		gets(str);
		for(j=0;str[j];j++)
		{
			if(str[j]=='S') 
			{
				if(top==max) flag=1;
				push();
			}
			else if(str[j]=='X')
			{
				if(top==0) flag=1;
				pop();
			}
//			printf("%d %d\n",top,flag);
		}
		if(flag==0&&top==0) printf("YES\n");
		else printf("NO\n");
		flag=0;
		top=0;
	}
}



问题总结

  1. 如果使用

    gets()

    函数,那就要在输入两个整数后加上

    getchar()

    ;而如果使用

    scanf

    就不需要了
  2. 内外循环的变量要区分开,例如i,j,不要都用i
  3. 注意审题,最后判断时不仅需要没有非法操作,还要堆栈为空(即

    top==0

  4. 每次循环后要记得将flag以及top变量还原



版权声明:本文为ljhsq原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。