您的位置:首页 > 运维架构

每天一道算法题(11)——栈的push、pop 序列

2015-06-04 11:01 204 查看
题目:输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序。为了简单起见,我们假设push 序列的任意两个整数都是不相等的。

例如:输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列

1.思路

(1)假设栈顶元素等于输出指针指向元素,弹出栈顶元素并后移输出指针;

(2)倘若不满足(1),则压栈输入指针元素,直到输入指针元素等于输出指针元素或者输出指针已经指向空。是前者情况,则分别省略压栈出栈操作,直接后移输入输出指针,若为后者,则返回false,因为此时栈顶不满足,所有输入序列已经压栈。

2.代码

bool decision(const char* in, const char* out){
	if(!in||!out)
		return false;
	stack<char> s;
	s.push(*in++);
	while(!s.empty()){
		if(s.top()==*out){
			s.pop();
			out++;
		}
		else{
			//压栈,直到此时*in=*out或者in已经输入完毕
		    while(in!='\0'&&*in!=*out)
			   s.push(*in++);

			if(*in=='\0')//栈顶元素不满足且in已无输入
				return false;
			else{//*in==*out情况
			   in++;
			   out++;
			}
		}
	}
	return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: