括号匹配测试代码笔记如下:

 #include<stdio.h>
#include<string.h>
#include <stdlib.h>
#define SIZE 10 typedef struct Stack
{
char c[SIZE]; //存放左弧 它是一个字符
int top;
}STACK,*PSTACK; //1.初始化栈
void Init_Stack(PSTACK S) //这里只需要一个参数 把栈传进来初始化
{
S->top = ; //栈顶是从第0个下标开始
for (int i = ; i < SIZE; i++)
{
S->c[i] = ;
}
} //2.入栈操作 void Push_Stack(PSTACK S, char data) //参数1:表明插入的栈 参数2: 要插入的数据
{
//2.1 判断栈是否是满的 如果是满的就退出 满了你还要插入 会报错 if (S->top >= SIZE)
{
printf("栈满!无法继续插入\n");
return; //结束这个函数.
} //2.2 栈没有满
S->c[S->top] = data;
S->top++; //在执行插入操作之后 我的top要+1
} //3.获取栈顶元素 这里只是得到栈顶元素 不是出栈
char GetStackTop(PSTACK S)
{
return S->c[S->top - ];
} //4. 出栈
void Pop_Stack(PSTACK S)
{
//这里我就不判断 判断是不是空 S->top--; //所有操作都是同top去操作 我只需要改变top的位置
} //5.判断是不是空的栈
int Stack_Empty(PSTACK S) //函数返回1 说明什么栈是空的 如果返回0说明栈是有元素的
{
return S->top == ; //等于0说明栈是空的
}
//我只需要在前面代码的基础 加一个函数
int isEatch(PSTACK S, char *str) // 参数1: 指明左弧要入栈的是哪一个栈 参数2:要匹配的字符串 返回值:返回1说明匹配 返回0说明不匹配
{
// 得到要匹配的字符串长度
int len = strlen(str);
//循环遍历每一个字符
for (int i = ; i < len; i++) // () [] {}
{
switch (str[i])
{
case '(':
case '[':
case '{':
//如果是左弧 要入栈 Push_Stack(S, str[i]);
break;
case ')':
if (!Stack_Empty(S) && GetStackTop(S) == '(')
{
Pop_Stack(S);
}
else
{
return ; //如果栈为空 或者 栈顶元素跟当前元素不匹配
}
break;
case ']': //自己写
break;
case '}': //自己写
break;
}
}
//判断最后栈里面是否还有数据 如果右说明是不匹配
if (!Stack_Empty(S))
{
return ;
}
//返回1 说明是匹配的
return ; } int main()
{
STACK MyStack;
Init_Stack(&MyStack);
char Str[];
while ()
{
printf("请输入一个字符串: ");
scanf("%s", Str);
int a = isEatch(&MyStack, Str);
if (a)
{
printf("括号匹配!\n");
}
else
{
printf("括号不匹配!\n");
}
}
return ;
}

