#include<iostream>
#include<cassert>
#include<cstring>
#include<string>
using namespace std;
int maxLength=100;
const int stackIncreament = 20;
template<class T>
class Stack{
public:
Stack(){}
virtual void Push(const T& x)=0;
virtual bool Pop(T& x)=0;
virtual bool getPop(T& x)=0;
virtual bool IsEmpty()=0;
virtual bool IsFull()=0;
virtual int getSize()=0;
};
template<class T>
class SeqStack:public Stack<T>{
public:
SeqStack(int sz=50);
~SeqStack(){delete []elements;}
void Push(const T& x);
bool Pop(T& x);
bool getPop(T& x);
bool IsEmpty(){return (top==-1)? true:false;}
bool IsFull() {return (top==maxSize-1)?true:false;}
int getSize(){return top+1;}
void MakeEmpty(){top=-1;}

private:
T *elements;
int top;
int maxSize;
void overflowProcess();

};
template<class T>
SeqStack<T>::SeqStack(int sz){
top=-1;
maxSize=sz;
elements = new T[maxSize];
assert(elements!=NULL);
}

template<class T>
void SeqStack<T>::Push(const T& x)
{
if(IsFull()==true)
overflowProcess();
elements[++top]=x;
}

template<class T>
bool SeqStack<T>::Pop(T& x)
{
if(IsEmpty()==true)
return false;// cout<<top<<endl;
x=elements[top--];

return true;
}

template<class T>
bool SeqStack<T>::getPop(T& x)
{
if(IsEmpty()==true)
return false;
x=elements[top];
return true;

}

template<class T>
void SeqStack<T>::overflowProcess(){
T *newArray = new T[maxSize+stackIncreament];
if(newArray==NULL)
{
cout<<"内存分配失败"<<endl;
return ;
}
for(int i=0;i<=top;i++)
{
newArray[i]=elements[i];
}
maxSize=maxSize+stackIncreament;
delete []elements;
elements =newArray;
}

void printMatchedPairs(string expression)
{
SeqStack<int> s(maxLength);
SeqStack<int> a(maxLength);
SeqStack<int> b(maxLength);
int j,c,d,r,t=0,length=expression.length();
int e=0,m=0;
for(int i=1;i<=length+1;i++)
{
if(expression[i-1]=='(')
s.Push(i);
else if(expression[i-1]==')')
{
for(int r=1;r<=i;r++)
if(expression[r-1]==']'||expression[r-1]=='}')
t++;
if(t!=0)
{
cout<<"failure";
m++;
break;
}
s.Pop(j);
}
else if(expression[i-1]=='[')
a.Push(i);
else if(expression[i-1]==']')
{
for(int r=1;r<=i;r++)
if(expression[r-1]=='}')
e++;
if(e!=0)
{
cout<<"failure";
m++;
break;
}
a.Pop(j);
}
else if(expression[i-1]=='{')
b.Push(i);
else if(expression[i-1]=='}')
b.Pop(d);
}
if(m==0)
{
if(s.IsEmpty()==true&&a.IsEmpty()==true&&b.IsEmpty()==true)
{
cout<<"success";

}
else
cout<<"failure";
}

}
int main()
{
string expression;
cin>>expression;
printMatchedPairs(expression);

return 0;
}

顺序栈的c++实现及利用其实现括号的匹配的更多相关文章

  1. 【js数据结构】栈解决括号不匹配问题

    栈可以用来判断一个算术表达式中的括号是否匹配. 思路:读取算术表达式,遇到左括号'{'.'['.'('压入栈,栈的特点是后入先出,所以当遇到右括号'}'.']'.')'的时候,取出栈顶元素,是否满足读 ...

  2. 利用顺序栈解决括号匹配问题(c++)-- 数据结构

    题目: 7-1 括号匹配 (30 分)   给定一串字符,不超过100个字符,可能包括括号.数字.字母.标点符号.空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入格式: 输入在一行 ...

  3. 数据结构:C_顺序栈的实现

    数据结构顺序栈的实现(C语言版) 1.写在前面 栈是一种遵循元素先进(Push)后出(Pop)规则的线性表,它的实现可以用数组或者链表. ..... 2.代码分解 2.1对栈的结构定义: typede ...

  4. 数据结构——Java实现顺序栈

    一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 顺序栈是指利用顺序存储结构实现 ...

  5. C++栈学习——顺序栈和链栈的差别

    C++中栈有顺序栈和链栈之分.在顺序栈中,定义了栈的栈底指针(存储空间首地址base).栈顶指针top以及顺序存储空间的大小stacksize(个人感觉这个数据成员是能够不用定义的) //顺序栈数据结 ...

  6. Java的顺序栈和链式栈

    栈的定义 栈是限制在表的一段进行插入和删除的运算的线性表,通常能够将插入.删除的一端为栈顶,例外一端称为栈底,当表中没有任何元素的时候称为空栈. 通常删除(又称"退栈")叫做弹出p ...

  7. Java栈之顺序栈存储结构实现

    一.栈的基本定义 栈是一种数据结构,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入.删除操作的特殊线性表,通常就是在线性表的尾端进行插入.删除操作. 二.顺序栈的实 ...

  8. 数据结构实验3:C++实现顺序栈类与链栈类

      实验3 3.1 实验目的 熟练掌握栈的顺序存储结构和链式存储结构. 熟练掌握栈的有关算法设计,并在顺序栈和链栈上实现. 根据具体给定的需求,合理设计并实现相关结构和算法.3.2实验要求3.2.1 ...

  9. 数据结构 - 顺序栈的实行(C语言)

    数据结构-顺序栈的实现 1 顺序栈的定义 既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化,我们简称为顺序栈.线性表是用数组来实现的,对于栈这种只能一头插入删除的线性表来说,用数组哪 ...

随机推荐

  1. 创建一个应用台程序,声明一个 int变量,并且初始化数组,通过while语句输出数组内的所有成员。

    ]{,,,,}; ; ) { Console.WriteLine("myNum[{0}]的值为{1}", s,myNum[s]); s++; } Console.ReadLine( ...

  2. phpspidercookie

    <?php /** * Created by PhpStorm. * User: brady * Date: 2016/12/9 * Time: 17:32 */ ini_set("m ...

  3. How to read a scientific paper

    How to read a scientific paper Nothing makes you feel stupid quite like reading a scientific journal ...

  4. Kindeditor 编辑器POST提交的时候会出现符号被转换

    Kindeditor编辑器输入符号单引号,双引号,斜杠 都会被转义 解决办法 $date['content']=$this->textString($_POST['content']); pub ...

  5. ajax传输 基础一

    一个简单页面的传输 index.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...

  6. JAVA基础知识(转)

    本文就java基础部分容易混淆的一些知识点进行了一下总结.因为Java本身知识点非常多,不可能在很短的篇幅就能叙述完,而且就某一个点来讲,如欲仔细去探究,也能阐述的非常多.这里不做全面仔细的论述,仅做 ...

  7. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+pat----------<base>元素有关

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request. ...

  8. centos 7.0 ln命令 和chkconfig 命令介绍 开机自动启 服务

    有时候centos需要 程序开机启动的时候  自启动 首先在 /etc/init.d/ cd /etc/init.d 文件夹下建立开机启动项 使用ln命令 使用方式 : ln [options] so ...

  9. Oracle VM Virtual

    版本5.xx不能导入 要用旧版的4.3.10

  10. spring的PathMatchingResourcePatternResolver-通配符的Resource查找器

    PathMatchingResourcePatternResolver是一个通配符的Resource查找器,包括: /WEB-INF/*-context.xml com/mycompany/**/ap ...