#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. jQuery $.fn 方法扩展~

    //以下代码紧跟在引进的jquery.js代码后面 <script type="Text/JavaScript"> $(function (){ //扩展myName方 ...

  2. mysql锁

    锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有数 ...

  3. mysql主从复制 转

    mysql服务器的主从配置,这样可以实现读写分离,也可以在主库挂掉后从备用库中恢复.需要两台机器,安装mysql,两台机器要在相通的局域网内,可以分布在不同的服务器上,也可以在一台服务器上启动多个服务 ...

  4. C#实现录制屏幕

    以前写过两篇录制麦克风语音和摄像头视频的文章(实现语音视频录制.在服务器端录制语音视频),最近有朋友问,如果要实现屏幕录制这样的功能,该怎么做了?实际上原理是差不多的,如果了解了我前面两篇文章中介绍的 ...

  5. Java数据库——连接关闭、增删改查

    连接数据库 //================================================= // File Name : MySQL_demo //-------------- ...

  6. 深入浅出MyBatis

    参考文献:深入浅出MyBatis MyBatis功能架构图: MyBatis内部原理流程图: 详情见:深入浅出MyBatis

  7. GitHub 在 Clion2016.1.3 中的设置

    1.在 GitHub 上注册,建立一个 Repositories,结果获得如下 https://github.com/GPerelman/Clion2016.1.3.git 2.打开 git-bash ...

  8. Shared Library Search Paths

    在使用CodeLite编译动态库的时候,可以通过在Linker > Linker Options中添加: -install_name @executable_path/libXXX.so 的方式 ...

  9. css div垂直居中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 免 sudo 使用 docker

    免 sudo 使用 docker 如果还没有 docker group 就添加一个: sudo groupadd docker 将用户加入该 group 内.然后退出并重新登录就生效啦. sudo g ...