C++学习(三十一)(C语言部分)之 栈和队列(括号匹配示例)的更多相关文章

  1. Collection集合重难点梳理,增强for注意事项和三种遍历的应用场景,栈和队列特点,数组和链表特点,ArrayList源码解析, LinkedList-源码解析

    重难点梳理 使用到的新单词: 1.collection[kəˈlekʃn] 聚集 2.empty[ˈempti] 空的 3.clear[klɪə(r)] 清除 4.iterator 迭代器 学习目标: ...

  2. 学习笔记:oracle学习三:SQL语言基础之sql语言简介、用户模式

    目录 1.sql语言简介 1.1 sql语言特点 1.2 sql语言分类 1.3 sql语言的编写规则 2.用户模式 2.1 模式与模式对象 2.2 实例模式scott 本系列是作为学习笔记,用于记录 ...

  3. 学习笔记:oracle学习三:SQL语言基础之检索数据:简单查询、筛选查询

    目录 1. 检索数据 1.1 简单查询 1.1.1 检索所有列 1.1.2 检索指定的列 1.1.3 查询日期列 1.1.4 带有表达式的select语句 1.1.5 为列指定别名 1.1.6 显示不 ...

  4. ballerina 学习 三十一 扩展开发(二)

    上篇说了使用ballerina 语言开发扩展模块,对于注解类型的我们是需要使用java 语言进行 开发的 官方提供了一个hello 的demo可以参考 https://github.com/balle ...

  5. ElasticSearch7.3学习(三十一)----Logstash基础学习

    一.Logstash基本介绍 Logstash 是一个功能强大的工具,可与各种部署集成. 它提供了大量插件,可帮助你解析,丰富,转换和缓冲来自各种来源的数据(文件.数据库......).logstas ...

  6. Java开发学习(三十一)----Maven属性与版本管理

    一.属性 1.1 问题分析 如下图所示 你会发现,如果现在想更新Spring的版本,你会发现依然需要更新多个jar包的版本,这样的话还是有可能出现漏改导致程序出问题,而且改起来也是比较麻烦. 问题清楚 ...

  7. python学习 (三十一) python中的class

    1 python的类:   Python类都继承自object. __init__: 构造函数,如果不写,有一个默认的. __init__: 这个构造函数只能有一个,Python中不能有多个构造函数. ...

  8. 渗透测试学习 三十一、MSF

    术语 测试者利用系统程序或服务的漏洞进行攻击的一个过程——渗透攻击(exploit),攻击载荷(payload) 攻击者在目标系统上执行的一段代码,该代码具有反弹链接,创建用户.执行其他系统命令的功能 ...

  9. 前端学习(三十一)canvas(笔记)

    canvas             画布    画图.做动画.做游戏===========================================    canvas就是新标签 必须获取绘图 ...

随机推荐

  1. js里面判断一个字符串是否包含某个子串的方法

    1. ES6的includes, 返回 Boolean var string = "foo", substring = "oo"; string.include ...

  2. MAVEN 创建 JAR项目

    从Maven模板创建一个项目 在终端或命令提示(windows)中,浏览到要创建JAVA项目的文件夹下 键入如下命令: mvn archetype:generate -DgroupId={projec ...

  3. Win10系列:JavaScript 动画1

    在应用程序中使用动画会使应用显得更加生动,进而给用户带来良好的视觉效果.例如,当用户将某个项添加到列表时,新项不会立即出现在列表中,而是采用动画形式到达相应位置,并且列表中的其他项也采用动画形式移动到 ...

  4. Uva LA 3902 - Network 树形DP 难度: 0

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  5. 微信和支付宝支付模式详解及实现(.Net标准库)

    支付基本上是很多产品都必须的一个模块,大家最熟悉的应该就是微信和支付宝支付了,不过更多的可能还是停留在直接sdk的调用上,甚至和业务系统高度耦合,网上也存在各种解决方案,但大多形式各异,东拼西凑而成. ...

  6. spoj220

    题解: 后缀数组 把所有串连接起来 二分答案 代码: #include<cstdio> #include<cstring> #include<algorithm> ...

  7. day23-python操作数据库三

    创建表import MySQLdb def connect_mysql(): db_config = { 'host': '192.168.1.5', 'port': 3306, 'user': 'w ...

  8. 初始JSP

    什么是JSP 1.JSP(Java Server Pages):在HTML中嵌入Java脚本代码 静态内容是JSP页面中的静态文本,其基本是HTML文本,与Java和JSP语法无关. 例子: 运行结果 ...

  9. `define、parameter、localparam三者的区别(转)

    `define: 可以跨模块的定义,写在模块名称上面,在整个设计工程都有效.一旦‘define指令被编译,其在整个编译过程中都有效.例如,通过另一个文件中的`define指令,定义的常量可以被其他文件 ...

  10. CAN总线(1)--初探(更新中)

    前言: CAN总线可以控制可以使用Xilinx中IP核来直接实现,也可以使用专用的CAN芯片(例如:SJA1000)通过单片机和FPGA驱动控制来实现: 目前是使用控制器SJA1000来进行实现: C ...