您现在的位置是:首页 > 正文

括号匹配数据结构

2024-01-30 21:32:57阅读 0

学习分享
本周学习的是数据结构的括号匹配,所谓括号匹配指的是在命令端输入一行只含有括号的代码,然后运行代码,判断每一个左括号是否有一个右括号与之对应,从而判断输入的数据是否违法
代码如下:

#define MAXSIZE 100
#define OK 1
#define ERROR 0
#include<iostream>
#include<stdio.h>
#define OVERFLOW 0
using namespace std;

typedef char SElemType;
typedef int Status;
typedef struct{
	SElemType *base;
	SElemType *top;
	int stacksize;
}SqStack; 

Status InitStack(SqStack &S)
{
	S.base=new SElemType[MAXSIZE];
	if(!S.base) exit(OVERFLOW);
	S.top=S.base;
	S.stacksize=MAXSIZE;
	return OK;
}

Status Push(SqStack &S, SElemType e)//入栈操作 
{
	if(S.top-S.base==S.stacksize) return ERROR;
	*S.top++=e;
	return OK;
}

Status Pop(SqStack &S,SElemType &e)
{
	if(S.top==S.base) return ERROR;
	e=*--S.top;
	return OK;
}

SElemType GetTop(SqStack S)
{
	if(S.top!=S.base)
	  return *(S.top-1);
}

Status StackEmpty(SqStack S)
{
	if(S.top==S.base) return ERROR; //栈空
	else return OK;  //栈不空
}

int main()
{
	char ch;
	SqStack S;
	InitStack(S);
	int flag=1;
	cin>>ch;
	while(ch!='#'&&flag)
	{
		char a='(',b='[',c='{';
		switch(ch)
		{
			case '{':
			case '[':
			case '(':
			  Push(S,ch);
			  break;
			case ')':
				if(StackEmpty(S)&&GetTop(S)=='(')
				Pop(S,a);
				else flag=0;
				break;
			case ']':
				if(StackEmpty(S)&&GetTop(S)=='[')
				Pop(S,b);
				else flag=0;
				break;
			case '}':
				if(StackEmpty(S)&&GetTop(S)=='{')
				Pop(S,c);
				else flag=0;
				break;
		}
		cin>>ch;
	}
	if(!StackEmpty(S)&&flag) cout<<"匹配成功"; 
	else cout<<"匹配失败"; 
	return 0;
}
  • 第一步
    先定义一个结构体,里面有两个指针;并初始化栈。
  • 第二步
    接着构建以下四个方法,入栈Push,出栈Pop,获取站内首元素GetTop,判断栈是否为空。
  • 第三步
    编写主方法,运用写的四个方法来进行括号匹配,程序完成。

网站文章

  • echart图表保存为图片的两种方式

    echart图表保存为图片的两种方式

    将echarts图表和ucharts图表保存为图片

    2024-01-30 21:32:28
  • 头歌大数据——MapReduce 基础实战 答案 无解析

    头歌大数据——MapReduce 基础实战 答案 无解析

    2024-01-30 21:32:20
  • JMeter巧用计数器实现CSV数据文件设置的功能

    JMeter巧用计数器实现CSV数据文件设置的功能

    需求本次压测范围包含登录接口,但是压测环境user表用户数据量太少,和生产环境数据量不是一个量级,因此,需要先通过并发跑注册接口造用户数据需要参数化的字段是username和phone说明:本次演示的接口是示例接口,非实际生产环境接口注册接口如下:方案一:CSV 数据文件设置我们先通过代码(python或者java均可)造一定量的参数化数据写在参数化reg.txt文件中pac...

    2024-01-30 21:32:13
  • android线,android_线

    android线,android_线

    说明:android螺纹。android无非就是一个线程Main Thread和Worker Thread。(除了主线程Main Thread是Worker Thread)Main Thread 也叫...

    2024-01-30 21:31:35
  • HMM与CRF模型的使用过程存在哪些差异?

    HMM与CRF模型的使用过程存在哪些差异?

    训练后, 我们就得到了具备预测能力的新模型: lambda = CRF(w1, w2, ..., wn), 其中的模型参数已经改变.之后给定输入序列(x1, x2, ..., xn), 经过模型计算l...

    2024-01-30 21:31:28
  • Java读取文件为字符串】使用Java编程读取文件内容并将其作为字符串进行处理

    在Java中,读取文件内容需要使用文件输入流(FileInputStream)和缓冲区输入流(BufferedReader)。这是一个简单的示例,展示了如何使用Java读取文件并将其作为字符串进行处理...

    2024-01-30 21:31:21
  • flash制作车轮转动的汽车沿着路径走的动画

    flash制作车轮转动的汽车沿着路径走的动画

    二维动画制作实验报告一.实验目的1.掌握动画的概念。2.熟练Flash的界面。3.掌握Flash界面中各组成元素和功能。二.实验工具    Flash三.实验要求制作车轮转动的汽车沿着路径走。四.实验...

    2024-01-30 21:30:51
  • lattice-arc-post计算边上累计得分

    lattice-arc-post计算边上累计得分

    1 模型预测产生lat.1.gz这里请参考理解lattice,这里有介绍解码过程中如何产生lattice内容文件,以及lattice内容分析。2 边上累计得分gunzip -c 20200921.la...

    2024-01-30 21:30:45
  • CppCMS和Nginx协同工作

    为什么需要NginxCppCMS自己已经支持Http访问,为什么还需要Nginx.一些原因是我们需要动态负载平衡,还有原因是安全问题。下面的文字来自于CppCMS站点。CppCMS provides basic implementation of HTTP protocol and thus it can run behind reverse HTTP Proxy. But this o...

    2024-01-30 21:30:38
  • 12-Oracle包的定义与使用

    本章内容 1.包概述 2.包的创建 3.包的调用 4.包重载 5.包的初始化 6.包的持续性 7.包的串行化 8.包的管理

    2024-01-30 21:30:10