加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

【数据结构】用栈检测括号是否匹配

发布时间:2020-12-15 06:00:55 所属栏目:安全 来源:网络整理
导读://【数据结构】用栈检测括号是否匹配//头文件 栈#ifndef _STACK_#define _STACK_#include iostream#include string.husing namespace std;template class Typeclass Stack{public:Stack(size_t sz = INIT_SIZE){capacity = sz INIT_SIZE ? sz : INIT_SIZE;ba
//【数据结构】用栈检测括号是否匹配

//头文件  栈
#ifndef _STACK_
#define _STACK_


#include <iostream>
#include <string.h>
using namespace std;


template <class Type>
class Stack
{
public:
	Stack(size_t sz = INIT_SIZE)
	{
		capacity = sz > INIT_SIZE ? sz : INIT_SIZE;
		base = new Type[capacity];
		top = 0;
	}
	~Stack()
	{
		destory();
	}
public:


	bool empty() const                  //判断是否为空
	{
		return(top == 0);
	}




	bool full()const                   //判断是否已满
	{
		return(top >= capacity);
	}




	void push(const Type &x)           //进栈
	{
		if (full())
		{
			cout << "栈已满,不能插入。" << endl;
			return;
		}
		base[top++] = x;
	}




	void pop()                         //出栈
	{
		top--;
	}




	bool getTop(Type &x) const        //获得栈顶
	{
		if (top == 0)
			return false;
		x = base[top - 1];
		return true;
	}




	int length() const                //求大小
	{
		return top;
	}




	void clear()                     //清除
	{
		top = 0;
	}




	void destory()                   //摧毁
	{
		delete[]base;
		base = NULL;
		capacity = top = 0;
	}




	void show() const                //显示
	{
		if (empty() == 1)
		{
			cout << "栈为空" << endl;
			return;
		}
		for (int i = top - 1; i >= 0; i--)
		{
			cout << base[i] << endl;
		}
	}
private:
	enum { INIT_SIZE = 8 };
	Type *base;
	int capacity;
	int top;
};




#endif

//主函数

#include "Stack.h"


bool Check(const char *str)
{
	Stack <char> st;
	char val;
	while (*str != '')
	{
		if (*str == ']')
		{
			st.getTop(val);
			if (val == '[')
			{
				st.pop();
			}
			else
				return false;
		}
		else if (*str == ')')
		{
			st.getTop(val);
			if (val == '(')
			{
				st.pop();
			}
			else
				return false;
		}
		else
			st.push(*str);
		str++;
	}
	return st.empty();
}


int main()
{
	char *str = "[([()])()]";
	bool flag = Check(str);
	if (flag)
		cout << "OK" << endl;
	else
		cout << "NO" << endl;
	return 0;


}
<img src="http://img.blog.csdn.net/20150531230542022?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG91ZG91d2ExMjM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读