顺序栈的c++实现及利用其实现括号的匹配
#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++实现及利用其实现括号的匹配的更多相关文章
- 【js数据结构】栈解决括号不匹配问题
栈可以用来判断一个算术表达式中的括号是否匹配. 思路:读取算术表达式,遇到左括号'{'.'['.'('压入栈,栈的特点是后入先出,所以当遇到右括号'}'.']'.')'的时候,取出栈顶元素,是否满足读 ...
- 利用顺序栈解决括号匹配问题(c++)-- 数据结构
题目: 7-1 括号匹配 (30 分) 给定一串字符,不超过100个字符,可能包括括号.数字.字母.标点符号.空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入格式: 输入在一行 ...
- 数据结构:C_顺序栈的实现
数据结构顺序栈的实现(C语言版) 1.写在前面 栈是一种遵循元素先进(Push)后出(Pop)规则的线性表,它的实现可以用数组或者链表. ..... 2.代码分解 2.1对栈的结构定义: typede ...
- 数据结构——Java实现顺序栈
一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 顺序栈是指利用顺序存储结构实现 ...
- C++栈学习——顺序栈和链栈的差别
C++中栈有顺序栈和链栈之分.在顺序栈中,定义了栈的栈底指针(存储空间首地址base).栈顶指针top以及顺序存储空间的大小stacksize(个人感觉这个数据成员是能够不用定义的) //顺序栈数据结 ...
- Java的顺序栈和链式栈
栈的定义 栈是限制在表的一段进行插入和删除的运算的线性表,通常能够将插入.删除的一端为栈顶,例外一端称为栈底,当表中没有任何元素的时候称为空栈. 通常删除(又称"退栈")叫做弹出p ...
- Java栈之顺序栈存储结构实现
一.栈的基本定义 栈是一种数据结构,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入.删除操作的特殊线性表,通常就是在线性表的尾端进行插入.删除操作. 二.顺序栈的实 ...
- 数据结构实验3:C++实现顺序栈类与链栈类
实验3 3.1 实验目的 熟练掌握栈的顺序存储结构和链式存储结构. 熟练掌握栈的有关算法设计,并在顺序栈和链栈上实现. 根据具体给定的需求,合理设计并实现相关结构和算法.3.2实验要求3.2.1 ...
- 数据结构 - 顺序栈的实行(C语言)
数据结构-顺序栈的实现 1 顺序栈的定义 既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化,我们简称为顺序栈.线性表是用数组来实现的,对于栈这种只能一头插入删除的线性表来说,用数组哪 ...
随机推荐
- 跟我一起玩转Sencha Touch 移动 WebApp 开发(一)
1.目录 移动框架简介,为什么选择Sencha Touch? 环境搭建 创建项目框架,框架文件简介 创建简单Tabpanel案例 自定义图标的方式 WebApp产品测试和发布 HTML5离线缓存 发布 ...
- ecshop 活动-》红包
按商品发放:可以给指定某个商品发红包(购买付款,卖家发货后,会自动给买家发送红包:不是买家在付款的时候就自动可以减少红包金额) 按订单金额发放:订单满xx后(卖家发货后,会自动给买家发放红包)
- cdn提供商
七牛,又拍 http://www.qiniu.com/ https://www.upyun.com/index.html
- Java常见的几种内存溢出及解决方法
Java常见的几种内存溢出及解决方法[情况一]:java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一 ...
- centos 7.0 ssh 登陆
CentOS 7.0 最小化安装 默认连接 默认端口是22 安装完查看IP 命令 ip addr ip: 192.168.1.103 自己家里练习的机子 都没改配置了 使用putty 远程连接 下载页 ...
- iOS 加急申请每个开发者必须会
加急申请原来做过很多次,有成功,有拒绝(最终还是成功,一次不行,被拒绝后多来几下即可,直到成功).但是听朋友说了一件事情,很是不解:他们希望能快速审核上线,在淘宝里面找加速商店,首次上线12000元, ...
- MYSQL权限回收
给予最小权限 grant '; FLUSH PRIVILEGES 查看全部用户:select * from mysql. user \G. 查看权限. mysql> show grants fo ...
- Mysql利用mysql_multi配置一台主机多个实例(转)
在Mysql官方帮助文档中,详细记录中Mysql的启动方式,有mysqld_safe.mysql.server.mysql_multi这三种.关于mysql_multi的介绍: Mysqld_mult ...
- gvim如何显示html属性代码提示? vim 如何显示 javascript属性及方法提示?
gvim如何显示html属性代码 可以在vim中 显示 html, css, js等的属性/方法 提示: 一是: 在 ~/.vim/after/syntax/ 目录中 安装 css-color.vim ...
- str_replace vs preg_replace
转自:http://benchmarks.ro/2011/02/str_replace-vs-preg_replace/ 事实证明str_replace确实比preg_replace快. If you ...