网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

检测出栈的合法性问题

题目:给定一个入栈和一个出栈序列?请判断是否合法

资源网站建设公司创新互联,资源网站设计制作,有大型网站制作公司丰富经验。已为资源上千余家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的资源做网站的公司定做!

eg:入栈12345,出栈35124

  1. 用一个辅助栈,如果栈为空,就push(入栈序列)

  2. 比较栈顶元素和出栈序列当前值是否相等,若相等,出栈此元素,并将下次访问出栈序列位置后移;否则,继续入入栈序列里的元素。

  3. 重复1,2步骤,直到入栈序列为空,且栈顶元素不等于出栈序列当前访问位置时即不合法。栈空,入栈序列空,出栈序列空为合法出栈。

此例中将3,5,取出后,明显1不是栈顶元素,所以不是合法的。

检测出栈的合法性问题

#include
#include
#include
using namespace std;
bool IsLegal(const char* inOrder, const char* outOrder)
{
	assert(inOrder&&outOrder);
	if (strlen(inOrder) != strlen(outOrder))
		return false;
	char* source = (char*)inOrder;
	char* dest = (char*)outOrder;
	stack s;
	char ch;
	while (!s.empty() || *source != '\0')
	{
		while (!s.empty() && s.top()==*dest)
		{
			dest++;
			s.pop();
		}
		if (*source == '\0')
			break;
		s.push(*source++);
	}
	if (*dest == '\0')
		return true;
	else
		return false;
}
//法二
class Solution {
public:
    bool IsPopOrder(vector pushV,vector popV) {
        if(pushV.size() == 0) return false;
        vector stack;
        for(int i = 0,j = 0 ;i < pushV.size();){
            stack.push_back(pushV[i++]);
            while(j < popV.size() && stack.back() == popV[j]){
                stack.pop_back();
                j++;
            }      
        }
        return stack.empty();
    }
};
void Test1()
{
	cout << IsLegal("12345", "35124") << endl;
	cout << IsLegal("12345", "54321") << endl;
	cout << IsLegal("12345", "35421") << endl;
	cout << IsLegal("12345", "23451") << endl;
	cout << IsLegal("12345", "12345") << endl;
}

分享名称:检测出栈的合法性问题
当前路径:http://bjjierui.cn/article/ggcoge.html

其他资讯