c语言/c++(数据结构篇) 之 括号匹配检验实例(栈和队列)(4/7)

2023-11-18

实验目的及要求:

熟悉掌握利用栈完成括号是否匹配的检验。

实验内容:

利用栈完成括号匹配检验。

目的:掌握栈的后进先出原则在解决实际问题中的应用。

内容:输入一组括号,构造栈,利用栈判断所输入的括号是否匹配,并能够输出匹配、多左括号、多右括号三种不同结果。

对输入的任意个非负十进制数,打印出与其值相等的八进制数。

具体实现过程:

1、以数组表达顺序栈,用来存放将要输入的括号;

2、通过栈底指针的不同取值区分不同情况;

3、对函数进行连接。

4、基本要求:检验有圆括号出现的情况;深入分析:检验同时出现圆括号、方括号和花括号的情况。

实验步骤与程序:

#include<stdio.h>

#include<stdlib.h>

typedef struct

{

      int *base;

      int *top;

      int size;

}sqstack;

sqstack initstack()

{

      sqstack s;

      s.base=(int *)malloc(100*sizeof(int));

      s.top=s.base;

      return s;

}

sqstack push(sqstack s,int e)

{

      *(s.top)=e;

      s.top++;

      return s;

}

int gettop(sqstack s)

{

      if(s.base==s.top)

      {

            return 0;

      }

      return *(s.top-1);

}

sqstack pop(sqstack s)

{

      s.top--;

      return s;

}

void print(sqstack s)

{

      while(gettop(s)!=0)

      {

            printf("%d\n",gettop(s));

            s=pop(s);

      }

}

int main()

{

      sqstack s;

      char c=' ';

      s=initstack();

      printf("请输入括号,以#结束\n");

      while(c!='#')

      {

            scanf("%c",&c);

            switch (c)

            {

                  case '(':s=push(s,1);break;

                  case '[':s=push(s,2);break;

                  case '{':s=push(s,3);break;

                  case ')':

                       {

                             if(gettop(s)==0)

                             {

                                   printf("多了*)*\n");

                                   return 0;

                             }

                             else if(gettop(s)==1)

                             {

                                   s=pop(s);

                             }

                             else

                             {

                                   printf("括号不匹配!\n");

                                   return 0;

                             }

                            

                       };break;

                  case ']':

                       {

                             if(gettop(s)==0)

                             {

                                   printf("多了*]*\n");

                                   return 0;

                             }

                             else if(gettop(s)==2)

                             {

                                   s=pop(s);

                             }

                             else

                             {

                                   printf("括号不匹配!\n");

                                   return 0;

                             }

                            

                       };break;

                  case '}':

                       {

                             if(gettop(s)==0)

                             {

                                   printf("多了*}*\n");

                                   return 0;

                             }

                             else if(gettop(s)==3)

                             {

                                   s=pop(s);

                             }

                             else

                             {

                                   printf("括号不匹配!\n");

                                   return 0;

                             }

                            

                       };break;

                  default:break;

            }

      }

      if(s.top==s.base)

      {

            printf("括号匹配\n");

      }

      else

      {

            printf("多了左括号\n");

      }

      return 0;

 }

运行结果:

结果分析与讨论:

1. 我们可以利利用栈的特点即后进先出的特点来实现括号匹配的检验,存储括号字符的数组通过malloc实现动态分配长度,每读入一个括号,若是左括号,则直接进栈,等待相匹配的同类右括号;若读入的是右括号,且与当前栈顶左括号同类型,则二者匹配,将栈顶的左括号弹出,否则属于不合法情况。另外。如果输入序列已经读完,而栈中仍有等待匹配的左括号,或者读入一个右括号,而栈中已无等待匹配的同类型左括号,均属于不匹配的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言/c++(数据结构篇) 之 括号匹配检验实例(栈和队列)(4/7) 的相关文章

