关闭

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

标签: 顺序栈出栈合法性判断
562人阅读 评论(0) 收藏 举报
分类:
//判断顺序栈出栈顺序的合法性思想:
//给定一个入栈的字符串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;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:60210次
    • 积分:2211
    • 等级:
    • 排名:第18110名
    • 原创:170篇
    • 转载:0篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论