C++之桟的应用---括号匹配
刚開始学习数据结构。用桟写了一个经典的应用,括号匹配。
算法思路:
输入字符串时。将 '(' , '[' 压入桟。遇到 ‘)’ ']' 时,再栈顶出桟。进行括号匹配。假设成功匹配。则继续进行。否则。程序结束,输入不匹配信息,
假设 ‘)’ ']' 均匹配,则看推断桟是否为空,假设为空,则输入匹配。否则,输出符号数量不匹配。
#include<iostream>
using namespace std;
#define max 100 struct stack
{
int Top;
int MaxSize;
char *element;
}; typedef struct stack Stack; void Init(Stack *S,int n)
{
if(n>0)
{
S->Top=-1;
S->MaxSize=n;
S->element=new char [S->MaxSize];
}
} bool IsFull(Stack *S)
{
return (S->Top==S->MaxSize-1);
} bool IsEmpty(Stack *S)
{
return (S->Top==-1);
} void push(Stack *S,char x)
{
if(!IsFull(S))
S->element[++S->Top]=x;
else
{
cout<<"桟满"<<endl;
}
}
char pop(Stack *S)
{
if(!IsEmpty(S))
return S->element[S->Top--];
else
{
cout<<"桟空"<<endl;
return -1;
}
}
int main()
{
Stack *S=new Stack;
Init(S,max); bool flag=true;
bool flag_1=true;
bool flag_2=true; cout<<"请输入字符串:"<<endl;
char ch;
while ((ch = getchar()) != '\n')
{
switch(ch)
{
case '(': push(S,ch);break;
case '[': push(S,ch);break;
case ')':
{
if(pop(S)!='(' && flag_2)
{
cout<<"')'"<<"不匹配"<<endl;
flag_1=false;
flag=false;
break;
}
else
{
continue;
}
}
case ']':
{
if(pop(S)!='[' && flag_1)
{
cout<<"']'"<<"符号不匹配"<<endl;
flag_2=false;
flag=false;
break;
}
else
{
continue;
}
}
} } if(!IsEmpty(S) && flag)
{
cout<<"数量不匹配"<<endl;
}
else if(flag)
{
cout<<"匹配"<<endl;
}
system("pause");
return 0;
}
都是简单的定义。简单的功能。
C++之桟的应用---括号匹配的更多相关文章
- 括号匹配 区间DP (经典)
描述给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来 ...
- YTU 3003: 括号匹配(栈和队列)
3003: 括号匹配(栈和队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2 解决: 2 [提交][状态][讨论版] 题目描述 假设一个表达式中只允许包含三种括号:圆括号&quo ...
- [原]NYOJ 括号匹配系列2,5
本文出自:http://blog.csdn.net/svitter 括号匹配一:http://acm.nyist.net/JudgeOnline/problem.php?pid=2 括号匹配二:htt ...
- POJ C程序设计进阶 编程题#4:括号匹配问题
编程题#4:扩号匹配问题 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在某 ...
- 南阳理工ACM 括号匹配问题,并求出使得括号能够匹配需要新增的最小括号数(括号匹配(二))
描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起 ...
- 【栈思想、DP】NYOJ-15 括号匹配(二)
括号匹配(二) 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能 ...
- NYOJ 题目15 括号匹配(二)(区间DP)
点我看题目 题意 : 中文题不详述. 思路 : 本来以为只是个小模拟,没想到是个区间DP,还是对DP不了解. DP[i][j]代表着从字符串 i 位置到 j 位置需要的最小括号匹配. 所以初始化的DP ...
- C语言数据结构之栈:括号匹配
括号匹配这是个很简单的题目,如果只有小括号,就模拟进栈和出栈的过程就行了: 注:输入时'@'作为结束标志 #include <stdio.h> int main() { freopen(& ...
- [NYOJ 15] 括号匹配(二)
括号匹配(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:6 描述 给你一个字符串,里面只包含"(",")","[&qu ...
随机推荐
- Android(java)学习笔记189:ContentProvider使用(银行数据库创建和增删改查的案例)
1. Android的四大组件: (1)Activity 用户交互的UI界面 (2)Service 后台运行的服务 (3)BroadcastReceiver 广播接收者 (4)ContentPro ...
- CSS3 动画-- 鼠标移上去,div 会旋转、放大、移动
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- web pack 生成本地dist后 本地可以访问 路径由/ 改 ./
config / index.js 里面将 / 改成 ./ 有两个 都改了 反正管用 然后npm run build 如果涉及到字体 css里面不会改 需要手工改成 ../../ 反正一般用到字体也不 ...
- 笔试算法题(09):查找指定和值的两个数 & 构造BST镜像树
出题:输入一个已经升序排序的数组和一个数字:要求在数组中查找两个数,这两个数的和正好等于输入的那个数字,输出任意一对数字就可以,要求时间复杂度是O(n): 分析:对于升序排序的数组{…i…j…k…m… ...
- python 1-1模块介绍和使用
1. 什么是模块 1.1 模块就是一系列功能的集合体 1.1.1 模块有三种来源 1.内置的模块 2.第三方的模块 3.自定义模块 1.1.2 模块的格式: 1.使用Python编写的.py文件 2. ...
- redis(以php代码为例)
备注:redis及phpredis扩展安装请查看:PHP典型功能与Laravel5框架开发学习笔记 redis具有原子性,所以在高并发情况下确保数据的一致性 一.连接 $redis = new Red ...
- 大前端之HTML5\CSS3
- JS 比较运算符 逻辑运算符
逻辑运算符 三元运算符 摘自:http://www.w3school.com.cn/js/js_comparisons.asp
- MySQL操作示例
""" MySQL综合练习作业 """ # 1.自行创建测试数据: # 创建数据库 """ create da ...
- linux中的命令
1,ln-链接 功能是为某一个文件在另外一个位置建立一个同步的链接,这个命令最常用的参数是-s,具体用法是: ln -s 源文件 目标文件 // -s 是 symbolic(符号,象征)的意思. l ...