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

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

//头文件  栈
#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 != '\0')
	{
		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="" />

时间: 2024-10-06 01:10:00

【数据结构】用栈检测括号是否匹配的相关文章

数据结构--利用栈实现括号匹配

/*下午打球去了,虐菜了*/ <pre name="code" class="cpp">#ifndef _MATCH_H_ #define _MATCH_H_ #include<iostream> #include<string.h> #include<assert.h> using namespace std; typedef char ElemType; #define STACK_INIT_SIZE 50 typ

顺序栈判断括号是否匹配

/*Sample Input sin(20+10) {[}] Sample Output yes no*/ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define LIST_INIT_SIZE

【数据结构】栈的应用 括号匹配

括号配对问题: 假设一个表达式中包含三种类型的括号:(),{ },[],嵌套顺序任意 { [()()] } 1  2 3 4  5  6 7  8 引入"期待的急迫程度"概念,例如当接受第一个括号 { ,则它期待与第8个 } 匹配,然而当接受到第二个 [ 时,此时[最期待和第七个 ] 匹配. #ifndef _MATCH_H_ #define _MATCH_H_ #include<iostream> #include <malloc.h> #include &l

【数据结构】栈的应用——括号匹配问题

括号匹配问题: 给一个字符串,其中包含小括号.中括号.大括号,求该字符串中的括号是否匹配. 例如:()()[]{} 匹配([{()}]) 匹配[](               不匹配[(])              不匹配 利用堆栈的思路:建立一个堆栈,然后遍历字符串,如果是'(','{'.'[',则入栈,否则判断当前字符串和栈顶元素是否是一对括号:要注意的是,需要提前判断栈是否为空,为空的时候取top是违法的的,所以只要为空就入栈,然后执行下一次循环,而且,只要循环过程中出现一次栈顶元素和

利用栈判断输入的表达式中的括号是否匹配(假设只含有左、右括号)

利用栈判断输入的表达式中的括号是否匹配(假设只含有左.右括号) bool Match(char exp[],int n) { int i=0; char e; bool match=true; SqStack *st; InitStack(st);//初始化栈 while(i<n && match)//扫描exp中所有字符 { if(exp[i]=='(')//当前字符为左括号,将其进栈 Push(st,exp[i]); else if(exp[i]==')')//当前字符为右括号

第一篇博客——利用“栈”进行括号匹配的算法

bool BracketsCheck(char *str){ InitStack(S); int i=0; while(str[i]!='\0'){ switch(str[i]){ case'(':Push(S,str[i]);break; case'[':Push(S,str[i]);break; case'{':Push(S,str[i]);break; case')': Pop(S,e); if(e!='(')return false; break; case']': Pop(S,e);

【数据结构】栈和队列

栈和队列 容器数据结构是指一些包含了若干个其他相同或不同的数据结构的数据结构,被包含的这些每一个独立的数据结构都被称为一个元素,在一个容器中的元素往往支持相同的操作,具有类似的性质.之前说到过的线性表其实就是一种容器数据结构,本文中介绍的两种最常用的容器数据结构是栈和队列. 从功能上看,栈和队列大多用于计算过程中保存临时数据,这些数据是在计算过程中发现或产生的.在而后的计算中可能会用到这些数据.如果这些数据是固定的个数以及大小的话,可以构建几个变量来储存它们,但是如果这些数据不确定的话,就需要一

大话数据结构——使用栈实现简单的四则运算

最近在读<大话数据结构>,里面有个例子是使用栈实现四则运算,现在我用java把这个功能实现试试 代码如下: package com.datastruct; import java.util.ArrayList; import java.util.Stack; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StackPractice { private static ArrayList&l

常见算法题:判断表达式括号是否匹配

题目:设计一个算法,判断用户输入的表达式中括号是否匹配,表达式中可能含有圆括号.中括号和大括号. 思路:建立一个顺序栈,当表达式中有左括号时将其入栈,当出现右括号时,将栈顶元素出栈,检查与当前右括号是否匹配.最后如果栈为空则表示该表达式中的括号是匹配的. 代码: #include<iostream> #include<string> using namespace std; #define MaxSize 20 //字符串栈 class Stack { char *data; in