1+2+3 aaa)bbbbbb((cccc)
判断这段字符串中的括号是否对上如果没有对上是那一个没有对上

  1. 判断他是否是括号不是就执行下一次
  2. 匹配到左括号将它压入堆栈
  3. 匹配到右括号判断栈是否为空,空表示右括号没有匹配的左括号
  4. 不为空执行弹栈,如果是左就匹配
  5. 判断此时的栈如果为空,左括号没有匹配的右括号

.h


//链式栈的节点
typedef struct LINKNODE
{struct LINKNODE*next;
}LinkNode;//链式栈
typedef struct LINKSTACK
{LinkNode head;int size;}LinkStack;class linkstack
{
public:linkstack();~linkstack();
public:LinkStack* Stack;public://入栈void push_back(LinkStack* stack,LinkNode* data);//出栈void pop_back(LinkStack* stack);//返回栈顶元素LinkNode* Top_LinkStack(LinkStack* stack);//返回栈元素的个数int Size_LinkStack(LinkStack* stack);//清空栈void Clear_LinkStack(LinkStack* stack);};

.cpp


linkstack::linkstack()
{Stack = new LinkStack;Stack->head.next = NULL;Stack->size = 0;
}linkstack::~linkstack()
{if (Stack == NULL){return;}delete Stack;}//入栈
void linkstack::push_back(LinkStack* stack, LinkNode* data)
{if (stack == NULL || data == NULL){return;}data->next = stack->head.next;stack->head.next = data;stack->size++;
}//出栈
void linkstack::pop_back(LinkStack* stack)
{if (stack == NULL || stack->size == 0){return;}LinkNode* pNext = stack->head.next;stack->head.next = pNext->next;stack->size--;
}//返回栈顶元素
LinkNode* linkstack::Top_LinkStack(LinkStack* stack)
{if (stack == NULL || stack->size == 0){return NULL;}return stack->head.next;
}//返回栈元素的个数
int linkstack::Size_LinkStack(LinkStack* stack)
{if (stack == NULL ){return -1;}return stack->size;
}//清空栈
void linkstack::Clear_LinkStack(LinkStack* stack)
{if (stack == NULL || stack->size == 0){return;}stack->head.next = NULL;stack->size = 0;
}

main.cpp


typedef struct MYCHAR
{LinkNode node;char* pAddress;int index;}MyChar;int IsLeft( char c)
{return c == '(';
}int IsRight(char c)
{return c == ')';
}MyChar* CreateMyChar(char* p,int index)
{MyChar* mychar = new MyChar;mychar->pAddress = p;mychar->index = index;return mychar;
}void ShowError(char* str,int pos)
{cout << str << endl;for (int i = 0; i < pos; i++){cout << " ";}cout << "A";
}int main()
{char* str = "1+2+3(aaabbbbbb(cccc)";char* p = str;int index = 0;linkstack* l = new linkstack();while (*p != '\0'){//如果是左括号 直接进栈if (IsLeft(*p)){l->push_back(l->Stack, (LinkNode*)CreateMyChar(p,index));}//如果是右括号 从栈顶弹出元素 if (IsRight(*p)){if (l->Size_LinkStack(l->Stack) >0){MyChar* mychar = (MyChar*)l->Top_LinkStack(l->Stack);if (IsLeft(*mychar->pAddress)){l->pop_back(l->Stack);delete mychar;}}else{cout << "右括号没有匹配的左括号"<<endl;ShowError(str,index);break;}}p++;index++;}while (l->Size_LinkStack(l->Stack) > 0){MyChar* mychar = (MyChar*)l->Top_LinkStack(l->Stack);cout << "左括号没有匹配的右括号"<<endl;ShowError(str,mychar->index);l->pop_back(l->Stack);delete mychar;}delete l;return 0;
}

栈的应用就进匹配_笔记相关推荐

  1. 数据类型不匹配_笔记 | 自学Python 06:数据类型之列表

    列表是一种用于保存一系列有序项目的集合,也就是说,你可以利用列表保存一串项目的序列. 想象起来也不难,你可以想象你有一张购物清单,上面列出了需要购买的商品,除开在购物清单上你可能为每件物品都单独列一行 ...

  2. c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...

    文字:独木 排版:独木 图片:独木 栈与队列 1.括号匹配问题 栈 例题1 例题2-----不匹配例题1 例题3-----不匹配例题2 2. 表达式求值问题 例题 1.中缀表达式转前缀表达式 2.中缀 ...

  3. c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...

    第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...

  4. c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)

    第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...

  5. 菜菜的刷题日记 | 蓝桥杯 — 十六进制转八进制(纯手撕版)附进制转换笔记

    系列索引:菜菜的刷题日记 | 被LeetCode用Python狂虐的那段日子 万万没想到啊,回老家过年断更的几天之后,我会因为无聊在除夕这天做了会儿题,然后写篇题解. 文章目录 [题目] [我的代码] ...

  6. 《Web全栈工程师的自我修养》读书笔记

    <Web全栈工程师的自我修养>读书笔记 [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://w ...

  7. python 栈_Python数据结构与算法05:基本结构:栈的应用之括号匹配

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 算法流程 括号匹配情况介绍 我们经常会遇到类似(9-1)*(8+7)/(4-2).print(& ...

  8. 王者荣耀全栈项目部署到阿里云服务器笔记

    王者荣耀全栈项目部署到阿里云服务器笔记 原创Charles_GX 最后发布于2020-03-27 01:27:00 阅读数 177  收藏 展开 王者荣耀全栈项目部署到阿里云服务器笔记 学习的项目来自 ...

  9. 利用栈进行程序的括号匹配

    利用栈进行程序的括号匹配 程序代码: /** fanchen.cpp : 定义控制台应用程序的入口点.**/#include "stdafx.h" #include <ios ...

最新文章

  1. Python超过R,成为数据科学和机器学习的首选语言!
  2. htmlentities()与htmlspecialchars()
  3. IOS项目之分层MVVM
  4. PHP的CI框架流程基本熟悉
  5. MM定价计算方案确定详细图解
  6. 如何使用PyTorch的量化功能?
  7. Golang类型转化方法汇总
  8. 负载均衡在分布式架构中是怎么玩起来的?
  9. 在MFC单文档中,如何操作状态栏
  10. C++STL容器,你真的会用了吗?——插入、删除、遍历和查找操作性能对比——遍历和查找(精简易懂版,句句干货)
  11. 100层楼2个鸡蛋,如何得知鸡蛋能承受几层的撞击
  12. BCB线程的互斥与同步
  13. python单引号和什么的作用几乎是一样的_Python中单双多引号的用法与区别
  14. JAVA如何插入MySql的datetime类型
  15. Wiki你长的为何与众不同--对Wiki独创写作语法原因的思考
  16. 重新安装的keil需要的设置-字体颜色固件库中文显示
  17. lv官网编码查询_申购比近3:1!这个单价2万的共产房审核结果可查询
  18. 9:参数校验-Java Spring
  19. 2022-2028年中国美容行业发展趋势前瞻与投资战略规划分析报告
  20. 安装Node.js,系统提示User installations are disabled via policy on the machine

热门文章

  1. Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)
  2. 成功解决TypeError: Object of type 'ndarray' is not JSON serializable
  3. TF学习:Tensorflow基础案例、经典案例集合——基于python编程代码的实现
  4. JAVA_OA(十四)番外:JAVAWEB防止表单重复提交的方法整合(包括集群部署)
  5. Spring Framework Reference Documentation手册官网下载地址
  6. 决定系数R2真的可靠吗?
  7. 三、python沉淀之路--列表(list)
  8. POJ1195Mobile phones
  9. 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra
  10. Mongodb利用aggregation实现抽样查询(按记录数和时间)