出栈入栈合理性

出栈入栈合理性,用两指针指向两数组,创建一新栈来存储元素。对于入栈数组的指针一直往下走,并入栈,当与出栈数组元素相等时,让栈中的元素pop,还原入栈出栈的过程。如果在这种情况下不处理的话,会导致入栈数组元素一直往下走,若入栈较多元素后连续出栈,会导致判断失误(入栈元素一直往后走,而之前早入栈的元素会没有处理到)。可以让出栈元素往后走并与栈顶元素比较(用栈的size来做循环条件)

stack.h

#include<iostream>
#include<stack>
using namespace std;
template<typename T>

class Stack
{
public:
	Stack()
	{}
	bool Islegal(T* in, T* out, size_t sz)// 判断入栈合法性
	{
		while (sz--)
		{	
			s.push(*in);
			if (*in == *out)//判断出栈元素与入栈元素是否相等
			{
				while (s.size() > 0)//防止两个相邻元素相继出栈
				{
					if (s.top() == *out)//当栈顶元素与出栈元素相等,则pop
					{
						s.pop();
					}
					else
						break;
					out++;               //只有入栈元素与出栈元素相等时,出栈元素后移
				}
			}
			in++;
		}
		return true;
	}

private:
	stack<T> s;
};

test.c

#include"stack.h"
void test4()
{
	Stack<int> s;
	int a[] = { 1,2,3,4,5 };
	int b[] = { 1, 3, 2, 5, 4 };//1 3 5 4 2
	cout<<s.Islegal(a, b, sizeof(a)/sizeof(a[0]));
}
int main()
{
	test4();
	getchar();
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值