判断元素入栈出栈的合法性

判断元素入栈出栈的合法性

一般来说,这种判断性的问题会出现在一些面试题目的选择题中,当然学习了栈之后,我们就要有解决这种问题的能力。
思路: 判断元素是否相同,相同就进行下一个元素比较,当栈不为空并且栈顶元素和输出的栈元素相同,则将该元素出栈并指向输出元素的下一个,否则就将该元素进栈,并指向比较的元素的下一个 ,直到所有元素比较完
然后按出栈顺序进行比较,当栈不为空时,将栈顶元素与当前元素进行比较,不相同直接返回,则判断出栈元素不合法,否则将该元素出栈,并指向下一个元素;

创建一个Valid.h的文件,在这里我们引入了stack.h文件

#pragma once

#include "Stack.h"
#include <string.h>

int Valid(char in[], char out[],int size)
{
	int ii = 0;
	int io = 0;
	Stack stack;
	StackInit(&stack);

	while (ii < size)
	{
		if (in[ii] == out[io])
		{
			ii++;
			io++;
		}
		else if (!StackEmpty(&stack) && StackTop(&stack) == out[io])
		{
			StackPop(&stack);
			io++;
		}
		else 
		{
			StackPush(&stack,in[ii]);
			ii++;
		}
	}

	while (!StackEmpty(&stack))
	{
		if (StackTop(&stack) == out[io])
		{
			StackPop(&stack);
			io++;
		}	
		else
		return 0;
	}
	return 1;
}

接下来我们进行测试

void TestValid()
{
	char *in = "abcdefg";
	char *out1 = "decfbga";
	char *out2 = "fegdacb";
	char *out3 = "efdgbca";
	char *out4 = "cdbefag";

	printf("%s\n",Valid(in,out1,strlen(in)) ? "合法顺序":"非法顺序" );
	printf("%s\n",Valid(in,out2,strlen(in)) ? "合法顺序":"非法顺序" );
	printf("%s\n",Valid(in,out3,strlen(in)) ? "合法顺序":"非法顺序" );
	printf("%s\n",Valid(in,out4,strlen(in)) ? "合法顺序":"非法顺序" );
}
输出结果:
合法顺序
非法顺序
非法顺序
合法顺序

猜你喜欢

转载自blog.csdn.net/qq_39478237/article/details/81984795