顺序栈的应用-刮号匹配问题

本文详细介绍了一个基于模板的顺序栈实现,使用C++语言,并应用该栈解决括号匹配问题。通过具体代码展示了栈的基本操作,如创建、判断空满、获取长度、入栈、出栈和获取栈顶元素,最后实现了一个函数检查字符串中的括号是否正确配对。

 

//环境:vs2010
//SeqStack.h

const int Maxsize=100;
template <class T>
class SeqStack
{
public:
     SeqStack();//空栈的建立
	 ~SeqStack(){}//
	 bool Empty();//空栈判断
	 bool Full();//满栈判断
	 int Length();//返回栈长度
	 void Push(T x);//元素x进栈
	 T Pop();//弹栈
	 T Gettop();//返回栈顶元素
private:
	T data[Maxsize];
	int top;//栈顶指针,即栈顶元素在数组中的下标
};

template <class T>
SeqStack<T>::SeqStack()//空栈的建立
{
	top=-1;
}

template <class T>
bool SeqStack<T>::Empty()//空栈判断
{
	if(top==-1)return true;
	else return false;
}
template <class T>
bool SeqStack<T>::Full()//满栈判断
{
	if(top==Maxsize-1)return true;
	else return false;
}
template <class T>
int SeqStack<T>::Length()//返回栈长度
{
   return top+1;
}
template <class T>
void SeqStack<T>::Push(T x)//元素x进栈
{
	if(Full())throw "满栈";
	top++;
	data[top]=x;
}
template <class T>
T SeqStack<T>::Pop()//弹栈
{
	if(Empty())throw "空";
	T x=data[top];
	top--;
	return x;
}
template <class T>
T SeqStack<T>::Gettop()//返回栈顶元素
{
	if(Empty())throw "空栈";
	return data[top];
}
//BracketsCheck.cpp

#include "SeqStack.h"
#include <iostream>
using namespace std;
bool BracketsCheck(char str[]);
void main()
{
	char ch[50];
	cin>>ch;
	cout<<(BracketsCheck(ch)?"匹配":"不匹配")<<endl;

	
}

bool BracketsCheck(char str[])
{
	SeqStack<char> st;
	int i=0;
	char c;
	while((c=str[i])!='\0')
	{	
		switch(c)
		{
		case '(':
		case '[':
		case '{': 
			st.Push(c);break;
		case ')':
			if(st.Gettop()=='(')
				st.Pop();
			else
				return false;
			break;
		case ']':
			if(st.Gettop()=='[')
				st.Pop();
			else
				return false;
			break;
		case '}':
			if(st.Gettop()=='{')
				st.Pop();
			else
				return false;
		}
		i++;
	}
	if(st.Empty())
		return true;
	else
		return false;
}

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值