【C++】判断顺序栈出栈顺序的合法性

原创 2015年11月21日 14:41:21
//判断顺序栈出栈顺序的合法性思想:
//给定一个入栈的字符串pushstr,再给定一个出栈的字符串popstr,根据栈的特性,判断该出栈顺序是否合法
//1.先验证两个字符串的长度是否相等,不等,则肯定不合法;相等,再进行步骤2.
//2.(1)判断pushstr与popstr当前所指向的字符的关系:
//  (2)当*pushstr != *popstr时,对*pushstr进行压栈操作后,pushstr指针向后走,转(1)操作。
//  (3)当*pushstr == *popstr时,popstr指针向后走,验证popstr的下一个字符是否合法(方法:当栈不为空且栈顶
//      元素与该字符相等时,说明合法,则执行出栈操作,popstr指针接着向后走,再验证popstr的下一个字符是否合
//      法)。若不合法,则pushstr指针向后走,转(1)操作。


#include<iostream>
#include<stack>
using namespace std;
bool Is_Legle(stack<char>&s, const char *&pushstr, const char *&popstr)
{
	if (strlen(pushstr) != strlen(popstr))
	{
		return false;
	}
	while (*pushstr != '\0')
	{
		if (*pushstr != *popstr)
		{
			s.push(*pushstr);
		}
		else
		{
			popstr++;
			while (!s.empty() && s.top() == *popstr)
			{
				s.pop();
				popstr++;
			}
		}
		pushstr++;
	}
	if (s.empty() && *popstr == '\0')
	{
		return true;
	}
	else
	{
		return false;
	}
}
int main()
{
	stack<char>s;
	const char *src = "12345";
	const char *dst = "24531";
	if (Is_Legle(s, src, dst))
	{
		cout << "出栈顺序合法" << endl;
	}
	else
	{
		cout << "出栈顺序不合法" << endl;
	}
	system("pause");
	return 0;
}

对于一个入栈序列输出所有的出栈序列

网上有很多解法,但个人感觉不够清晰。下面本人献丑来写下自己的解法。力求简明易懂。首先这是个卡特兰数,学过组合数学的同学都知道。没学过的可以看下下面这个例子。 有2n个人排成一队进入剧场。入场费5元。...

【数据结构】判断出栈顺序的合法性

问题简单说明 给定一个栈的入栈顺序,再给定一个出栈顺序,通过程序判断出栈顺序的合法性。 思路如下: 定义一个空栈sc 先将str1中第一个元素入栈,然后通过循环使str1后移。 ...

给定入栈序列判断给定出栈序列是否合法

题目:输入两个整数序列。其中一个序列表示栈的入栈顺序,判断另一个序列有没有可能是对应的出栈顺序。思路:用一个辅助栈,将入栈序列按照某种顺序入栈,看是否可以产生出栈序列即可。 1)如果当前栈为空,且入...

C++编程,判断给定序列是否为正确出栈序列

数1,2,3,...,n按从小到大的顺序入栈,给定一个序列,判断其是否为一个可能的出栈序列。比如n=5,则“1,4,3,5,2”是一个正确的出栈序列,而"5,4,3,1,2"不是。         方...

判断出栈顺序是否正确

给定压栈顺序和出栈顺序,判断出栈顺序是否正确

算法C++ 判断出栈顺序是否正确

#include #include using namespace std;//1,2,3,4,5 //思路:若一个数先出栈,则比它小的全部数都已依次进栈,所以比这个数小且未出栈的数在其后都是从大...

C++判断出栈顺序

C++判断出栈顺序

n个元素进栈,输出所有出栈序列-卡特兰数-递归

#include #include #include #include #include #include #include #include #include #include ...

C++ 用栈实现字符串中括号匹配问题()

使用C++中的stack容器可以很容易的实现字符串中括号的匹配判断问题: #include #include #include using namespace std; int main...

判断出栈顺序是否正确,c++实现

现有N个元素1,2...N顺序入栈,给出一个出栈序列a1, a2...an判断此出栈序列是否正确,游戏规则是:元素必须后进先出 首先,我们将出栈顺序保存在一个数组target[N]中,用一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【C++】判断顺序栈出栈顺序的合法性
举报原因:
原因补充:

(最多只允许输入30个字)