随机推荐

  • Linux命令汇总

    1 常用的快捷键 tab键 命令或者路径提示及不全 ctrl c 放弃当前输入 终止当前任务或程序 ctrl l 清屏 ctrl insert 复制 鼠标右键 粘贴 alt c 断开连接 ctrl shift R 重新连接 alt 1 2
  • 【计算机视觉】上游任务和下游任务的理解

    文章目录 一 前言概述 二 上游任务 三 下游任务 一 前言概述 计算机视觉中有常见的四大任务 分类 解决 what 定位 解决 where 检测 解决 what 和 where 分割 实例分割 语义分割和场景分割等像素级别的处理 二 上游
  • 使命、愿景、价值观到底有什么区别

    以前的企业都是在发展到一定成熟阶段 才开始考虑这三个问题 但今天人们越来越多的意识到 哪怕在企业发展的初期 对于创业企业来说 确定公司的使命 愿景和核心价值观也是非常重要的 明确的使命 愿景和核心价值观对于企业的好处在于 形成统一共识目标方
  • linux下找不到sqlite3头文件,linux下 使用库文件时遇到相关问题的解决方法...

    今天用到sqlite相关函数接口 要用到 include 头文件 如果之前没有安装过sqlite3 这个库文件肯定是找不到的 网上看到需要安装sqlite3 libsqlite3 dev 顺利的话apt get就能安装 如果像我一样软件源比
  • qt中直接用qcustomplot来画图

    参考博客 https www cnblogs com yingjiehit p 3988701 html 画出的图 改良版的图形 最后的源码见 https download csdn net download littlehero 121
  • 谷歌翻译SDK (Google Translate SDK)的使用

    一 安装Google Cloud SDK http blog csdn net nicolelili1 article details 68947164 二 设置你的项目 1 登陆谷歌账号 没有就注册 https accounts goog
  • 【SpringBoot】ApplicationContext介绍

    1 ApplicationContext是spring继BeanFactory之外的另一个核心接口或容器 允许容器通过应用程序上下文环境创建 获取 管理bean 为应用程序提供配置的中央接口 ApplicationContext继承关系 2
  • PCA+SVM手写数字识别 代码参考

    我可以为您提供一些参考 但是最终具体实现还需要您根据自己的需求进行调整 可以参考下面的代码 from sklearn import datasets from sklearn model selection import train tes
  • Android Intent的FLAG标志详解

    原文地址 Android Intent的FLAG标志详解 前言 在Android开发中 Intent想必大家经常用 Intent本意为目的 意向 意图 在Android中 Intent是系统各组件 或应用程序 之间进行数据传递的数据附载者
  • 小程序开发Q&A

    本文总结小程序开发中常见的错误问题 请开发者利用浏览器的搜索功能来检索关键字 快速定位到相关问题 快捷键Ctrl F打开搜索框 Q1 为什么会出现 脚本错误或者未正确调用Page 的错误提示 A 出现这个错误的原因通常是因为对应页面的js文
  • 真香系列!史上最全的微服务专业术语面试50问,赶快收藏备战金九银十!

    前言 上个月4号通过阿里工作的学长进行内推 7天简历评估 11号接到电话面试 尽管猝不及防回答仓促 但好在前期准备充分 通过 3天后进行现场面试 通知时间为早上10点 当日设了七点闹钟 结果五点五十三分惊醒后再无法入睡 起床 重新翻看之前做
  • 春秋云镜 CVE-2022-32991

    春秋云镜 CVE 2022 32991 Web Based Quiz System SQL注入 靶标介绍 该CMS的welcome php中存在SQL注入攻击 1 启动场景 2 注册任意用户 3 登录成功进入主页 http eci 2zei
  • postgresql 清空数据表 truncate

    在 mysql 中如果需要清空表 只需要 TRUNCATE table name 即可 如果有自增的 id 字段 也会还原回 1 但是 postgresql 与 mysql 稍有不同 postgresql 的自增字段 是通过 序列 sequ
  • Python Turtle绘图基础(三)——Turtle色彩和画笔设置

    今天继续给大家介绍Python相关知识 本文主要内容是Python Turtle绘图基础 三 包括Turtle色彩和Turtle画笔设置 一 Turtle色彩设置 想要用Turtle绘制出更加复杂 更加美丽的图形 就必须学习Turtle的色
  • 【按照年月去统计信息并分类展示】

    1 前言 需求是需要将历史订单按照年月分类展示 并展示汇总值 由于后端返回的是数组的数据 并没有将数据做好统计分类 出于对自己的自信以及不想给别人添麻烦的信息 然后自己写了一下处理的方法 然后放上最后的效果图吧 2 代码实现 按照月份统计每
  • 跟着英雄刷算法-素数

    跟着英雄大佬刷算法的第三天 数论基础 优化一 对于一个非素数n来说 如果x是n的一个因子 那么n x也是n的一个因子 我们可以假设x 所以对于一个数n 判断它是否为一个素数我们需要确定的范围为 2 根号下n 优化二 例1 不是素数返回0 b
  • Tomcat 8 解决“At least one JAR was scanned for TLDs yet contained no TLDs”问题

    参考 http stackoverflow com questions 14375673 how to fix jsp compiler warning one jar was scanned for tlds yet contained
  • 网络层抓包tcpdump

    sudo tcpdump i eth0 s 0 nn host iphost w xxx pcap 这段代码使用了命令行工具 tcpdump 用于在Linux系统上捕获网络数据包 让我详细介绍一下这段代码的含义和 tcpdump 的用法 代
  • 2022年4月3日-4月15日(方案A,ogremain源码抄写+ue4视频学习,共22小时,合计1270小时,剩8730小时)

    截至2022年4月1日 ogreMain剩下4533行 含注释 纯代码2646行 周二时学完了ue第五套视频教程编辑器1 good 接下来 UE4视频教程进行到了mysql 1 1 tf1 2 1 oss 4 2 simpleThread
  • c语言/c++(数据结构篇) 之 括号匹配检验实例(栈和队列)(4/7)

    实验目的及要求 熟悉掌握利用栈完成括号是否匹配的检验 实验内容 利用栈完成括号匹配检验 目的 掌握栈的后进先出原则在解决实际问题中的应用 内容 输入一组括号 构造栈 利用栈判断所输入的括号是否匹配 并能够输出匹配 多左括号 多右括号三种不同