#define _CRT_SECURE_NO_WARNINGS
#include"LinkList.c"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//括号有没有匹配。哪个不匹配就指向哪个。。
//扫描字符串
//1、非括号字符忽略
//2、若遇到左括号,则入栈
//3、若遇到右括号,则将栈顶元素取出,判断是不是左括号,如果是,则此右括号匹配成功
//4、最后看栈是否为空,若有,则说明匹配失败typedef struct MYCHAR {LinkNode node;char* pAddres;int index;
}MyChar;int IsLeft(char c)
{return c == '(';
}
int IsRight(char c)
{return c == ')';
}
MyChar* CreateMyChar(char* p,int index)
{MyChar* mychar = (MyChar*)malloc(sizeof(MyChar));mychar->pAddres = p;mychar->index = index;return mychar;
}void ShowError(char* str,int pos)
{printf("%s\n", str);for (int i = 0; i < pos; i++){printf(" ");}printf("A\n");
}int main()
{char* str = "1+2+6(dst)dfsfsf((sdgf)";LinkList* stack = Init_linkList();char* p = str;int index = 0;while (*p != '\0'){//如果是左括号,进栈if (IsLeft(*p)){// Push_LinkList(stack, p); 错误Push_LinkList(stack, (LinkNode*)CreateMyChar(p,index));}//如果是右括号,从栈顶弹出元素,判断是不是左括号if (IsRight(*p)){if (Size_LinkList(stack) > 0){MyChar* mychar = (MyChar*)Top_LinkList(stack);if (IsLeft(*(mychar->pAddres))){Pop_LinkList(stack);free(mychar);}}else{printf("右括号没有匹配的左括号\n");ShowError(str, index);break;}}p++;index++;}while (Size_LinkList(stack) > 0){MyChar* mychar = (MyChar*)Top_LinkList(stack);printf("左括号没有匹配的右括号\n");ShowError(str, mychar->index);Pop_LinkList(stack);free(mychar);}system("pause");return 0;
}

运行结果:

数据结构-栈3-栈的应用-就近匹配相关推荐

  1. 栈的应用 - 就近匹配

    链式存储栈的API详情參看我的博文:栈的链式存储 - API实现 就近匹配 差点儿全部的编译器都具有检測括号是否匹配的能力 怎样实现编译器中的符号成对检測? #include <stdio.h& ...

  2. 数据结构(3) 第三天 栈的应用:就近匹配/中缀表达式转后缀表达式 、树/二叉树的概念、二叉树的递归与非递归遍历(DLR LDR LRD)、递归求叶子节点数目/二叉树高度/二叉树拷贝和释放...

    01 上节课回顾 受限的线性表 栈和队列的链式存储其实就是链表 但是不能任意操作 所以叫受限的线性表 02 栈的应用_就近匹配 案例1就近匹配: #include <stdio.h> in ...

  3. sdut 2134 数据结构实验之栈与队列四:括号匹配

    数据结构实验之栈与队列四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript ...

  4. 数据结构实验之栈四:括号匹配

     数据结构实验之栈四:括号匹配 Description 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. Inp ...

  5. sdut 数据结构实验之栈四:括号匹配

    数据结构实验之栈四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description ...

  6. 数据结构 栈的实例应用,括号匹配

    引用栈的顺序存储,实现括号匹配问题查找: 头文件: #pragma once#include<string.h> #include<stdlib.h>#define MAX 1 ...

  7. 数据结构之【栈】的基本操作C语言实现

    引题:        很多人都把[栈]描述成[弹匣],但我总感觉有点不恰当,因为弹匣从上端[装弹]之后,子弹总是在匣的上层:而元素[进栈]之后,总在栈的下面.        我觉得还是描述成[从下往上 ...

  8. char栈java,Java数据结构与算法-栈和队列(示例代码)

    (摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...

  9. 数据结构与算法 / 栈(stack)

    @time 2019-07-24 @author Ruo_Xiao @reference 极客时间 -> 数据结构与算法之美 ---------------------------------- ...

  10. JVM【带着问题去学习 02】数据结构栈+本地方法栈+虚拟机栈+JVM栈运行原理

    1.数据结构栈 栈是一种比较简单的数据结构,后进先出.栈本身是一个线性表,但是这个表中只有一端允许数据的进出.栈的常用操作包括入栈push和出栈pop,对应于数据的压入和弹出.由于栈后进先出的特性,常 ...

最新文章

  1. 分享一下python入门知识点-输入与输出教程,不喜勿喷
  2. android界面去掉标题栏和状态栏
  3. SPOJ 287 Smart Network Administrator
  4. 「mysql优化专题」这大概是一篇最好的mysql优化入门文章(1)
  5. 嵌入式Linux上通过boa服务器实现cgi/html的web上网【转】
  6. php 检测nfs状态,PHP和Shell实现检查SAMBA与NFS Server是否存在_php技巧
  7. 【java】IDEA安装VisualVM插件-使用介绍 检测死锁 内存 cpu 慢方法
  8. java list 取两条_java list集合中有多条数据随机两条一组
  9. 【封装那些事】 泄露的封装
  10. datagrid.columns有没有图片图片属性_天龙八部:86四属性神器在线求超越,原来逍遥扇子还能这么洗...
  11. lisp 计算三点的夹角_计算三点所形成的夹角的三种方法
  12. DeR-ViT(CVPR2022)
  13. 从高考到程序员,一生无悔的选择,码农的成长之路
  14. 简单投资组合净值的计算
  15. 互联网”还是“技术”?派系分明的电子烟市场
  16. Vivado使用技巧(24):HDL/XDC中设置综合属性
  17. 江苏统考计算机英语作文,2017年高考江苏卷英语作文
  18. 关于matlab兼容性win10系统,详解win10系统运行不了matlab10软件的办法
  19. 华为服务器pe安装系统教程视频教程,华为电脑重装windows7系统的方法
  20. 2021年原生JS实现韩雪冬轮播图

热门文章

  1. Java SSM1——Maven
  2. python画二维数组散点图_2个numpy二维数组的散点图
  3. 测试用例设计方法_黑盒测试——测试用例设计方法
  4. djpython教程_简单介绍Python的Django框架的dj-scaffold项目
  5. java excel api及详细教程_针对Java Excel API及详细教程
  6. Java中常用的类,包,接口
  7. php电商网站开发流程图,php网上购物平台设计+ER图+流程图.doc
  8. 直流有刷减速电机结构及其工作原理
  9. echart 高度 不用 不撑满_注意厨房台面高度及细节 装出省心舒服 装出事半功倍...
  10. java的三个环境变量是啥_JAVA中常用需要设置的三个环境变量(JAVA_HOME、CLASSPATH、PATH)...